以文本方式查看主题

-  金字塔客服中心 - 专业程序化交易软件提供商  (http://weistock.com/bbs/index.asp)
--  公式模型编写问题提交  (http://weistock.com/bbs/list.asp?boardid=4)
----  文华的公式改编成金字塔的公式  (http://weistock.com/bbs/dispbbs.asp?boardid=4&id=148982)

--  作者:wxx212
--  发布时间:2017/3/12 22:12:51
--  文华的公式改编成金字塔的公式
请高手帮忙改编成金字塔公式,图表交易。谢谢!

PB1:=PUBU(CLOSE,0);
PB2:=PUBU(CLOSE,1);
PB3:=PUBU(CLOSE,2);
PB4:=PUBU(CLOSE,3);
PB5:=PUBU(CLOSE,4);
PB6:=PUBU(CLOSE,5);
RSV:=(CLOSE-LLV(LOW,9))/(HHV(HIGH,9)-LLV(LOW,9))*100;//收盘价与N周期最低值做差,N周期最高值与N周期最低值做差,两差之间做比值。
K:=SMA(RSV,3,1);
D:=SMA(K,3,1);
J:=3*K-2*D;
//
DIFF:=EMA(CLOSE,12) - EMA(CLOSE,26);//短周期与长周期的收盘价的指数平滑移动平均值做差。
DEA:=EMA(DIFF,9);//DIFF的M个周期指数平滑移动平均
MACD:=2*(DIFF-DEA);


BK_VOL:=IF(INTPART (MONEYREAL*P1/(C*UNIT*MARGIN+FEE))<=250,INTPART(MONEYREAL*P1/(C*UNIT*MARGIN+FEE)),200);
BKCOND:=DIFF>3 && EVERY((MACD>0 && MACD>MIN(REF(MACD,1),REF(MACD,2))),5) && C>O && C>REF(C,1) ;
BKCOND=1,BK(BK_VOL);
// 买开条件 DIFF>3, 红柱子发散,收真阳


BKHALF:=INTPART (0.5*REF(BKVOL2,1));
SUB_BKCOND:= ISLASTBK =1 && DIFF<-5 ;
SUB_BKCOND=1,SP(BKHALF);
//DIFF<-5,减一半仓

//
SP_NUM:=COUNTSIG(SP,BARSLAST(BKCOND));
SP1_PLACE:=REFSIG_PLACE(SP,1);
SP2_PLACE:=REFSIG_PLACE(SP,2);
PROFITSP1:=REF(OFFSETPROFIT,SP1_PLACE)-REF(OFFSETPROFIT,SP1_PLACE+1);
PROFITSP2:=REF(OFFSETPROFIT,SP2_PLACE)-REF(OFFSETPROFIT,SP2_PLACE+1);
BU_BKCOND1:=ISLASTSP=1 && DIFF>3 && EVERY((MACD>0 && MACD>MIN(REF(MACD,1),REF(MACD,2))),5)
&& C>O && C>REF(C,1) && BKVOL2>0;
BU_BKCOND2:=IF(SP_NUM<3,1,NOT(PROFITSP1<0 && PROFITSP2<0));
BU_BKCOND:=(BU_BKCOND1=1 && BU_BKCOND2=1)||(BU_BKCOND1=1 && BU_BKCOND2=0 && SP1_PLACE>42);
BU_BKCOND=1,BK(REFSIG_VOL(SP,1));

//上个信号为卖平,又满足做多条件后,做多补仓,连续2次平仓亏损后,隔断时间补仓


CLO_BKCOND:=BKVOL2>0 && (C<(1-0.013)*BKPRICEAV1 );
CLO_BKCOND=1,CLOSEOUT;
//小于买入均价的0.013,清仓

//DIFF<-P2, 绿柱子发散,收真阴
SK_VOL:=IF(INTPART(MONEYREAL*P1/(C*UNIT*MARGIN+FEE))<=250,INTPART(MONEYREAL*P1/(C*UNIT*MARGIN+FEE)),200);
SKCOND:=DIFF<-3 && EVERY((MACD<0 && MACD<MAX(REF(MACD,1),REF(MACD,2))),5) && C<O && C<REF(C,1)  ;
SKCOND=1,SK(SK_VOL);
//
//开仓条件
SKHALF:=INTPART (0.5*REF(SKVOL2,1));
SUB_SKCOND:=ISLASTSK =1 && DIFF>5 ;
SUB_SKCOND=1,BP(SKHALF);
//平仓条件


BP_NUM:=COUNTSIG(BP,BARSLAST(SKCOND));
BP1_PLACE:=REFSIG_PLACE(BP,1);
BP2_PLACE:=REFSIG_PLACE(BP,2);
PROFITBP1:=REF(OFFSETPROFIT,BP1_PLACE)-REF(OFFSETPROFIT,BP1_PLACE+1);
PROFITBP2:=REF(OFFSETPROFIT,BP2_PLACE)-REF(OFFSETPROFIT,BP2_PLACE+1);
BU_SKCOND1:=ISLASTBP=1 && DIFF<-3 && EVERY((MACD<0 && MACD<MAX(REF(MACD,1),REF(MACD,2))),5)
 && C<O && C<REF(C,1) && SKVOL2>0;
BU_SKCOND2:=IF(BP_NUM<3,1,NOT(PROFITBP1<0 && PROFITBP2<0));
BU_SKCOND:=(BU_SKCOND1=1 && BU_SKCOND2=1)||(BU_SKCOND1=1 && BU_SKCOND2=0 && BP1_PLACE>42);
BU_SKCOND=1,SK(REFSIG_VOL(BP,1));
//上个信号为买平,又满足做空条件后,补仓

CLO_SKCOND:= SKVOL>0 && (C>(1+0.013)*SKPRICEAV1);
CLO_SKCOND=1,CLOSEOUT;

//清仓条件

SETEXPIREDATE(\'20160806\');
SETALLSIGPRICETYPE(SIGIMPROVED_ORDER);
TRADE_AGAIN(1);
TRADE_OTHER(\'AUTO\');
SETMOVEOPIPRICE(ACTIVE_ORDER);

--  作者:jinzhe
--  发布时间:2017/3/13 9:16:17
--  

SP_NUM:=COUNTSIG(SP,BARSLAST(BKCOND));
SP1_PLACE:=REFSIG_PLACE(SP,1);
SP2_PLACE:=REFSIG_PLACE(SP,2);
PROFITSP1:=REF(OFFSETPROFIT,SP1_PLACE)-REF(OFFSETPROFIT,SP1_PLACE+1);
PROFITSP2:=REF(OFFSETPROFIT,SP2_PLACE)-REF(OFFSETPROFIT,SP2_PLACE+1);
BU_BKCOND1:=ISLASTSP=1 && DIFF>3 && EVERY((MACD>0 && MACD>MIN(REF(MACD,1),REF(MACD,2))),5)
&& C>O && C>REF(C,1) && BKVOL2>0;
BU_BKCOND2:=IF(SP_NUM<3,1,NOT(PROFITSP1<0 && PROFITSP2<0));
BU_BKCOND:=(BU_BKCOND1=1 && BU_BKCOND2=1)||(BU_BKCOND1=1 && BU_BKCOND2=0 && SP1_PLACE>42);
BU_BKCOND=1,BK(REFSIG_VOL(SP,1));

 

请解释下这几句话的含义


--  作者:wxx212
--  发布时间:2017/3/13 13:27:09
--  
SP_NUM:=COUNTSIG(SP,BARSLAST(BKCOND));                                               //统计BARSLAST(BKCOND) 周期里的卖平仓(SP)的数量
SP1_PLACE:=REFSIG_PLACE(SP,1);                                                         //从当根K线(最后的K线)算起 倒数第1个卖平仓(SP)所在的位置
SP2_PLACE:=REFSIG_PLACE(SP,2);                                                   //从当根K线(最后的K线)算起 倒数第2个卖平仓(SP)所在的位置
PROFITSP1:=REF(OFFSETPROFIT,SP1_PLACE)-REF(OFFSETPROFIT,SP1_PLACE+1);             //REF(返回当前账户的平仓盈亏,SP1_PLACE)-REF(返回当前账户的平仓盈亏,SP1_PLACE+1)
PROFITSP2:=REF(OFFSETPROFIT,SP2_PLACE)-REF(OFFSETPROFIT,SP2_PLACE+1);            //REF(返回当前账户的平仓盈亏,SP2_PLACE)-REF(返回当前账户的平仓盈亏,SP2_PLACE+1)
BU_BKCOND1:=ISLASTSP=1 && DIFF>3 && EVERY((MACD>0 && MACD>MIN(REF(MACD,1),REF(MACD,2))),5)
&& C>O && C>REF(C,1) && BKVOL2>0;                                   //判断上一个指令是卖平 AND DIFF>3 AND 判断5根K线全部满足 (MACD>0 AND MACD>MIN(REF(MACD,1),REF(MACD,2))))这个条件 AND C>O AND C>REF(C,1) AND  多头有持仓
BU_BKCOND2:=IF(SP_NUM<3,1,NOT(PROFITSP1<0 && PROFITSP2<0));                //如果满足条件SP_NUM<3,就取1 否则取 NOT(PROFITSP1<0 AND PROFITSP2<0)『相当于金字塔里的NOT』
BU_BKCOND:=(BU_BKCOND1=1 && BU_BKCOND2=1)||(BU_BKCOND1=1 && BU_BKCOND2=0 && SP1_PLACE>42);//(BU_BKCOND1=1 AND BU_BKCOND2=1)||(BU_BKCOND1=1 AND BU_BKCOND2=0 AND SP1_PLACE>42)
BU_BKCOND=1,BK(REFSIG_VOL(SP,1)); 当前一根K线上卖平仓时 反手做多1手
--  作者:jinzhe
--  发布时间:2017/3/13 13:31:25
--  
这种平仓数量是获取不了的