CTA策略01_dualThrust

## 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

```

 

可见在2010年这个效果还是非常惊人的,

谁有2018到2019的股指期货的mongo分钟数据,求分享,谢谢啦,很多策略很久前可以,现在可能失效,所以能用近期数据回测最为准确,

CTA(Commodity Trading Advisor)策略是一种基于技术分析和基本面分析的交易策略,主要应用于商品市场,包括期货、外汇、股票等。CTA策略通常包括以下几个方面: 1. 趋势跟踪:利用技术分析方法,识别市场的趋势方向和力度,并根据趋势的强度和持续时间来决定交易方向和持仓时间。 2. 均值回归:利用基本面分析和技术分析方法,识别市场价格偏离其均值的情况,并根据价格回归到均值的概率来决定交易方向和持仓时间。 3. 波动率策略:利用技术分析方法和一些波动率指标,如ATR(平均真实波动率)和Bollinger Bands(布林带),来识别市场的波动率水平,并根据波动率的水平来决定交易方向和持仓时间。 以下是一个简单的CTA策略代码示例: ``` import numpy as np import pandas as pd def trend_following_strategy(data, n): # 计算收盘价的n日移动平均线 data['MA'] = data['Close'].rolling(window=n).mean() # 计算收盘价的n日标准差 data['STD'] = data['Close'].rolling(window=n).std() # 计算上轨线和下轨线 data['Upper'] = data['MA'] + 2 * data['STD'] data['Lower'] = data['MA'] - 2 * data['STD'] # 判断上涨趋势和下跌趋势 data['Trend'] = np.where(data['Close'] > data['MA'], 1, -1) # 判断做多和做空信号 data['Signal'] = np.where(data['Close'] > data['Upper'], -1, np.where(data['Close'] < data['Lower'], 1, data['Trend'])) # 计算持仓仓位 data['Position'] = data['Signal'].shift(1) # 计算收益率 data['Return'] = data['Position'] * data['Close'].pct_change() # 计算累计收益率 data['Cumulative_Return'] = (1 + data['Return']).cumprod() return data ``` 以上代码实现了一个简单的趋势跟踪策略,通过计算收盘价的n日移动平均线和n日标准差,来确定上轨线和下轨线,判断市场的上涨趋势和下跌趋势,以及做多和做空信号。最后计算收益率和累计收益率。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值