以文本方式查看主题

-  金字塔客服中心 - 专业程序化交易软件提供商  (http://weistock.com/bbs/index.asp)
--  金字塔软件问题提交  (http://weistock.com/bbs/list.asp?boardid=2)
----  [求助] 关于止盈止损的编写  (http://weistock.com/bbs/dispbbs.asp?boardid=2&id=10283)

--  作者:庄村
--  发布时间:2012/2/23 9:14:16
--  [求助] 关于止盈止损的编写

各位版主,早上好!

 

        以下是我自己编写的一段代码,由于是新手,有好多地方不是很懂,还烦请多多指教:

        目前遇到的主要问题是:我在公式测评中发现,开多和平多可以正常运行,

        但是每次开空后,没有按照我设计的平空条件和止盈止损条件运行,

        而是直接以开空的价格,马上在本周期就平掉,

        我自己的想法是,可能是我设置的买入均价AVGENTERPRICE,只对开多和开空有效,

        所以才产生错误,但又不知道怎么去修改.......... 

 

        以下是我的代码:

       

INPUT:N1(10,1,100),N2(200,20,200);

 

MA10:=MA(C,N1);
MA200:=MA(C,N2);

 

IF CROSS(MA10,MA200) then
begin
BUY(holding=0,3,thisclose);            //开多
SELLSHORT(holding<0,3,thisclose);      //平空
end

 

IF CROSS(MA200,MA10) then
begin
SELL(holding>0,3,thisclose);            //平多
BUYSHORT(holding=0,3,thisclose);        //开空
end

 

IF (CLOSE-AVGENTERPRICE)>=70 THEN       //止盈
BEGIN
SELL(HOLDING>0,3,MARKET);             
end

 

IF (CLOSE-AVGENTERPRICE)<=70 THEN
BEGIN
SELLSHORT(HOLDING<0,3,MARKET);               
end  

 

IF (AVGENTERPRICE-CLOSE)>=20 THEN         //止损
BEGIN

SELL(HOLDING>0,3,MARKET);              
end  

 

IF (AVGENTERPRICE-CLOSE)<=20 THEN
BEGIN
SELLSHORT(HOLDING<0,3,MARKET);              
end  


--  作者:fly
--  发布时间:2012/2/23 9:21:11
--  
不想在开仓那根K线平仓,加入以下条件:enterbars>1
--  作者:庄村
--  发布时间:2012/2/23 11:39:32
--  

FLY版主,您好,多谢您的指导!

我按照您的指导,把enterbars>1,加进去了,

我的设计时在5分钟均线下运行,但是结果是,10分钟后,

不管什么任何情况,都会自动平仓,还请指教!

 

INPUT:N1(10,1,100),N2(200,20,200);

MA10:=MA(C,N1);
MA200:=MA(C,N2);

 

IF CROSS(MA10,MA200) then
begin
BUY(holding=0,3,thisclose);            //开多
 IF enterbars>1 then
 SELLSHORT(holding<0,3,thisclose);      //平空
end

 

IF CROSS(MA200,MA10) then
begin
SELL(holding>0,3,thisclose);            //平多
BUYSHORT(holding=0,3,thisclose);        //开空
end

 

IF (CLOSE-AVGENTERPRICE)>=70 THEN       //止盈
BEGIN
SELL(HOLDING>0,3,MARKET);             
end

 

IF (CLOSE-AVGENTERPRICE)<=70 THEN
BEGIN
 IF enterbars>1 then
 SELLSHORT(HOLDING<0,3,MARKET);               
end  

 

IF (AVGENTERPRICE-CLOSE)>=20 THEN         //止损
BEGIN
SELL(HOLDING>0,3,MARKET);              
end  

 

IF (AVGENTERPRICE-CLOSE)<=20 THEN
BEGIN
 IF enterbars>1 then
 SELLSHORT(HOLDING<0,3,MARKET);              
end  


--  作者:fly
--  发布时间:2012/2/23 14:33:55
--  

如果弄不清那么多关系,就写的规整和简单点

 

INPUT:N1(10,1,100),N2(200,20,200);

MA10:MA(C,N1);
MA200:MA(C,N2);

 

IF CROSS(MA10,MA200) then
begin
SELLSHORT(holding<0,3,thisclose); //平空
BUY(holding=0,3,thisclose);            //开多   
end

 

IF CROSS(MA200,MA10) then
begin
SELL(holding>0,3,thisclose);            //平多
BUYSHORT(holding=0,3,thisclose);        //开空
end

 

IF CLOSE>=ENTERPRICE+70 AND ENTERBARS>1 AND HOLDING>0 THEN       //多盈
多盈:SELL(1,3,MARKET);         

    

IF CLOSE<=ENTERPRICE-70 AND ENTERBARS>1 AND HOLDING<0 THEN
空盈:SELLSHORT(1,3,MARKET);  

             

IF CLOSE<=ENTERPRICE-20 AND ENTERBARS>1 AND HOLDING>0 THEN         //多损
多损:SELL(HOLDING>0,3,MARKET);   

             

IF CLOSE>=ENTERPRICE+20 AND ENTERBARS>1 AND HOLDING<0  THEN
空损:SELLSHORT(1,3,MARKET);


--  作者:庄村
--  发布时间:2012/2/23 14:54:23
--  
多谢!这次正确了!难道还和格式有关么!我去琢磨琢磨!