以文本方式查看主题

-  金字塔客服中心 - 专业程序化交易软件提供商  (http://weistock.com/bbs/index.asp)
--  公式模型编写问题提交  (http://weistock.com/bbs/list.asp?boardid=4)
----  请问,这样的平仓条件如何编写?  (http://weistock.com/bbs/dispbbs.asp?boardid=4&id=86620)

--  作者:青风
--  发布时间:2015/10/26 16:13:22
--  请问,这样的平仓条件如何编写?

以做多为例。

 

平多条件1:至少要在开多仓一根K线以后才执行平仓操作(貌似图表程序化都是在走完一根K线以后,但我的程序出现了在同一根K线上同时开多仓和平多仓的情况,所以,我加入了这一个条件,但即使我加入了这个条件,在同一根K线上同时开平仓的情况还是存在,我已经头大了。)。
平多条件2:当前K线的最低价小于等于开仓价6个点//出现此情况即止损。
平多条件3:当前K线的最高价大于等于开仓价3个点//出现此情况即止盈。
我在程序里是这样写的:PD:=ENTERBARS > =1 AND (ENTERPRICE-l>=6 or h-ENTERPRICE>=3);   //平多条件

请老师帮助解决这一问题,谢谢。


--  作者:jinzhe
--  发布时间:2015/10/26 16:15:27
--  
把你全部的代码都贴一下,我本地看看信号
--  作者:青风
--  发布时间:2015/10/26 16:25:10
--  

//声明变量


MAB:=EMA(MA(CLOSE,6),6/4);//为避免太频繁,略做平滑处理。

KCT:=ENTERBARS;



//交易信号


MABTOUP:=MAB>REF(MAB,1) AND REF(MAB,1)<=REF(MAB,2);

MABTODOWN:=MAB<REF(MAB,1) AND REF(MAB,1)>=REF(MAB,2);


KD:= MABTOUP;          //开多条件

PD:=KCT >=1 AND (ENTERPRICE-l>=6 or h-ENTERPRICE>=3);   //平多条件

{固定止盈止损,或者符合KK时平掉}

KK:=MAG<REF(MAG,1) AND MABTODOWN;          //开空条件

PK:=KCT >=1 AND (h-ENTERPRICE>=6 or ENTERPRICE-l>=3);          //平空条件

{固定止盈止损处理,或者符合KD时平掉。}


平空:SELLSHORT(PK OR KD,0,MARKET);             //平空信号

开多:BUY(KD AND HOLDING=0,1,MARKET);          //开多信号

平多:SELL(PD OR KK,0,MARKET);                       //平多信号

开空:BUYSHORT(KK AND HOLDING=0,1,MARKET);     //开空信号


持仓:holding,linethick0;

资产:asset linethick0;

可用现金:cash(0),linethick0;

<!--EndFragment-->
--  作者:青风
--  发布时间:2015/10/26 16:27:10
--  

以上是用在一分钟图上的日内交易策略。

我同时在止盈止损里设置了止损6点,止盈3点。

所以,我在程序里加入了h-ENTERPRICE>=6 or ENTERPRICE-l>=3这样的条件。

为的是防止实际平仓情况已经发生,而图表程序却还没有平仓信号。


--  作者:jinzhe
--  发布时间:2015/10/26 16:34:16
--  
mag未定义
--  作者:青风
--  发布时间:2015/10/26 16:49:04
--  

//声明变量


MAB:=EMA(MA(CLOSE,6),6/4);//为避免太频繁,略做平滑处理。

KCT:=ENTERBARS;



//交易信号


MABTOUP:=MAB>REF(MAB,1) AND REF(MAB,1)<=REF(MAB,2);

MABTODOWN:=MAB<REF(MAB,1) AND REF(MAB,1)>=REF(MAB,2);


KD:= MABTOUP;          //开多条件

PD:=KCT >=1 AND (ENTERPRICE-l>=6 or h-ENTERPRICE>=3);   //平多条件

{固定止盈止损,或者符合KK时平掉}

KK:=MABTODOWN;          //开空条件

PK:=KCT >=1 AND (h-ENTERPRICE>=6 or ENTERPRICE-l>=3);          //平空条件

{固定止盈止损处理,或者符合KD时平掉。}


平空:SELLSHORT(PK OR KD,0,MARKET);             //平空信号

开多:BUY(KD AND HOLDING=0,1,MARKET);          //开多信号

平多:SELL(PD OR KK,0,MARKET);                       //平多信号

开空:BUYSHORT(KK AND HOLDING=0,1,MARKET);     //开空信号


持仓:holding,linethick0;

资产:asset linethick0;

可用现金:cash(0),linethick0;

<!--EndFragment-->
--  作者:青风
--  发布时间:2015/10/26 16:49:27
--  

原程序一大堆,这是简略版,但问题依然存在。


--  作者:jinzhe
--  发布时间:2015/10/26 16:54:03
--  
书写顺序的问题,enterbars在前,buy在后面,也就是enterbars获取的是前一次开仓的值,而不是后面buy之后的值
--  作者:jinzhe
--  发布时间:2015/10/26 16:55:39
--  

MAB:=EMA(MA(CLOSE,6),6/4);//为避免太频繁,略做平滑处理。

KCT:=ENTERBARS;

 


//交易信号

MABTOUP:=MAB>REF(MAB,1) AND REF(MAB,1)<=REF(MAB,2);

MABTODOWN:=MAB<REF(MAB,1) AND REF(MAB,1)>=REF(MAB,2);

 

KD:= MABTOUP;          //开多条件

PD:= (ENTERPRICE-l>=6 or h-ENTERPRICE>=3);   //平多条件

{固定止盈止损,或者符合KK时平掉}

KK:=MABTODOWN;          //开空条件

PK:=(h-ENTERPRICE>=6 or ENTERPRICE-l>=3);          //平空条件

{固定止盈止损处理,或者符合KD时平掉。}

 

开多:BUY(KD AND HOLDING=0 ,1,MARKET);          //开多信号

平多:SELL((PD OR KK) and enterbars>0,0,MARKET);                       //平多信号

开空:BUYSHORT(KK AND HOLDING=0,1,MARKET);     //开空信号

平空:SELLSHORT((PK OR KD) and enterbars>0,0,MARKET);             //平空信号

持仓:holding,linethick0;

资产:asset linethick0;

可用现金:cash(0),linethick0;

 

 

写在平仓语句里面就好了


--  作者:青风
--  发布时间:2015/10/26 17:03:56
--  

试了,还是不行。