CTA策略
CTA策略01_dualThrust
https://blog.****.net/u011331731/article/details/89259848
## dualThrust介绍
Dual Thrust是一个趋势跟踪系统,由Michael Chalek在20世纪80年代开发,曾被Future Thruth杂志评为最赚钱的策略之一。Dual Thrust系统具有简单易用、适用度广的特点,其思路简单、参数很少,配合不同的参数、止盈止损和仓位管理,可以为投资者带来长期稳定的收益,被投资者广泛应用于股票、货币、贵金属、债券、能源及股指期货市场等。
在Dual Thrust交易系统中,对于震荡区间的定义非常关键,这也是该交易系统的核心和精髓。Dual Thrust系统使用Range = Max(HH-LC,HC-LL)来描述震荡区间的大小。其中HH是N日High的最高价,LC是N日Close的最低价,HC是N日Close的最高价,LL是N日Low的最低价。
具体说:
1、首先计算:
~~~~(1)N日High的最高价HH, N日Close的最低价LC;
(2)N日Close的最高价HC,N日Low的最低价LL;
(3)Range = Max(HH-LC,HC-LL)
(4)BuyLine = Open + K1*Range
(5)SellLine = Open + K2*Range
2.构造系统
(1)当价格向上突破上轨时,如果当时持有空仓,则先平仓,再开多仓;如果没有仓位,则直接开多仓;
(2)当价格向下突破下轨时,如果当时持有多仓,泽县平川,再开空仓;如果没有仓位,则直接开空仓;
## 回测图
参数 :
```
平台:vnpy
滑点手续费等均采用vnpy默认配置.(0.2滑点,0.3/万手续费)
测试标的:if0000
时间:2010418-20100818
k1=0.5
k2=0.5
```
回测图:
图示说明:
从上到下
第一张:交易次数和盈亏关系
第二张:基准行情
第三张:总资金图(如果每日都交易那么基本和第一张形态一样)
第四张:仓位图
第五张:每日的多空仓线
综合盈亏信息:
~~~~```
第一笔交易: 2010-04-29 14:56:00
最后一笔交易: 2010-08-18 14:56:00
总交易次数: 55.0
总盈亏: 20,105,684.34
最大回撤: -3,332,557.8
平均每笔盈利: 365,557.9
平均每笔滑点: 12,000.0
平均每笔佣金: 5,023.92
胜率 61.82%
盈利交易平均值 1,093,843.81
亏损交易平均值 -813,571.67
盈亏比: 1.34
总交易日: 77
盈利交易日 30
亏损交易日: 20
起始资金: 1000000
结束资金: 21,105,684.34
总收益率: 2,010.57%
年化收益: 2,527.52%
总盈亏: 20,105,684.34
最大回撤: -3,043,602.3
百分比最大回撤: -84.48%
总手续费: 276,315.66
总滑点: 660,000.0
总成交金额: 9,210,522,000.0
总成交笔数: 110.0
日均盈亏: 261,112.78
日均手续费: 3,588.52
日均滑点: 8,571.43
日均成交金额: 119,617,168.83
日均成交笔数: 1.43
日均收益率: 10.53%
收益标准差: 52.68%
Sharpe Ratio: 3.1
CTA策略02_boll
https://blog.****.net/u011331731/article/details/89260961
基本思路,使用boll带的上下界进行趋势交易,越过上届做多,越过下届做空.
使用boll进行趋势跟随操作:
cci>0:开多,限制价格bollUp
cci<0:开空,限制价格bollDown
持有多单:下止损单,止损价,持有以来最高-5.2倍ATR
持有空单:下止损单,止损价,持有以来最低+5.2倍ATR
回测参数:
平台:vnpy
版本:git01
滑点手续费等均采用vnpy默认配置.(0.2滑点,0.3/万手续费)
测试标的:if0000
时间:2010418-20100818
boll宽度:3.4
窗口长度:18
回测曲线:
图示说明: 从上到下 第一张:交易次数和盈亏关系
第二张:基准行情
第三张:总资金图(如果每日都交易那么基本和第一张形态一样)
第四张:仓位图
第五张:每日的多空仓线
详细回测结果:
第一笔交易: 2010-05-13 13:39:00
最后一笔交易: 2010-08-18 15:15:00
总交易次数: 16.0
总盈亏: 89,855.66
最大回撤: -86,441.21
平均每笔盈利: 5,615.98
平均每笔滑点: 120.0
平均每笔佣金: 50.27
胜率 37.5%
盈利交易平均值 34,119.8
亏损交易平均值 -11,486.31
盈亏比: 2.97
计算按日统计结果
首个交易日: 2010-04-28
最后交易日: 2010-08-18
总交易日: 77
盈利交易日 26
亏损交易日: 36
起始资金: 1000000
结束资金: 1,089,942.17
总收益率: 8.99%
年化收益: 28.53%
总盈亏: 89,942.17
最大回撤: -113,731.73
百分比最大回撤: -10.4%
总手续费: 777.83
总滑点: 1,860.0
总成交金额: 25,927,680.0
总成交笔数: 31.0
日均盈亏: 1,168.08
日均手续费: 10.1
日均滑点: 24.16
日均成交金额: 336,723.12
日均成交笔数: 0.4
日均收益率: 0.12%
收益标准差: 1.19%
Sharpe Ratio: 1.55
效果一般,个人认为主要原因是boll的追踪性比较强,一旦价格上涨boll也会立即变大,导致很难突破.即使突破也会由于短期涨幅过大,面临回调的风险.导致盈利受限.相比dualThrust的上下界就是由昨日价格确定,不会由于价格上涨而向上移动.
CTA策略05_AtrRsiStrategy
https://blog.****.net/u011331731/article/details/89342896
基本思路
空仓并且atr>atrma:
if rsiValue>rsiBuy:
开多单
elfi rsiValue<rsiSell:
开空单
有多头持仓:
if self.rsiValue < self.rsiSell:
平多单,开空单
有空头持仓:
if self.rsiValue > self.rsiBuy:
平空单开多单
回测参数
atrLength = 22 # 计算ATR指标的窗口数
atrMaLength = 10 # 计算ATR均线的窗口数
rsiLength = 5 # 计算RSI的窗口数
rsiEntry = 35 # RSI的开仓信号
self.rsiBuy = 50 + self.rsiEntry
参数优化
回测图中看到关键参数:
对于参数:
atrLength = 22 # 计算ATR指标的窗口数
atrMaLength = 10 # 计算ATR均线的窗口数
二者只控制第一笔开仓交易时间/方向(类似择时,后续所有交易都非多即空).所以这2个参数可以暂时不理会。
较为重要的2个参数
rsiLength = 5 # 计算RSI的窗口数
rsiEntry = 35 # RSI的开仓信号
由于rsiLength控制rsi的计算周期,rsiEntry控制了买卖阈值,由于阈值对称的所以只使用一个变量就足够了, 参数优化
setting.addParameter('rsiLength', 5,55,10)
setting.addParameter('rsiEntry', 15,35,5)
结果:
2019-04-16 17:04:39.688957 参数:{'rsiLength': 15, 'rsiEntry': 35},目标:1009033.0454
2019-04-16 17:04:39.688968 参数:{'rsiLength': 25, 'rsiEntry': 30},目标:1009033.0454
2019-04-16 17:04:39.688978 参数:{'rsiLength': 25, 'rsiEntry': 35},目标:1009033.0454
2019-04-16 17:04:39.688987 参数:{'rsiLength': 35, 'rsiEntry': 30},目标:1009033.0454
2019-04-16 17:04:39.688995 参数:{'rsiLength': 45, 'rsiEntry': 25},目标:1009033.0454
2019-04-16 17:04:39.689004 参数:{'rsiLength': 55, 'rsiEntry': 25},目标:1009033.0454
2019-04-16 17:04:39.689013 参数:{'rsiLength': 15, 'rsiEntry': 25},目标:1008501.46148
2019-04-16 17:04:39.689024 参数:{'rsiLength': 45, 'rsiEntry': 30},目标:1007747.00682
2019-04-16 17:04:39.689033 参数:{'rsiLength': 55, 'rsiEntry': 30},目标:1007747.00682
2019-04-16 17:04:39.689042 参数:{'rsiLength': 15, 'rsiEntry': 30},目标:1007084.02996
2019-04-16 17:04:39.689051 参数:{'rsiLength': 25, 'rsiEntry': 20},目标:1006781.83798
2019-04-16 17:04:39.689059 参数:{'rsiLength': 45, 'rsiEntry': 20},目标:1006625.14456
2019-04-16 17:04:39.689067 参数:{'rsiLength': 55, 'rsiEntry': 20},目标:1006625.14456
2019-04-16 17:04:39.689076 参数:{'rsiLength': 35, 'rsiEntry': 25},目标:1006493.14852
2019-04-16 17:04:39.689086 参数:{'rsiLength': 5, 'rsiEntry': 35},目标:1006110.091
2019-04-16 17:04:39.689096 参数:{'rsiLength': 35, 'rsiEntry': 15},目标:1005903.72738
2019-04-16 17:04:39.689105 参数:{'rsiLength': 45, 'rsiEntry': 15},目标:1005598.38058
2019-04-16 17:04:39.689114 参数:{'rsiLength': 25, 'rsiEntry': 25},目标:1005228.646
2019-04-16 17:04:39.689123 参数:{'rsiLength': 35, 'rsiEntry': 20},目标:1004246.28134
2019-04-16 17:04:39.689131 参数:{'rsiLength': 55, 'rsiEntry': 15},目标:1003646.62962
2019-04-16 17:04:39.689140 参数:{'rsiLength': 35, 'rsiEntry': 35},目标:1003168.86948
2019-04-16 17:04:39.689148 参数:{'rsiLength': 45, 'rsiEntry': 35},目标:1003168.86948
2019-04-16 17:04:39.689157 参数:{'rsiLength': 55, 'rsiEntry': 35},目标:1003168.86948
2019-04-16 17:04:39.689166 参数:{'rsiLength': 15, 'rsiEntry': 20},目标:1001145.649
2019-04-16 17:04:39.689174 参数:{'rsiLength': 25, 'rsiEntry': 15},目标:1000352.44112
2019-04-16 17:04:39.689183 参数:{'rsiLength': 15, 'rsiEntry': 15},目标:1000313.52388
2019-04-16 17:04:39.689192 参数:{'rsiLength': 5, 'rsiEntry': 30},目标:999301.5286
2019-04-16 17:04:39.689200 参数:{'rsiLength': 5, 'rsiEntry': 25},目标:994286.31328
2019-04-16 17:04:39.689209 参数:{'rsiLength': 5, 'rsiEntry': 20},目标:990900.77608
2019-04-16 17:04:39.689218 参数:{'rsiLength': 5, 'rsiEntry': 15},目标:989164.8178
最终选择参数: 'rsiLength': 25,'rsiEntry': 30,对应收益1009033.0454
参数稳定性测试
测试各个月份最优结果的下月表现
代码段 小部件
结论:参数组合'rsiLength': 25,'rsiEntry': 30,稳定性尚可02-03月份表现不佳,但是也是正收益
(实际还需要参考历史最大回撤,近20日最大回撤等,由于中间数据没保存下来,就不再重新跑了.)
回测图:
可见这个策略其实是有问题的,仅仅开仓一次,偶然因素很大,这也是回测时为何topn的收益等完全一样的原因.
CTA策略06_BollChannelStrategy
https://blog.****.net/u011331731/article/details/89341535
基本思路
持有空仓:
if self.cciValue > 0:
开多限价单,价格bollUp
elif self.cciValue < 0:
开空限价单,价格bollDown
持有多单:
下平多止损单,区间最高价-ATR*倍率
持有空单:
下平空止损单,区间最低价+ATR*倍率
回测参数
重要参数:
bollWindow = 18 # 布林通道窗口数
bollDev = 3.4 # 布林通道的偏差
slMultiplier = 5.2 # 计算止损距离的乘数
boll的计算窗口宽度和dev倍率的标准差,slMultiplier控制ATR的止损倍率
CTA策略07_MultiTimeframeStrategy
https://blog.****.net/u011331731/article/details/89342896
基本思路
构造k线:
1,5分钟k线
2,15分钟k线
构造基于15分钟k线的移动平均线ma5和ma20
定义:maTrend 为ma5(15分钟k)大于ma20(15分钟k),真为1,假为-1
空仓:
if maTrend为1 并且RSI大于RSI做多阈值:
开多单
elif maTrend为-1 并且RSI小于RSI做空阈值:
开空单
持有多单:
if maTrend为-1并且RSI小于50:
平多单
持有空单:
if maTrend为1并且RSI大于50:
平空单
回测参数
rsiSignal = 20 # RSI信号阈值,多为50+20,空为50-20
rsiWindow = 14 # RSI窗口
fastWindow = 5 # 快速均线窗口,结合15分钟线使用
slowWindow = 20 # 慢速均线窗口,结合15分钟线使用
回测结果
回测区间:20190105-20190405
标的:IF9999
参数优化
分组测试:
setting.addParameter('rsiSignal', 15, 30, 5)
setting.addParameter('rsiWindow', 10, 20, 5)
setting.addParameter('fastWindow', 5, 15, 5)
setting.addParameter('slowWindow', 20)
setting.addParameter('rsiSignal', 20)
setting.addParameter('rsiWindow', 14)
setting.addParameter('fastWindow', 5, 10, 5)
setting.addParameter('slowWindow', 20,40,10)
结果:
annualizedReturn fastWindow slowWindow rsiSignal rsiWindow
0 2.34014462 5 20 20 14
1 2.259018138 5 40 20 14
2 2.121318283 10 30 20 14
3 2.091021151 5 30 20 14
4 1.991306239 10 40 20 14
5 1.935240956 10 20 20 14
参数优选:fastWindow,slowWindow,rsiSignal,rsiWindow分别为5,20,20,14
恰巧就是默认参数
完整回测报告
第一笔交易: 2019-01-17 14:20:00
最后一笔交易: 2019-04-04 11:10:00
总交易次数: 27.0
总盈亏: 137,678.72
最大回撤: -32,268.1
平均每笔盈利: 5,099.21
平均每笔滑点: 120.0
平均每笔佣金: 63.01
胜率 40.74%
盈利交易平均值 20,521.38
亏损交易平均值 -5,503.53
盈亏比: 3.73
计算按日统计结果
------------------------------
首个交易日: 2019-01-15
最后交易日: 2019-04-04
总交易日: 47
盈利交易日 16
亏损交易日: 18
起始资金: 1000000
结束资金: 1,137,678.72
总收益率: 13.77%
年化收益: 67.52%
总盈亏: 137,678.72
最大回撤: -36,433.56
百分比最大回撤: -3.3%
总手续费: 1,701.28
总滑点: 3,240.0
总成交金额: 56,709,180.0
总成交笔数: 54.0
日均盈亏: 2,929.33
日均手续费: 36.2
日均滑点: 68.94
日均成交金额: 1,206,578.3
日均成交笔数: 1.15
日均收益率: 0.28%
收益标准差: 1.15%
Sharpe Ratio: 3.78
线性回归系数 olsNum: 3,330.36
调整线性回归系数(olsNum/最大回撤) olsNum: -0.0914
调整线性回归系数夏普(olsNum/日收益标准差) olsNumShape: 2,890.09
近20日的最大回撤 -36,433.56
近20日总收益 3.64%
近20日收益标准差 1.0%
近20日最大单日跌率 -0.98%
近20日下跌天数 8.0
------------------------------
盈利交易bar 1955
亏损交易bar: 1902
收益标准差: 0.09%
————————————————