以文本方式查看主题

-  金字塔客服中心 - 专业程序化交易软件提供商  (http://weistock.com/bbs/index.asp)
--  策略编写求助区  (http://weistock.com/bbs/list.asp?boardid=11)
----  请教编写方法,要求第一次开仓也是自动,提示往前取前若干K线收盘价定虚拟交易点  (http://weistock.com/bbs/dispbbs.asp?boardid=11&id=6026)

--  作者:xxn139
--  发布时间:2011/4/5 18:02:48
--  请教编写方法,要求第一次开仓也是自动,提示往前取前若干K线收盘价定虚拟交易点

请教版主,前时我曾以这个语句: 

开多仓条件: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;

开空条件:=平多条件,即平多语句的重复;

平空条件:=开多条件,即开多语句的重复;


--  作者:王锋
--  发布时间:2011/4/6 10:45:07
--  

问题正在给您解决,根据您所提交问题的难易不同,完成的时间有可能在1-2个工作日内,请用户耐心等待


--  作者:董小球
--  发布时间:2011/4/6 13:08:14
--  


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;

 

 

以上代码可以执行,但不知道是否完全符合你的意图,你可以测测。

另外,楼主说的虚拟开仓点,最好能给出确切的量化实例,或者自己研究研究改进改进。


--  作者:xxn139
--  发布时间:2011/4/6 17:35:09
--  

以上回复没有解决第一次自动买入的问题,不符原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;


--  作者:董小球
--  发布时间:2011/4/7 10:04:54
--  

根据你说的又改进了下

 

 


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

[此贴子已经被作者于2011-4-7 10:15:08编辑过]

--  作者:xxn139
--  发布时间:2011/4/11 11:30:01
--  

请版主再审查,看首次买入条件是否可行,谢谢!

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;


--  作者:董小球
--  发布时间:2011/4/11 11:32:16
--  
好 我先看看~
--  作者:董小球
--  发布时间:2011/4/11 14:50:01
--  

VOL#MIN5 这里调用 切忌不要调用其他格式的,并不是所有的都可以命名为 min4 min6  min19 之类的

要按照#号说明里的支持周期来调用


--  作者:董小球
--  发布时间:2011/4/12 14:52:04
--  

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


--  作者:董小球
--  发布时间:2011/4/14 15:49:32
--  

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