请教版主,前时我曾以这个语句:
开多仓条件:CLOSE>=开空以来的最低价+X;
平多仓条件:CLOSE<=开多以来的最高价-X;
开空仓条件:CLOSE<=开多以来的最高价-X;
平空仓条件:CLOSE>=开空以来的最低价+X;请教编写方法,要求第一次开仓也是自动,提示往前取前若干K线收盘价定虚拟交易点,已蒙版主帮忙编有语句(具体原码看XXN139的有关求助帖),但几经测试未能成交,一时无法找到问题,故再次求助,现将语句完善如下,请版主帮忙在原来基础上修改编译一下,非常谢谢:
缺省设置: X缺省=350;最小=0.00001;最大=1000;
N缺省=60;最小=1;最大=1000;
E缺省=10;最小=1;最大=1000;
M1缺省=1.5;最小=0.01;最大=100;
M2缺省=0.5;最小=0.01;最大=100;
开多条件:CLOSE>=开空以来的最低价+X并且N分钟分析周期REF(VOL,1)/REF(VOL,2)>=M1或者N分钟分析周期VOL/REF(VOL,1)>=M1;
平多条件:CLOSE<=开多以来的最高价-X并且N分钟分析周期REF(VOL,1)/REF(VOL,2)<=M2或者N分钟分析周期离收盘时间<E并且
VOL/REF(VOL,1)<=M2;
开空条件:=平多条件,即平多语句的重复;
平空条件:=开多条件,即开多语句的重复;
问题正在给您解决,根据您所提交问题的难易不同,完成的时间有可能在1-2个工作日内,请用户耐心等待
input:X(350,0.00001,1000),N(60,1,1000),E(10,1,1000),M1(1.5,0.01,100),M2(0.5,0.01,100);
开多以来的最高价:=HHV(H,TYPEBAR(1,1));
开空以来的最低价:=LLV(L,TYPEBAR(1,3));
开多仓条件:=CLOSE>=开空以来的最低价+X;
平多仓条件:=CLOSE<=开多以来的最高价-X;
开空仓条件:=CLOSE<=开多以来的最高价-X;
平空仓条件:=CLOSE>=开空以来的最低价+X;
开多平空条件:=CLOSE>=开空以来的最低价+X AND REF("VOL#MIN5",1)/REF("VOL#MIN5",2)>=M1 OR "VOL#MIN5"/REF("VOL#MIN5",1)>=M1;//这里使用5分钟为例
平多开空条件:=CLOSE<=开多以来的最高价-X AND REF("VOL#MIN5",1)/REF("VOL#MIN5",2)<=M2 OR TIME-150000<E AND "VOL#MIN5"/REF("VOL#MIN5",1)<=M2;
SELL(平多开空条件,1 ,market),ORDERQUEUE;
BUYSHORT(平多开空条件,1 ,market),ORDERQUEUE;
SELLSHORT(开多平空条件,1 ,market),ORDERQUEUE;
BUY(开多平空条件,1 ,market),ORDERQUEUE;
持仓量:holding,linethick0;
以上代码可以执行,但不知道是否完全符合你的意图,你可以测测。
另外,楼主说的虚拟开仓点,最好能给出确切的量化实例,或者自己研究研究改进改进。
以上回复没有解决第一次自动买入的问题,不符原MT4方案原理,现将方案简化重贴一次,希望高手帮忙编译完整代码。
缺省设置:
N缺省=60;最小=1;最大=1000;
X缺省=350;最小=0.00001;最大=1000;
M1缺省=1.5;最小=0.001;最大=10;
M2缺省=0.5;最小=0.001;最大=10;
程序运行于1秒或10秒K线图上,程序启动时取前100根K线的收盘价为开空仓的点位,循环交易的策略如下:
开多条件:CLOSE>=开空以来的最低价+X并且N分钟分析周期的前一期VOL/前二期VOL>=M1;
平多条件:CLOSE<=开多以来的最高价-X并且N分钟分析周期的前一期VOL/前二期VOL<=M2;
开空条件:CLOSE<=开多以来的最高价-X并且N分钟分析周期的前一期VOL/前二期VOL<=M2;
平空条件:CLOSE>=开空以来的最低价+X并且N分钟分析周期的前一期VOL/前二期VOL>=M1;
根据你说的又改进了下
input:X(350,0.00001,1000),N(60,1,1000),E(10,1,1000),M1(1.5,0.01,100),M2(0.5,0.01,100);
variable:AA=0;
IF DATACOUNT-BARPOS=100 AND C>O AND AA=0 THEN BEGIN
BUY(1,1,MARKET);
AA:=AA+1;
END
ELSE IF DATACOUNT-BARPOS=100 AND C<O AND AA=0 THEN BEGIN
BUYSHORT(1,1,MARKET);
AA:=AA+1;
END
开多以来的最高价:=HHV(H,ENTERBARS);
开空以来的最低价:=LLV(L,EXITBARS);
开多仓条件:=CLOSE>=开空以来的最低价+X;
平多仓条件:=CLOSE<=开多以来的最高价-X;
开空仓条件:=CLOSE<=开多以来的最高价-X;
平空仓条件:=CLOSE>=开空以来的最低价+X;
开多平空条件:=CLOSE>=开空以来的最低价+X AND REF("VOL#MIN5",1)/REF("VOL#MIN5",2)>=M1 OR "VOL#MIN5"/REF("VOL#MIN5",1)>=M1;//这里使用5分钟为例
平多开空条件:=CLOSE<=开多以来的最高价-X AND REF("VOL#MIN5",1)/REF("VOL#MIN5",2)<=M2 OR TIME-150000<E AND "VOL#MIN5"/REF("VOL#MIN5",1)<=M2;
{IF BARSTATUS=1 AND C>O THEN BEGIN
BUY(开多平空条件,1,market)
END
IF BARSTATUS=1 AND C<O THEN BEGIN
BUYSHORT(平多开空条件,1,market) ;
END}
IF DATACOUNT-BARPOS<100 THEN BEGIN
SELL(平多开空条件,HOLDING,market);
BUYSHORT(平多开空条件,1,market);
SELLSHORT(开多平空条件,HOLDING,market);
BUY(开多平空条件,1,market);
持仓量:holding,linethick0;
资产:ASSET,NOAXIS,colorblue;
end
请版主再审查,看首次买入条件是否可行,谢谢!
A1:=TIME>=090000 AND TIME<112000 AND REF("VOL#MIN5",1)/REF("VOL#MIN5",
2)>=M1;
A2:=CLOSE>=LLV(L,TYPEBAR(1,3))+X AND REF("VOL#MIN5",1)/REF("VOL#MIN5",
2)>=M1;
B1:=TIME>=090000 AND TIME<112000 AND REF("VOL#MIN5",1)/REF("VOL#MIN5",
2)<=M2;
B2:=CLOSE<=HHV(H,TYPEBAR(1,1))-X AND REF("VOL#MIN5",1)/REF("VOL#MIN5",
2)<=M2;
COND1:=A1;
COND2:=A2;
COND3:=B1;
COND4:=B2;
BUY(COND1 OR COND2,1,MARKET),ORDERQUEUE;
SELL(COND4,1,MARKET),ORDERQUEUE;
BUYSHORT(COND3 OR COND4,1,MARKET),ORDERQUEUE;
SELLSHORT(COND2,1,MARKET),ORDERQUEUE;
VOL#MIN5 这里调用 切忌不要调用其他格式的,并不是所有的都可以命名为 min4 min6 min19 之类的
要按照#号说明里的支持周期来调用
input:X(350,0.00001,1000),N(60,1,1000),E(10,1,1000),M1(1.5,0.01,100),M2(0.5,0.01,100);
variable:AA=0;
IF DATACOUNT-BARPOS=100 AND C>O AND AA=0 THEN BEGIN
BUY(1,1,MARKET);
AA:=AA+1;
END
ELSE IF DATACOUNT-BARPOS=100 AND C<O AND AA=0 THEN BEGIN
BUYSHORT(1,1,MARKET);
AA:=AA+1;
END
开多以来的最高价:=HHV(H,ENTERBARS);
开空以来的最低价:=LLV(L,EXITBARS);
开多仓条件:=CLOSE>=开空以来的最低价+X;
平多仓条件:=CLOSE<=开多以来的最高价-X;
开空仓条件:=CLOSE<=开多以来的最高价-X;
平空仓条件:=CLOSE>=开空以来的最低价+X;
开多平空条件:=CLOSE>=开空以来的最低价+X AND REF("VOL.volume#MIN5",1)/REF("VOL.volume#MIN5",2)>=M1 OR "VOL.volume#MIN5"/REF("VOL.volume#MIN5",1)>=M1;//这里使用5分钟为例
平多开空条件:=CLOSE<=开多以来的最高价-X AND REF("VOL.volume#MIN5",1)/REF("VOL.volume#MIN5",2)<=M2 OR TIME-150000<E AND "VOL.volume#MIN5"/REF("VOL.volume#MIN5",1)<=M2;
IF DATACOUNT-BARPOS<100 THEN BEGIN
SELL(平多开空条件,HOLDING,market);
BUYSHORT(平多开空条件,1,market);
SELLSHORT(开多平空条件,HOLDING,market);
BUY(开多平空条件,1,market);
持仓量:holding,linethick0;
资产:ASSET,NOAXIS,colorblue;
end
input:X(350,0.00001,1000),N(60,1,1000),E(10,1,1000),M1(1.5,0.01,100),M2(0.5,0.01,100);
variable:AA=0;
IF DATACOUNT-BARPOS=100 AND C>O AND AA=0 THEN BEGIN
BUY(1,1,MARKET);
AA:=AA+1;
END
ELSE IF DATACOUNT-BARPOS=100 AND C<O AND AA=0 THEN BEGIN
BUYSHORT(1,1,MARKET);
AA:=AA+1;
END
开多以来的最高价:=HHV(H,ENTERBARS);
开空以来的最低价:=LLV(L,EXITBARS);
开多仓条件:=CLOSE>=开空以来的最低价+X;
平多仓条件:=CLOSE<=开多以来的最高价-X;
开空仓条件:=CLOSE<=开多以来的最高价-X;
平空仓条件:=CLOSE>=开空以来的最低价+X;
开多平空条件:=CLOSE>=开空以来的最低价+X AND REF("VOL.volume#MIN5",1)/REF("VOL.volume#MIN5",2)>=M1 OR "VOL.volume#MIN5"/REF("VOL.volume#MIN5",1)>=M1;//这里使用5分钟为例
平多开空条件:=CLOSE<=开多以来的最高价-X AND REF("VOL.volume#MIN5",1)/REF("VOL.volume#MIN5",2)<=M2 OR TIME-150000<E AND "VOL.volume#MIN5"/REF("VOL.volume#MIN5",1)<=M2;
IF DATACOUNT-BARPOS<100 THEN BEGIN
IF HOLDING>=0 THEN BEGIN
SELL(平多开空条件,HOLDING,market);
BUYSHORT(平多开空条件,1,market);
END
IF HOLDING<=0 THEN BEGIN
SELLSHORT(开多平空条件,HOLDING,market);
BUY(开多平空条件,1,market);
END
持仓量:holding,linethick0;
资产:ASSET,NOAXIS,colorblue;
end