量化投资:第2节 择时策略的优化

0
回复
6508
查看
[复制链接]

24

主题

15

回帖

227

积分

中级会员

积分
227
来源: 2019-10-30 21:15:56 显示全部楼层 |阅读模式
本帖最后由 abu 于 2019-10-30 21:35 编辑

上一节编写了AbuFactorBuyBreak和AbuFactorSellBreak,做为择时买入策略和择时卖出策略,本节将继续使用这两个策略,
通过混入其它卖出策略来提高优化交易效果。
备注:已将AbuFactorBuyBreak和AbuFactorSellBreak做为abupy内置策略示例因子在项目中,所以本节不重复编写因子,直接从abupy中import因子,如下所示
from abupy import AbuFactorBuyBreak, AbuFactorSellBreak

# buy_factors 60日向上突破,42日向上突破两个因子
buy_factors = [{'xd': 60, 'class': AbuFactorBuyBreak},
               {'xd': 42, 'class': AbuFactorBuyBreak}]
# 使用120天向下突破为卖出信号
sell_factor1 = {'xd': 120, 'class': AbuFactorSellBreak}

1 基本止盈止损策略
上一节的策略大多数的交易卖出因子都生效了,但效果很不好,量化交易系统一般都会有止盈策略和止损策略。
下面使用abupy中内置的基本止盈止损策略AbuFactorAtrNStop做回测,即使用AbuFactorAtrNStop和AbuFactorSellBreak两个卖出因子策略并行同时生效, 交易结果如下所示
备注:
AbuFactorAtrNStop是真实波幅atr作为最大止盈和最大止损的常数值:
  • 当stop_loss_n 乘以 当日atr > 买入价格 - 当日收盘价格:止损卖出,如下止损n = 0.5
  • 当stop_win_n 乘以 当日atr < 当日收盘价格 -买入价格:止盈卖出,如下止盈n = 3.0
更多详情请阅读abupy中AbuFactorAtrNStop代码实现

  1. <font style="background-color: white;">from abupy import AbuFactorAtrNStop
  2. from abupy import ABuPickTimeExecute, AbuBenchmark, AbuCapital

  3. # 趋势跟踪策略止盈要大于止损设置值,这里0.5,3.0
  4. sell_factor2 = {'stop_loss_n': 0.5, 'stop_win_n': 3.0,
  5.                 'class': AbuFactorAtrNStop}

  6. # 两个卖出因子策略并行同时生效
  7. sell_factors = [sell_factor1, sell_factor2]
  8. benchmark = AbuBenchmark()
  9. capital = AbuCapital(1000000, benchmark)
  10. orders_pd, action_pd, _ = ABuPickTimeExecute.do_symbols_with_same_factors(['usTSLA'],
  11.                                                                             benchmark,
  12.                                                                             buy_factors,
  13.                                                                             sell_factors,
  14.                                                                             capital, show=True)</font>
复制代码
103003.png

2. 风险控制止损策略
可以看到效果比之前好多了,下面再加入一些其它卖出策略,量化交易系统中一般都会有风险控制策略,比如当股票今天价格开始剧烈下跌,采取果断平仓措施。
可以使用abupy中内置的风险控制止损策略AbuFactorPreAtrNStop
  • 策略中继续使用真实波幅atr作为常数值: 当今日价格下跌幅度 > 当日atr 乘以 pre_atr_n(下跌止损倍数)卖出股票, 本例使用pre_atr_n=1.0
更多详情请阅读abupy中AbuFactorPreAtrNStop代码实现
sell_factors中加入AbuFactorPreAtrNStop卖出因子,三个卖出因子策略并行同时生效:

  1. from abupy import AbuFactorPreAtrNStop

  2. #暴跌止损卖出因子形成dict
  3. sell_factor3 = {'class':AbuFacrorPreAtrNStop,'pre_atr_n':0.1}</p><p># 三个卖出因子同时生效,组成sell_factors = [sell_factor1, sell_factor2, sell_factor3
  4.                                                                             benchmark,
  5.                                                                             buy_factors,
  6.                                                                             sell_factors,
  7.                                                                             capital,
  8.                                                                             show=True}
复制代码





上图交易结果可以看到最终那笔失败的交易也盈利卖出了。
注意:
  • 上面的很多拟合优化操作在实际应用中是不可取的,比如最后的那个使用AbuFactorCloseAtrNStop使交易盈利以及我之后即将讲解的另一些手段使整体交易变好的做法,不应该因为某些特定股票或者特定交易修改参数或者添加因子等方式使结果变好,这样就是过拟合择时交易系统,将会在下一章节来示例如何挑选参数及因子的选择问题,本节内容主要是为了讲解择时系统的示例。
  • 读者可能注意到我在多个卖出因子,还有即将讲到的仓位控制都使用了atr,但请不要误会我不是强调atr有多重要多好,只不过是我想尽量使用一个概念来完成尽可能多的任务,不必反复引入过多的交易概念,因为篇幅有限,且容易引发阅读困难
  • 本节只是示例卖出策略的使用,更多个性化的卖出策略可根据自己的交易买入策略与交易风格自行编写。









103004.png
103005.png
103006.png
103008.png
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 免费注册
关注微信