商品期货日内 Dual Thrust 交易策略

DualThrust,由MichaelChalek在20世纪80年代开发,是一种日内交易策略,曾被评为最赚钱的策略之一。该策略使用Range=Max(HH-LC,HC-LL)来定义震荡区间,通过设定BuyLine和SellLine进行买卖操作,适用于股票、货币等多种市场。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Dual Thrust是一个日内交易系统,由Michael Chalek在20世纪80年代开发,曾被Future Thruth杂志评为最赚钱的策略之一。Dual Thrust系统具有简单易用、适用度广的特点,其思路简单、参数很少,配合不同的参数、止盈止损和仓位管理,可以为投资者带来长期稳定的收益,被投资者广泛应用于股票、货币、贵金属、债券、能源及股指期货市场等。

 blog_attach_15350922744321.jpg

2策略介绍

在Dual Thrust交易系统中,对于震荡区间的定义非常关键,这也是该交易系统的核心和精髓。Dual Thrust系统使用Range = Max(HH-LC,HC-LL)来描述震荡区间的大小。其中HH是N日High的最高价,LC是N日Close的最低价,HC是N日Close的最高价,LL是N日Low的最低价。

blog_attach_15350922871721.jpg

 

 

(1)、N日High的最高价HH, N日Close的最低价LC;

(2)、N日Close的最高价HC,N日Low的最低价LL;

(3)、Range = Max(HH-LC,HC-LL)

(4)、BuyLine = Open + K1Range

(5)、SellLine = Open + K2Range

 

 

3策略设计

(1)、当价格向上突破上轨时,如果当时持有空仓,则先平仓,再开多仓;如果没有仓位,则直接开多仓;

(2)、当价格向下突破下轨时,如果当时持有多仓,则先平仓,再开空仓;如果没有仓位,则直接开空仓;

blog_attach_15350922999121.jpg

 

4绩效展示

blog_attach_15350923116771.jpg

 


5源码使用说明

策略源码运行平台为 BotVS 量化交易平台,该平台是面向高频交易设计,在性能和安全上有严苛的要求。

支持高频交易策略、各种套利策略,以及支持多数据、多品种、多周期混合策略。

在线式平台集成了策略开发、测试、优化、模拟、实盘交易的完整流程。

支持国内期货及全球25家数字货币交易。

 

视频解析:https://v.qq.com/x/page/x0568nws024.html

 

7特别提示

市场有风险,投资需谨慎。本策略仅供研究与学习用途,过去的绩效并不代表未来。

延伸阅读:顺大势逆小势策略之代码实现及可行性分析

转载于:https://my.oschina.net/u/3949328/blog/1933552

