DualThrust与R-Breaker一样,曾长期排名 FutureTrust杂志最赚钱的策略。该策略在形式上和开盘区间突破策略类似。不同点主要体现在两方面:DualThrust在Range(代码中的浮动区间)的设置上,引入前N日的四个价位,使得一定时期内的Range相对稳定,可以适用于日间的趋势跟踪;DualThrust对于多头和空头的触发条件,考虑了非对称的幅度,做多和做空参考的Range可以选择不同的周期数,也可以通过参数K1和K2来确定。
当K1时,多头相对容易被触发,当K1>K2时,空头相对容易被触发。因此,投资者在使用该策略时,一方面可以参考历史数据测试的最优参数,另一方面,则可以根据自己对后势的判断,或从其他大周期的技术指标入手,阶段性地动态调整K1和K2的值。
文化财经模型
//算法:
//1.计算昨日的,(最高价-收盘价)和(收盘价-最低价)较大的值乘以某个数字(0.7或0.5,等),把结果称
为触发值。
//2. 今日,在价格超过(开盘+触发值)时买入,或者价格低于(开盘-触发值)时卖出。
//3. 没有明确止损。
//应用五分钟周期
//M为参数,代表几日
K1:=0.5;
K2:=0.5;
N:=BARSLAST(DATE<>REF(DATE,1))+1;//今日开盘到目前为止
OO:=VALUEWHEN(DATE<>REF(DATE,1),O);//今日开盘价
HH1:=REF(HHV(H,45*M),N);//M=45,因为5分钟周期,一日交易有45根K线,代表一天
LL1:=REF(LLV(L,45*M),N);
HC1:=REF(HHV(C,45*M),N);
LC1:=REF(LLV(C,45*M),N);
SELLR:=IFELSE((HH1-LC1)>=(HC1-LL1),HH1-LC1,HC1-LL1);//波动区间
BT:=K1*SELLR;
ST:=K2*SELLR;
BUYP:=OO+BT;
SELLP:=OO-ST;
H>=BUYP&&C>=MAX(O,BUYP),BPK;
L<=SELLP&&C<=MIN(O,SELLP),SPK;
//策略:Dual Thrust
//类型:日内
//中间变量
input:n(1,1,100,1),K1(0.7,0.1,1,0.1),k2(0.7,0.1,1,0.1),nmin(10,1,100,1),ss(1,1,100,1);
CYC:=barslast(date<>ref(date,1))+1;
昨高:=callstock(stklabel,vthigh,6,-1);
昨低:=callstock(stklabel,vtlow,6,-1);
昨收:=callstock(stklabel,vtclose,6,-1);
开盘价:=valuewhen(cyc=1,open);
HH:=hhv(昨高,n);//N日high的最高价
HC:=hhv(昨收,n);//N日close的最高价
LC:=LLV(昨收,n);//N日close的最低价
LL:=LLV(昨低,n);//N日low的最低价
浮动区间:=max(HH-LL,HC-LL);//range
上轨:开盘价+k1*浮动区间;
下轨:开盘价-K2*浮动区间;
t1:=time>opentime(1) and time
t2:=time>=closetime(0)-nmin*100;
手数:=ss;
//交易条件
开多条件:=c>上轨 and holding=0;
开空条件:=c<下轨 and holding=0;
//交易系统
开多:buy(开多条件 and t1 and cyc>1,手数,market);
开空:buyshort(开空条件 and t1 andcyc>1,手数,market);
收盘平多:sell(t2,手数,market);
收盘平空:sellshort(t2,手数,market);
这个策略已有很多个版本,这个版本——引入了前N日的四个价位,以及K1、K2参数。默认参数设置与现有策略一致,为前一日,K1=k2=0.7.
代码(金字塔语言)2(前几日):
input:K1(0.5,0,2,0.1);//多头突破波动比例
input:K2(0.5,0,2,0.1);//多头突破波动比例
input:Mday(1,0,9,1);//M日期最大价差
input:Nday(1,0,9,1);//N日前最大价差
input:LOTS(1,0,9,1);
HighD:=callstock(stklabel,vthigh,6,-1);
LowD:=callstock(stklabel,vtlow,6,-1);
CloseD:=callstock(stklabel,vtclose,6,-1);
CYC:=barslast(date<>ref(date,1))+1;
OpenD:=valuewhen(cyc=1,open);
HH:= HHV(HighD,Mday);
HC:= HHV(CloseD,Mday);
LL:= LLV(LowD,Mday);
LC:= LLV(CloseD,Mday);
SellRange:=Max(HH - LC,HC - LL);
// www.cxh99.com
HH:=HHV(HighD,Nday);
HC:=HHV(CloseD,Nday);
LL:=LLV(LowD,Nday);
LC:=LLV(CloseD,Nday);
BuyRange:=Max(HH - LC,HC - LL);
UpperBand: OpenD + K1*BuyRange;
LowerBand: OpenD - K2*SellRange;
If (HOLDING=0) THEN BEGIN
If (High>=UpperBand) THEN
Buy(HOLDING=0,lots,LIMITR,Max(Open,UpperBand));
If (Low<=LowerBand) THEN
BuyShort(HOLDING=0,lots,LIMITR,Min(Open,LowerBand));
END
If (HOLDING<0) THEN BEGIN
If (High>=UpperBand) THEN BEGIN
SELLSHORT(HOLDING<0,lots,LIMITR,Max(Open,UpperBand));
Buy(HOLDING=0,lots,LIMITR,Max(Open,UpperBand));
END
END
If (HOLDING>0) THEN BEGIN
If (Low<=LowerBand) THEN BEGIN
Sell(holding>0,lots,limitr,Min(Open,LowerBand));
BuyShort(holding=0,lots,limitr,Min(Open,LowerBand));
END
END
持仓:holding,noaxis ,linethick0 ;
盈亏:asset-1000000,noaxis,coloryellow,linethick2;
开拓者TB源码:
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);
//程序化交易 www.cxh99.com
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) ThenBegin
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) ThenBegin
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 + BuyTrigStop;
Sell at Open of next bar - SellTrigStop;
End;
If MarketPosition = -1 Then Begin
Buy at Open of next bar + BuytrigStop;
End;
If MarketPosition = 1 Then Begin
Sell at Open of next bar - SellTrigStop;
End;
End;