Python 算法交易实验22 评估指标计算

本文探讨了一种非标准化量化交易指标NoMeasurement,NoImprovement,作者强调自定义指标的重要性,并详细阐述了交易数量、盈利率、交易周期等因素在策略中的作用。通过实例展示了如何筛选交易、计算基本KPI和期间表现,以衡量交易性能和风险控制。

说明

No Measurement , No Improvement

这套并不是标准量化交易指标,一方面我对那套指标的确也不是很熟,另外我觉得可能自己琢磨一套会更实用一些。主要考虑以下几方面:

  • 1 交易的数量
  • 2 盈利特性:单均盈利率
  • 3 交易持续周期
  • 4 最大持有的股票数
  • 5 输赢:赢率和真实赢率
  • 6 盈亏比
  • 7 最大回撤

总体上说:

  • 我希望算法产生的交易够多,但不要太多,这样可以具有统计性,又不至于偏向高频;
  • 交易持续周期会影响到资金的占用、利用率等;
  • 最大持有的股票数一方面可以使整个组合表现出更好的稳定性,当然也会影响到资金占用;
  • 从信号的产生机制上,一定会混杂很多白噪声,所以要分为赢率和真实赢率;
  • 盈亏比则是考验算法的生存性;
  • 最大回撤则是投资风险的度量。回撤在所难免,关键要看能不能接受,值不值得;

内容

通过信号机制产生候选交易,通过模型来识别优质的交易,通过策略来进行修正

假设有一种信号机制(买入和卖出),可以为股票生成若干候选交易,我们希望对这些候选交易进行评估:

  • 1 可以根据信号筛选交易
  • 2 可以根据股票进行筛选
  • 3 可以根据交易期间进行筛选

1 候选交易

根据买入和卖出信号集,我们可以获得足够的候选交易hs300_df
在这里插入图片描述

2 根据信号集进行筛选

信号集有一个选择字段是signal_tuple(我隐藏了),第一步将关注的候选集根据信号拆分出来。其他可选的是股票列表和时间。

tem_df1 = process_filter_signal_df(hs300_df)

3 根据筛选后的信号集计算基本指标

随意选定一只股票,看起来还不错,一共466个候选订单,真实赢率29%,单均盈利率是7%,盈亏比为3.4。

some_code = '600010'
tem_df2 = tem_df1[tem_df1['code'] == some_code]
process_kpi001_base(tem_df2)

{
   
   'total_orders': 466,
 'win_rate': 0.4291845493562232,
 'real_win_rate': 0.2918454935622318,
 'win_v_loss': 3.4094531520791054,
 'hold_stocks': 1,
 'mean_margin': 0.07076018194400928}

Note: 候选订单并不是模拟交易的订单,可能会更多一些。候选订单的目的是尽量多的生成可能的交易,供模型学习。

4 期间表现

为了更直观的看到订单的实时表现,我们需要构造交易活动期间的所有数据:根据信号对的起始时间,通过merge全量分钟数据构造交易的活动(明细)数据

通过活动数据,我们可以观察:

  • 1 每个订单的最大、最小涨跌以及最大回撤
  • 2 若干个订单总的资金敞口和回撤

我们要计算两类数据:

  • 1 交易在打开和平仓之间的明细数据,用来看资金敞口。
  • 2 结合明细数据,在每笔订单的平仓点更新资本的数值,从而计算回撤

从单个的例子可以看到:

  • 1 最大回撤比较高。主要原因是冲顶后,没有及时控制(虽然还是赚的)。
  • 2 资金敞口很高。因为没有控制候选交易的数量,可以给每支股票一个cap。
  • 3 赢单的亏损一般不会超过10%。这样可以设置止损。
  • 4 输单的回撤事实上没有赢单大。因此回撤控制是用来确保更大的利益。
res_600010_dict ,detail_600010_dict= process_kpi002_performance_of_a_code(tem_df1,'600010')

res_600010_dict
{
   
   'max_drawback': -0.3254396180829447,
 'max_exposure': 112383526.72755373,
 'median_hold_days': 27.0,
 'median_order_drawback': -0.13348810214741724,
 'median_margin': -0.00986446020488569,
 'real_win_min_interest':           count      mean       std       min       25%       50%       75%  \
 real_win                                                                      
 0         330.0 -0.060642  0.044292 -0.179422 -0.088277 -0.054769 -0.020774   
 1         136.0 -0.033090  0.014999 -0.084479 -0.044288 -0.036120 -0.027810   
 
                max  
 real_win            
 0        -0.002000  
 1         0.006458  ,
 'real_win_max_draw_back':           count      mean       std       min       25%       50%       75%  \
 real_win                                                                      
 0         330.0 -0.095822  0.058116 -0.195652 -0.133609 -0.094828 -0.037787   
 1         136.0 -0.288716  0.054608 -0.313901 -0.313901 -0.313901 -0.313901   
 
                max  
 real_win            
 0         0.000000  
 1        -0.171184  ,
 'real_lose_max_interest':            count      mean       std       min       25%       50%       75%  \
 real_lose                                                                      
 0          434.0  0.286946  0.374751 -0.008085  0.009760  0.079744  0.870202   
 1           32.0  0.031577  0.027086 -0.002000  0.005677  0.029256  0.059415   
 
                 max  
 real_lose            
 0          0.952228  
 1          0.084441  ,
 'real_lose_draw_back':            count      mean       std       min       25%       50%       75%  \
 real_lose                                                                      
 0          434.0 -0.150239  0.108157 -0.313901 -0.313901 -0.130222 -0.057851   
 1           32.0 -0.177587  0.017701 -0.195652 -0.195652 -0.177778 -0.166667   
 
                 max  
 real_lose            
 0          0.000000  
 1         -0.132231  }

将多只股票的结果混合

code_detail_dict_list = [detail_600010_dict,detail_600031_dict,detail_300677_dict]
res_dict1 = process_kpi003_merge_codes(code_detail_dict_list)
{
   
   'median_hold_days': 13.0,
 'median_order_drawback': -0.10698824984539267,
 'median_margin': -0.00986446020488569,
 'real_win_min_interest':           count      mean       std       min       25%       50%       75%  \
 real_win                                                                      
 0         583.0 -0.053453  0.044081 -0.200425 -0.076391 -0.043757 -0.017635   
 1         173.0 -0.035720  0.023631 -0.148880 -0.044288 -0.036120 -0.025843   
 
                max  
 real_win            
 0        -0.000747  
 1         0.006458  ,
 'real_win_max_draw_back':           count      mean       std       min       25%       50%       75%  \
 real_win                                                                      
 0         583.0 -0.084104  0.05
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值