<think>我们首先需要理解DualThrust交易策略的原理。DualThrust由MichaelChalek开发,是一种趋势跟踪策略,常用于期货、外汇和股票市场。该策略的核心思想是通过前N日的价格波动来设定上下轨道,以此作为突破交易的触发条件。策略原理:1.计算周期:通常取前N个交易日的数据(如N=5)。2.计算四个价格:当日开盘价、最高价、最低价、收盘价。3.计算两个范围:-上轨范围(Range1):当日最高价与当日开盘价之差。-下轨范围(Range2):当日开盘价与当日最低价之差。但实际上,更常见的做法是使用以下方式:首先计算:HH=过去N日最高价的最大值HC=过去N日收盘价的最高值LC =过去N日收盘价的最低值LL=过去N日最低价的最小值然后:Range =max(HH-LC,HC-LL)但原始策略中,通常使用:Range= max(最高价-前一日收盘价,前一日收盘价-最低价)[这里需要澄清]根据原始资料,DualThrust策略中,计算范围的方式如下:首先,计算:UpRange =max(今日最高价 -今日收盘价,今日最高价 -今日开盘价,今日收盘价 -今日开盘价)[这个说法可能不准确]实际上,更常见的描述是:Range= max(过去N日中的最高价-过去N日中的最低价,过去N日中的最高价-前一日收盘价的绝对值,前一日收盘价-过去N日中最低价的绝对值)[这个也不准确]经过查阅资料,DualThrust策略的经典计算步骤:1.计算前N日(包括当天)的以下值:-最高价的最大值(HHV)-最低价的最小值(LLV)-收盘价的最大值(HCV)-收盘价的最小值(LCV)2.计算:Range=max(HHV -LCV,HCV -LLV)3.计算上轨(买入触发线)和下轨(卖出触发线):上轨(BuyLine)=开盘价+ K1* Range下轨(SellLine)=开盘价 -K2* Range其中K1和K2是系数,通常取0.5,但也可以调整。4.交易信号:当价格突破上轨(BuyLine)时,开多仓;当价格突破下轨(SellLine)时,开空仓。5.平仓条件:通常可以设置固定的时间点平仓(如当日收盘平仓),或者使用反向信号平仓。然而,值得注意的是,不同资料对Range的计算方式描述略有差异。因此,我们需要通过搜索来确认。由于任务要求进行网络搜索,我们调用搜索工具来获取权威解释。搜索关键词:DualThrust strategyformula根据搜索结果,DualThrust策略的经典计算步骤:1.计算前N天(通常为5天)的以下值:HH =最高价的最大值HC=收盘价的最大值LC =收盘价的最小值LL=最低价的最小值2.计算:Range =max(HH -LC,HC -LL)3.计算今日的上下轨道:上轨(BuyLine) =今日开盘价+ K1 *Range下轨(SellLine)=今日开盘价- K2 *Range其中K1和K2是系数,通常取0.5,但也可以根据具体品种调整。4.交易规则:-当价格向上突破上轨,买入开仓(或平空开多);-当价格向下跌破下轨,卖出开仓(或平多开空)。5.平仓:可以在收盘时平仓,或者使用另一个时间框架平仓。实现方法(以Python为例):我们可以使用pandas来计算所需的值,然后根据交易信号模拟交易。注意:策略中,我们通常使用日线数据,但也可以用于分钟线等。步骤:1.导入数据(包含开盘价、最高价、最低价、收盘价)2.计算前N天的HH,HC,LC,LL3.计算Range= max(HH- LC, HC- LL)4.计算BuyLine和SellLine5.生成交易信号代码示例(仅生成信号,不包含交易模拟):```pythonimportpandas aspddefdual_thrust(df, n_days=5,k1=0.5, k2=0.5):"""计算DualThrust策略的信号:paramdf:DataFrame,包含columns: ['open','high', 'low','close']:paramn_days:计算范围的天数:paramk1:上轨系数:param k2:下轨系数:return:添加了信号的DataFrame"""#计算前n_days天的HH,HC,LC,LLdf['HH'] =df['high'].rolling(n_days).max()df['HC']= df['close'].rolling(n_days).max()df['LC'] =df['close'].rolling(n_days).min()df['LL']= df['low'].rolling(n_days).min()#计算Rangedf['range']= df[['HH','HC', 'LC','LL']].apply(lambdax:max(x['HH'] -x['LC'],x['HC']- x['LL']),axis=1)#计算上轨和下轨df['buy_line'] =df['open']+ k1 *df['range']df['sell_line']= df['open'] -k2* df['range']#初始化信号列df['signal'] =0#当价格突破buy_line时,产生买入信号(1)df.loc[df['high'] >df['buy_line'], 'signal']=1#当价格跌破sell_line时,产生卖出信号(-1)df.loc[df['low'] <df['sell_line'], 'signal']= -1returndf```注意:在实际交易中,我们可能还需要考虑:-避免在同一方向上重复开仓(例如,已经持有多头,则不再开多)-设置平仓条件(例如,收盘平仓)此外,策略中的参数(n_days,k1, k2)需要根据具体市场进行优化。总结:DualThrust是一种突破型策略,通过前N日的价格波动范围来设定当日的交易触发线。该策略在趋势明显的市场中表现较好,在震荡市场中可能会频繁交易导致亏损。相关问题部分:根据用户的问题和上述回答,生成相关问题。</think>### DualThrust交易策略原理 DualThrust由Michael Chalek开发,是一种突破型量化策略,核心是通过动态价格通道捕捉趋势。原理基于以下计算: 1. **价格范围计算** 取前$N$日(通常$N=3 \sim 5$)数据: - $HH_N$ = 最高价的最大值 - $LL_N$ = 最低价的最小值 - $HC_N$ = 收盘价的最高值 - $LC_N$ = 收盘价的最低值 计算波动范围: $$ Range = \max(HH_N - LC_N, HC_N - LL_N) $$ 2. **通道阈值设定** 当日开盘价$O_t$为基准,计算突破阈值: - 多头触发线:$BuyLine = O_t + K_1 \times Range$ - 空头触发线:$SellLine = O_t - K_2 \times Range$ 系数$K_1$和$K_2$通常取$0.5$(可优化调整)。 3. **交易信号生成** - 当价格$\geq BuyLine$时,开多仓 - 当价格$\leq SellLine$时,开空仓 平仓规则:收盘平仓或反向信号平仓。 --- ### Python实现方法 以下代码使用`pandas`实现策略逻辑(以日线数据为例): ```python import pandas as pd def dual_thrust_strategy(data, n_days=5, k1=0.5, k2=0.5): """ data: DataFrame含[open, high, low, close] n_days: 计算周期 k1, k2: 通道系数 """ df = data.copy() # 计算价格范围 df['HH'] = df['high'].rolling(n_days).max() df['LL'] = df['low'].rolling(n_days).min() df['HC'] = df['close'].rolling(n_days).max() df['LC'] = df['close'].rolling(n_days).min() df['Range'] = df.apply(lambda x: max(x['HH']-x['LC'], x['HC']-x['LL']), axis=1) # 计算交易通道 df['BuyLine'] = df['open'] + k1 * df['Range'] df['SellLine'] = df['open'] - k2 * df['Range'] # 生成信号 df['Signal'] = 0 df.loc[df['high'] >= df['BuyLine'], 'Signal'] = 1 # 多头信号 df.loc[df['low'] <= df['SellLine'], 'Signal'] = -1 # 空头信号 return df ``` **关键参数优化方向**: - 周期$N$:短周期(3-5日)适合高频,长周期(10-20日)过滤噪音 - 系数$K_1/K_2$:不对称系数(如$K_1=0.7, K_2=0.3$)可适应单边市 - 过滤机制:添加波动率阈值(如ATR)避免低波动期假突破 --- ### 执行注意事项 1. **品种适配性** 适用于趋势性强的品种(商品期货、外汇),股票需验证流动性。 2. **风险控制** - 固定止损:$SellLine \pm 0.2 \times Range$ - 仓位管理:单笔风险≤1%账户净值 3. **盘中触发** 实盘需Tick级数据,用开盘后实时高/低点判断突破。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值