以文本方式查看主题

-  金字塔客服中心 - 专业程序化交易软件提供商  (http://222.73.7.161/bbs/index.asp)
--  公式模型编写问题提交  (http://222.73.7.161/bbs/list.asp?boardid=4)
----  止损代码  (http://222.73.7.161/bbs/dispbbs.asp?boardid=4&id=180778)

--  作者:意气风发
--  发布时间:2020/6/23 14:47:42
--  止损代码

SS:SETTLE;
A1:=REF(SETTLE,1);
A2:=SETTLE>A1;
A3:=C>SETTLE;
A4:SETTLE<A1;
A5:=C<SETTLE;
M:=IF(EXIST(TIME=2100,DAYBARPOS),1,TIME>=910);
COUNTSIG(BK,DAYBARPOS)=0&&A2&&A3&&(TIME>=2100||TIME<1430)&&M,BK;
COUNTSIG(SK,DAYBARPOS)=0&&A4&&A5&&(TIME>=2100||TIME<1430)&&M,SK;
ZS1:=(SKPRICE-BKPRICE)/SKPRICE*100,NODRAW;
ZS2:=(BKPRICE-SKPRICE)/BKPRICE*100,NODRAW;
AA..ZS1+ZS2<=-1;
A2&&A3&&(TIME>=2100||TIME<1430)&&(ISLASTSK||ISLASTBP||ISLASTSPK)&&COUNT(AA,DAYBARPOS)=0&&M,BPK;
A4&&A5&&(TIME>=2100||TIME<1430)&&(ISLASTBK||ISLASTSP||ISLASTBPK)&&COUNT(AA,DAYBARPOS)=0&&M,SPK;
CLOSEMINUTE1<=3,CLOSEOUT;
AUTOFILTER;
CHECKSIG(CLOSEOUT,\'A\',0,\'C\',0,0);


这是一个完整的日内模型代码,但没有止损,我想加个止损代码,请问该如何编写?我的止损条件是,当累计亏损累计达到-1%时,当天就不再交易。举个例子,假如当天第一笔多单买开价格5000,后价格下跌,反手做空,卖平及卖开价格是4960,此时亏损率为(4960-5000)/5000=-0.8%,反手做空后,价格又涨到了4970,此时又亏损了(4960-4970)/4960=-0.2%,这时,我希望模型能进行全平操作,因为累积亏损达到了-0.8%+(-0.2%)=-1%。另,这是文华上的麦语言代码,在文华上能查看函数说明,当然也可以问我。

--  作者:意气风发
--  发布时间:2020/6/23 15:01:21
--  
模型里面的zs1和zs2达不到止损的效果。
--  作者:gxx978
--  发布时间:2020/6/23 15:06:58
--  
大致理清了这段逻辑,我们会借鉴里面的开平仓条件,加上你的止损需求编写金字塔代码的。需要使用全局变量记录当天的亏损率,来进行止损。代码编写需要时间,我们会尽快回复,关注此贴就可以,不必重复发帖。
--  作者:gxx978
--  发布时间:2020/6/23 16:21:12
--  

代码如下,以供参考:

VARIABLE:PROFIT=0,KD=0,KK=0,ZZ=0;    //PROFIT记录亏损率,KD和KK分别控制日内分别只开1次,ZZ用来控制止损后不再交易。

N1:=TODAYBAR;
DM:=4-INTPART(LOG(C));
SS:ROUNDS(IF(SUM(VOL,N1)=0,C,SUM(C*VOL,N1)/SUM(VOL,N1)),2+DM);    //金字塔中没有函数SETTLE,用此计算出当日均价
A1:=PRVSETTLEMENT;             //获取昨结算
A2:=SS>A1;
A3:=C>SS;
A4:SS<A1;
A5:C<SS;

 

M:TIME>010000 AND TIME<183000;

 

XPRICE:=REF(ENTERPRICE,1);     //获取上次开仓价

IF KD=0 AND ZZ=0 AND A2 AND A3 AND M THEN  BEGIN
 SELLSHORT(HOLDING<0,HOLDING,MARKET);
 PROFIT:=PROFIT+(XPRICE-EXITPRICE)/XPRICE;      //计算空单盈利率(负的则表示亏损)
 BUY(HOLDING=0,1,MARKET);
 KD:=1;
 END

IF KK=0 AND ZZ=0 AND A4 AND A5 AND M THEN  BEGIN
 SELL(HOLDING>0,HOLDING,MARKET);
 PROFIT:=PROFIT+(EXITPRICE-XPRICE)/XPRICE;           //计算多单盈利率(负的则表示亏损)
 BUYSHORT(HOLDING=0,1,MARKET);
 KK:=1;
 END 

 

IF PROFIT<-0.01 THEN BEGIN
   SELL(1,HOLDING,MARKET);
   SELLSHORT(1,HOLDING,MARKET);
   ZZ:=1;                        //止损后,禁止当日再交易
   END
  
IF TIME>=CLOSETIME(4) THEN BEGIN     //盘后,交易开关复位
 KD:=0;
 KK:=0;
 ZZ:=0;
 PROFIT:=0;
 END