国外知名策略-dual thrust dual thrust 策略
作者: 穿堂风 时间: 2011-7-24 03:45 标题: 国外知名策略-dual thrust分享
oliverzrl的老弟在一个贴子中提到他的股指系统是根据dual thrust系统为雏形,所以特意找了一下这个系统。
dual thrust是八几年一个老外写的,目前在自动化交易里应该还能排到前三吧。
这个系统核心相当简单,我一直都相信越简单越有效,而且作者的思想很有借鉴之处,为方便与大家分享,我重写了一个TB版本。
原形很简单,很多人经验都比我丰富,一定能扩充不少,如加入止损,止赢,加入资金/风险管理,改成日内系统等,从而打造成为自己的一个利器。
写在前面的话:
从看dualthrust的原形到重写TB代码,用时大概半小时,因为我本人是从事研发工作,代码从构思开始就会首先考虑逻辑思维的严密和健壮性,但也很可能有疏忽之处,比如这个系统我就没有加入涨跌停和最小幅度控制(我只想原汁原味重写,其它的大家自己扩充吧),所以大家在提问的时候,不要先入为主的认为我会犯很多低级错误,一定要认真读过代码,并对TB机制有足够的了解,这也是对我的尊重吧,坦白说,前几次发分享系统,看到大家的回复,我有些失落。
另外:很多朋友通过QQ直接跟我沟通,因为本人用于维持生计的工作跟期货没任何关系,而且一直都很忙,写系统时要么是在上班的时候忙里偷闲偷偷摸摸的写上一段,要么就是利用休息时间,像重写这个系统就是在凌晨3点多,所以很多留言和询问我可能没有时间去关注,碰到没有回复的朋友,还请谅解。
如果以后有时间的话,我会再重写一些MT4上比较有价值的策略和大家分享。作者: 穿堂风 时间: 2011-7-24 03:47
dual thrust系统原形 Inputs: K1(.5),K2(.5),Mday(1),Nday(1);
Vars: BuyRange(0), SellRange(0);
Vars: BuyTrig(0),SellTrig(0);
Vars: HH(0),LL(0),HC(0),LC(0);
If CurrentBar > 1 Then Begin
HH = Highest(High,Mday);
HC = Highest(Close,Mday);
LL = Lowest(Low,Mday);
LC = Lowest(Close,Mday);
If (HH - LC) >= (HC - LL) Then Begin
SellRange = HH - LC;
End Else Begin
SellRange = HC - LL;
End;
HH = Highest(High,Nday);
HC = Highest(Close,Nday);
LL = Lowest(Low,Nday);
LC = Lowest(Close,Nday);
If (HH - LC) >= (HC - LL) Then Begin
BuyRange = HH - LC;
End Else Begin
BuyRange = HC - LL;
End;
BuyTrig = K1*BuyRange;
SellTrig = K2*SellRange;
If MarketPosition = 0 Then Begin
Buy at Open of next bar + BuyTrig Stop;
Sell at Open of next bar - SellTrig Stop;
End;
If MarketPosition = -1 Then Begin
Buy at Open of next bar + Buytrig Stop;
End;
If MarketPosition = 1 Then Begin
Sell at Open of next bar - SellTrig Stop;
End;
End;
复制代码
作者: 穿堂风 时间: 2011-7-24 03:49
本人重写的TB源码
转载注明出处 //------------------------------------------------------------------------
// 简称: dual_thrust
// 名称:
// 类别: 公式应用
// 类型: 用户应用
// 输出: 穿堂风
//------------------------------------------------------------------------
Params
Numeric K1(0.5);
Numeric K2(0.5);
Numeric Mday(1);
Numeric Nday(1);
Numeric lots(1);
Numeric offset(0);
Vars
Numeric BuyRange(0);
Numeric SellRange(0);
Numeric BuyTrig(0);
Numeric SellTrig(0);
Numeric HH;
Numeric LL;
Numeric HC;
Numeric LC;
Numeric i_offset;
Numeric BuyPosition;
Numeric SellPosition;
Begin
If(CurrentBar > 44*Max(Mday,Nday))//使用的是5分钟周期,其它的周期自己做相应修改
{
i_offset = offset*MinMove*PriceScale;
HH = Highest(HighD(1),Mday);
HC = Highest(CloseD(1),Mday);
LL = Lowest(LowD(1),Mday);
LC = Lowest(CloseD(1),Mday);
If((HH - LC) >= (HC - LL))
{
SellRange = HH - LC;
}
Else
{
SellRange = HC - LL;
}
HH = Highest(HighD(1),Nday);
HC = Highest(CloseD(1),Nday);
LL = Lowest(LowD(1),Nday);
LC = Lowest(CloseD(1),Nday);
If((HH - LC) >= (HC - LL))
{
BuyRange = HH - LC;
}
Else
{
BuyRange = HC - LL;
}
BuyTrig = K1*BuyRange;
SellTrig = K2*SellRange;
BuyPosition = OpenD(0)+BuyTrig;
SellPosition = OpenD(0)-SellTrig;
PlotNumeric("BuyPosition",BuyPosition);
PlotNumeric("SellPosition",SellPosition);
If(MarketPosition == 0)
{
If(High>=BuyPosition)
{
Buy(lots,Max(Open,BuyPosition)+i_offset);
Return;
}
If(Low<=SellPosition)
{
SellShort(lots,Min(Open,SellPosition)-i_offset);
Return;
}
}
If(MarketPosition == -1)
{
If(High>=BuyPosition)
{
Buy(lots,Max(Open,BuyPosition)+i_offset);
Return;
}
}
If(MarketPosition == 1)
{
If(Low<=SellPosition)
{
SellShort(lots,Min(Open,SellPosition)-i_offset);
Return;
}
}
}
End
//------------------------------------------------------------------------
// 编译版本 GS2010.12.08
// 用户版本 2011/07/24 02:14
// 版权所有 穿堂风
// 更改声明 TradeBlazer Software保留对TradeBlazer平台
// 每一版本的TrabeBlazer公式修改和重写的权利
//------------------------------------------------------------------------
复制代码
作者: 穿堂风 时间: 2011-7-24 03:53
RB 5分钟周期
使用默认参数,未作优化
其它品种大家可以去试试
图片附件: 1.jpg (2011-7-24 03:52, 93.48 KB) / 下载次数 0
http://www.tradeblazer.net/forum/attachment.php?aid=4843&k=a91d7900b657916289a0bfe4d6397dd1&t=1312554775&sid=3aw86f
图片附件: 2.jpg (2011-7-24 03:52, 69.76 KB) / 下载次数 0
http://www.tradeblazer.net/forum/attachment.php?aid=4844&k=1ac8deda66349b11043e8a4b46aef813&t=1312554775&sid=3aw86f
作者: 穿堂风 时间: 2011-7-24 03:57
参数设置说明
图片附件: 3.jpg (2011-7-24 03:57, 40.65 KB) / 下载次数 0
http://www.tradeblazer.net/forum/attachment.php?aid=4845&k=524ee2a9d10bf8237229744b43999480&t=1312554775&sid=3aw86f
作者: 穿堂风 时间: 2011-7-24 04:03
忘说了,重写的是使用V4版本。
编译时下边提示框提示编译警告,说“包含系列函数,可能有逻辑错误”,不用管。
虽然可以把openD放if外边去掉警告,但没必要那么做,因为我们自己知道,这里没有逻辑错误。作者: 穿堂风 时间: 2011-7-24 04:26
股指默认参数也是杠杠的
因本人现在连螺纹都买不起(不是想拉资金,本人现在一点想代客的心情都没有),IF更是没碰过,手续费设置的2%%,不知道对不对。
图片附件: 1.jpg (2011-7-24 04:20, 95.61 KB) / 下载次数 0
http://www.tradeblazer.net/forum/attachment.php?aid=4846&k=aab7ef8915e9a20bdef3a4ad51d5815f&t=1312554775&sid=3aw86f
图片附件: 2.jpg (2011-7-24 04:20, 72.34 KB) / 下载次数 0
http://www.tradeblazer.net/forum/attachment.php?aid=4847&k=d4d49db5fa1db299207e3ad8951f54a9&t=1312554775&sid=3aw86f
作者: Joseph0727 时间: 2011-7-24 06:56
仔细研究下!作者: Joseph0727 时间: 2011-7-24 07:12
If(CurrentBar > 44*Max(Mday,Nday))//使用的是5分钟周期,其它的周期自己做相应修改
这个44是采用相应周期下面的日内bar数吗?比如采用股指5分钟数据,应该就写成
If(CurrentBar > 54*Max(Mday,Nday)) 是这个意思吗?谢谢作者: 穿堂风 时间: 2011-7-24 09:25
If(CurrentBar > 44*Max(Mday,Nday))//使用的是5分钟周期,其它的周期自己做相应修改
这个44是采用相应周期 ...
Joseph0727 发表于 2011-7-24 07:12
恩,是这个意思,我上边写错了,应该是45,不过没关系,这块写的不对,也只是影响测试的前边一两次交易作者: bluefox 时间: 2011-7-24 12:29
无条件顶。。。。。。。。。。。。。作者: 道勤 时间: 2011-7-24 13:42
十分感谢分享!作者: weibo-lwb 时间: 2011-7-25 01:12
如果当天走势一直在上下穿多空临界点怎么办啊。作者: 穿堂风 时间: 2011-7-25 09:18
如果当天走势一直在上下穿多空临界点怎么办啊。
weibo-lwb 发表于 2011-7-25 01:12
趋势系统一般都会有这个问题,在原有模型上再扩充吧,比如上边我也说到了,设定一个最小波动范围,或者限定一段时间内的失败次数……作者: weorc 时间: 2011-7-25 12:34
感谢穿大侠的分享作者: 趋势跟踪 时间: 2011-7-25 13:03
顶一个,谢谢穿堂风老弟无私奉献!作者: beijib 时间: 2011-7-25 15:56
凌晨发帖,保重身体啊作者: illidanyl 时间: 2011-7-26 16:53
今天针对楼主这个做了个日内的模型测试了下 效果感觉一般的说。。。作者: illidanyl 时间: 2011-7-26 16:55
类似于这套系统 //------------------------------------------------------------------------
// 简称: B1
// 名称:
// 类别: 公式应用
// 类型: 用户应用
// 输出:
//------------------------------------------------------------------------
Params
Numeric Lot(1); //交易仓位
Numeric OffsetPoint(2); //滑点
Numeric MoneyLoss(0.2); //亏损平仓值
Numeric PercentOfRange(0.3);
Vars
String name;
Numeric bTime; //Bar的建立时间
Numeric Offset; //滑点
NumericSeries Position; //仓位
NumericSeries estP; //极值
NumericSeries ExitP; //止损线
NumericSeries Trade;
NumericSeries Up;
NumericSeries Down;
Numeric DayOpen;
Numeric preDayRange;
Numeric UpperBand;
Numeric LowerBand;
Bool BarUp;
Bool BarDown;
Bool bTimeCon;
Begin
If(Date != Date[1] And High == Low) Return;//接近涨跌停板时不做交易
bTime = IntPart(Time*10000);
Offset = OffsetPoint* PriceScale*MinMove;
Up = OpenD(0) + (HighD(1) -LowD(1))*PercentOfRange;
Down = OpenD(0) - (HighD(1) -LowD(1))*PercentOfRange;
DayOpen = OpenD(0);
BarUp = Open > Up;
BarDown = Open < Down;
bTimeCon = (bTime > 0910) And (bTime < 1456);
If(Position > 0 And estP < High) estP = High[1];
If(Position < 0 And estP > Low) estP = Low[1];
If(Position > 0)
ExitP = estP * (100 - MoneyLoss) / 100;
Else
ExitP = estP * (100 + MoneyLoss) / 100;
If(Trade == 1 And Low < Up) Trade = 0;
If(Trade == 2 And High > Down) Trade = 0;
PlotNumeric("UpperBand",Up);
PlotNumeric("LowerBand",Down);
PlotNumeric("MidLine",DayOpen);
If(bTimeCon)
{
If(Position == 0)
{
If(BarUp And Trade != 1) //Long Open
{
Buy(lot,Open);
Position = lot;
estP = Up;
ExitP = Up;
}
If(BarDown And Trade != 2)
{
SellShort(lot,Open);
Position = lot * -1;
estP = Down;
ExitP = Down;
}
}
Else
If(Position != 0)
{
If(Position > 0 And Low < DayOpen)
{
Sell(lot,DayOpen);
Position = 0;
Commentary("1");
Trade = 1;
}
If(Position < 0 And High > DayOpen)
{
BuyToCover(lot,DayOpen);
Position = 0;
Commentary("2");
Trade = 2;
}
If(Position > 0 And Low < ExitP)
{
Sell(lot,ExitP);
Position = 0;
Commentary("3");
Trade = 1;
}
If(Position < 0 And High > ExitP)
{
BuyToCover(lot,ExitP);
Position = 0;
Commentary("4");
Trade = 2;
}
}
}
If(bTime > 1429)
{
If(Position != 0)
{
If (Position < 0)
BuyToCover(lot,Open);
Else
Sell(lot,Open);
}
Position = 0;
}
Commentary("Position = "+Text(Position));
Commentary("Trade = "+Text(Trade));
Commentary("ExitP = "+Text(ExitP));
End
//------------------------------------------------------------------------
// 编译版本 GS2010.12.08
// 用户版本 2011/04/18 10:11
// 版权所有 illidanly
// 更改声明 TradeBlazer Software保留对TradeBlazer平台
// 每一版本的TrabeBlazer公式修改和重写的权利
//------------------------------------------------------------------------
复制代码
作者: a415260930 时间: 4天前09:28
先看看,有问题再请教哈作者: shijianxulie 时间: 4天前17:18
有问题啊,每个BAr上都交易作者: 读书山林 时间: 3天前13:19
好贴 消化下作者: a415260930 时间: 3天前16:38
回复 3# 穿堂风
穿老大 对这句话我不大理解,不知道这有什么用?是用来设置滑点的吗?“If(CurrentBar > 44*Max(Mday,Nday))//使用的是5分钟周期,其它的周期自己做相应修改”作者: lzl563 时间: 前天12:35
.
...........作者: 輪回 时间: 前天20:07
無條件頂上——作者: bjzch 时间: 6小时前
这个系统是 Michael Chalek 在80 年代开发的 Dual Thrust。在自动化交易排名中,目前为止,仍然排名第二左右。详细资料,大家可以搜索网络对这方面的介绍。
基本原理很简单,描述出来如下,这样不懂编程的人都可以明白:
1. 在今天的收盘,计算两个值: 最高价-收盘价, 和 收盘价-最低价。然后取这两个值较大的那个,乘以k值0.7。把结果称为 触发值。
2. 在明天的开盘,记录开盘价,然后在价格超过(开盘+触发值)时马上买入,或者价格低于(开盘-触发值)时马上卖空。
3. 没有明确止损。这个系统是反转系统,也就是说,如果在价格超过(开盘+触发值)时手头有一口空单,则买入两口。同理,如果在价格低于(开盘-触发值)时手上有一口多单,则卖出两口。
程序在复制了原程序基础上,增加了止损设置和优化环境,你可以决定是否止损,止损后是否重新开仓,是否以当前价立刻执行策略还是以收盘价执行,你还可以选择你认为对你最重要的几个指标进行打分排序,并通过表现打分,选出最优的参数组合。
通过分析参数,可以发现各个品种的不同特性。并构建较为稳健的策略组合池。
程序还给你非常直观的视觉感受,让你直观的看到你的策略执行情况,是否满足上涨行情做多,下跌行情做空为主体执行格局。如下图。程序还直观的表示了你的策略回报与一般的正态分布之间的风险占有对比,如下图,很明显我们的策略回报一阶占优于正态分布,也就是说,尖峰,薄尾。
程序还给你提供了非常详尽的统计报告,如平均盈利,最长不盈利时间,这些指标均可以作为你选择程序好坏的指标,用于你的打分系统,选择最符合你心理的系统优化参数。
本文来自: 人大经济论坛 详细出处参考:http://www.pinggu.org/bbs/viewth ... &fromuid=651507作者: tbfan 时间: 5小时前
不错啊 顶一下
欢迎光临 系统交易论坛 - 开拓者期货自动交易平台 (http://www.tradeblazer.net/forum/) Powered by Discuz! 7.2
更多阅读
中国农大烟台研究院与荷兰格罗宁根大学合办烟台格罗宁根大学将成 烟台格罗宁根大学
烟台高等教育将再增生力军中国农业大学烟台研究院与荷兰格罗宁根大学合办烟台格罗宁根大学(YMG记者 李仁)昨日,烟台高等教育领域传出好消息,我市将筹建“烟台格罗宁根大学”。目前相关各方已正式签署合作办学备忘录。正在筹建的“烟
国内、国外知名广告公司名录1 国内外知名企业
1奥美中国 ★
几款国外知名的免费杀毒软件附下载链接 国外知名网站
这里是六款业界知名的国外免费杀毒软件,国内的不能比的。(1)Microsoft Security Essentials MSE是一款免费杀毒软件,它可以防御病毒,间谍软件等其他恶意软件。MSE还是一款轻量级反病毒软件,它一般很少打扰用户,除非是监测到病毒威胁,或者
国外知名有机奶粉汇总 美国知名有机化学家
国外知名有机奶粉汇总近年来,多个进口有机奶粉品牌先后进入国内,爱子心切的爸妈对“有机”这一卖点产生了极大的兴趣。据悉,在国外价格并不贵的二三线有机奶粉品牌,到了国内却跻身超高端奶粉行列。专家指出,有机奶粉市场在中国尚属萌芽
国企收购民企 案例 国内第二桩民企收购国外知名汽车的背后
中国民营企业再次收购世界名车让许多人又一次震惊,尽管最后的尘埃尚未完全落定,但就其整个收购过程来说基本要比吉利收购沃尔沃顺利得多,而且在瑞典汽车即将被破产的情况下,萨博被迫出手,庞大集团和浙江的青年汽车将以10亿元人