以文本方式查看主题

-  金字塔客服中心 - 专业程序化交易软件提供商  (http://weistock.com/bbs/index.asp)
--  公式模型编写问题提交  (http://weistock.com/bbs/list.asp?boardid=4)
----  实现二三档进场的单子  (http://weistock.com/bbs/dispbbs.asp?boardid=4&id=141608)

--  作者:YKj
--  发布时间:2016/10/21 10:19:23
--  实现二三档进场的单子
实现二三档进场的单子,在本周期用限定价低于收盘价平仓,次周期以后低于最高价平仓



//策略核心:
//进场
//周线KDJ933,J<0,设为基准价,
//第一次进场;买每份的45%;10/11
//第二次进场基准价下跌3%,买每份的35%;9.7/9.7+0.97
//第三次进场基准价下跌6%,买每份的20%;9.4/9.4+15%
//离场
//      第一进场成本价上涨10%,平仓45%;
//      第二进场成本价上涨12%,平仓35%;
//      第三进场成本价上涨15%,平仓20%;

RSV:=(CLOSE-LLV(LOW,N))/(HHV(HIGH,N)-LLV(LOW,N))*100;
K:=SMA(RSV,P1,1);
D:=SMA(K,P2,1);
J:=3*K-2*D;
VARIABLE: 基准价=0,flag1=0,flag2=0,flag3=0,VOL1=0,VOL2=0,VOL3=0;


//初始化底仓价格和调仓
IF CROSS(0,J) AND HOLDING=0 THEN BEGIN
    基准价:=CLOSE;
END
SS:=1000000/基准价;

//交易条件 
//实现二三档进场的单子,在本周期用限定价低于收盘价平仓,次周期以后低于最高价平仓
{
PD1:=基准价*1.1<H;
IF ENTERBARS>1 THEN BEGIN
    PD2:=(基准价*0.97)*1.1<H;
END

IF ENTERBARS=1 THEN BEGIN
    PD2:=(基准价*0.97)*1.1<C;
END

IF ENTERBARS>1 THEN BEGIN
    PD3:=(基准价*0.94)*1.15<H;
END

IF ENTERBARS=1 THEN BEGIN
    PD3:=(基准价*0.94)*1.15<C;
END
}

PD1:=基准价*1.1<H;
PD2:=(基准价*0.97)*1.1<C;
PD3:=(基准价*0.94)*1.15<C;

KD1:=CROSS(0,J);
KD2:=CROSS(基准价*0.97,L);
KD3:=CROSS(基准价*0.94,L);



//第二次进场的平仓;买每份的35%
PCC2:=(基准价*0.97)*1.1-OPEN;
IF PD2 THEN BEGIN
   SELL(flag2=1,VOL2,LIMITR,OPEN+PCC2);
   flag2:=2;
END

//第三次进场的平仓;买每份的20%
PCC3:=(基准价*0.94)*1.15-OPEN;
IF PD3 THEN BEGIN
   SELL(flag3=1,VOL3,LIMITR,OPEN+PCC3);
   flag3:=3;
END

//第一次进场的平仓;买每份的45%
PCC1:=基准价*1.1-OPEN;
IF PD1 THEN BEGIN
   SELL(flag1=1,VOL1,LIMIT,OPEN+PCC1);
   flag1:=0;
   flag2:=0;
   flag3:=0;
   基准价:=0;
END


//第一次进场;买每份的45%
IF KD1 THEN BEGIN
   T:=3;
   BUY(HOLDING=0 AND flag1=0,SS*45/100,THISCLOSE);
   T:=2;
   VOL1:=SS*45/100;
   flag1:=1;
END

//第二次进场;买每份的35%
CZ2:=基准价*0.97-OPEN;
IF KD2 AND flag2=0 AND T=2 THEN BEGIN
   BUY(1,SS*35/100,LIMIT,OPEN+CZ2);
   T:=1;
   VOL2:=ENTERVOL;
   flag2:=1;
END

//第三次进场;买每份的20%
CZ3:=基准价*0.94-OPEN;
IF KD3 AND flag3=0 AND T=1 THEN BEGIN
   BUY(1,SS*20/100,LIMIT,OPEN+CZ3);
   T:=0;
   VOL3:=ENTERVOL;
   flag3:=1;
END




{

//-------------------以触及市价平仓--------------------------------
ZSPRICE:=基准价*(1-ZS/100);
ZSC:=ZSPRICE-OPEN;
IF L<=ZSPRICE AND HOLDING>0 AND ENTERBARS>0 THEN BEGIN
  DRAWTEXT(1,LOW,\'止损\');
  SELL(HOLDING>0,0,LIMITR,OPEN+ZSC);
END

{
ZYPRICE:=ENTERPRICE*(1+ZY/100);
ZYC:=ZYPRICE-OPEN;
IF H>=ZYPRICE AND HOLDING>0 AND ENTERBARS>0 THEN BEGIN
  DRAWTEXT(1,HIGH,\'止盈\');
  SELL(HOLDING>0,0,LIMITR,OPEN+ZYC);
END

--  作者:jinzhe
--  发布时间:2016/10/21 10:30:54
--  
请问有什么需求?
--  作者:YKj
--  发布时间:2016/10/21 10:40:47
--  


此主题相关图片如下:qq图片20161021104014.png
按此在新窗口浏览图片

 


 需求就是要PD2,PD3,在本周期用低于收盘价,次周期的时候低于最高价为交易条件,我一直改不对,而且附图中回测数据,二三档可以开仓的位置没有开仓


--  作者:jinzhe
--  发布时间:2016/10/21 10:43:37
--  

有白色箭头了,说明价格不合理,不能成交的

用函数ignorecheckprice来避免这个问题,用法:BUY(1,SS*20/100,LIMIT,OPEN+CZ3),ignorecheckprice;


--  作者:wuxiaoyu
--  发布时间:2016/10/21 10:50:45
--  
加上ignorecheckprice;后
图片点击可在新窗口打开查看此主题相关图片如下:qq图片20161021105007.png
图片点击可在新窗口打开查看

--  作者:jinzhe
--  发布时间:2016/10/21 10:52:15
--  
请对上图做下说明
--  作者:wuxiaoyu
--  发布时间:2016/10/21 10:54:23
--  
这个开平仓价格,一一对应才行。   这是没加参数之前的
图片点击可在新窗口打开查看此主题相关图片如下:1.png
图片点击可在新窗口打开查看

--  作者:wuxiaoyu
--  发布时间:2016/10/21 10:57:29
--  
没加参数之前,又会出现应该开仓的位置不开仓
--  作者:jinzhe
--  发布时间:2016/10/21 11:14:17
--  

因为策略里面有个计算出来的平仓价格为0,所以才会有白色箭头以及上面的用igno函数后平仓价为0的情况。

 

 

 

 

IF PD1 THEN BEGIN
   平仓3:SELL(flag1=1,VOL1,LIMIT,OPEN+PCC1);
   flag1:=0;
   flag2:=0;
   flag3:=0;
   基准价:=0;
END

 

因为这段把基准价赋值为0,导致了你的下单价格OPEN+PCC1变成了0,所以才会出现了上面测评里面的结果


--  作者:wuxiaoyu
--  发布时间:2016/10/21 11:24:52
--  
该图上第一次开仓之后的K线,并没有遇到第一次平仓条件;所以不存在基准价=0导致不开仓的情况啊