加仓次数限制在2次,并且比上次开仓价格高2%如何写?
加仓次数这个之前这个帖子回过你了的:http://www.weistock.com/bbs/dispbbs.asp?BoardID=4&ID=168920&skin=0
比上次开仓价格高2%这个意思是加仓条件吗?还是加仓价格。
[此贴子已经被作者于2019/4/9 10:59:23编辑过]
buy(加仓条件 and c>ENTERPRICE*1.02 and holding>0,1,market);
限制加仓次数的,建议参考下之前回复你的帖子吧。当时给了解决方案的。
我是这么写的,VARIABLE:NUM1=0;
VARIABLE:NUM2=0;
IF CLOSE>1.02*ENTERPRICE AND HOLDING>0 AND NUM1<2 THEN
BEGIN
BUY(1,1,LIMIT,CLOSE+3*MINDIFF),IGNORECHECKPRICE;
NUM1:=NUM1+1;
END
IF CLOSE<0.98*ENTERPRICE AND HOLDING<0 AND NUM2<2 THEN
BEGIN
SELL(1,1,LIMIT,CLOSE-3*MINDIFF),IGNORECHECKPRICE;
NUM2:=NUM2+1;
END
然后在每个平仓条件后面加上
NUM1:=0;
NUM2:=0;,
这样写的话多头能自动加仓,空头不能自动加仓,这是哪里出问题?
INPUT:N1(12,5,250,1),N2(151,5,250,1),Z1(2,1,10,1),Z2(2,1,10,1),Z3(4,1,20,1),Z4(4,1,10,1);
MA_D:=MA(CLOSE,N1);
MA_K:=MA(CLOSE,N2);
MA20:=MA(CLOSE,28);
RSV:=(CLOSE-LLV(LOW,24))/(HHV(HIGH,24)-LLV(LOW,24))*100;
K_D:=SMA(RSV,13,1);
D_D:=SMA(K_D,4,1);
K_K:=SMA(RSV,7,1);
D_K:=SMA(K_K,3,1);
VARIABLE:NUM1=0;VARIABLE:NUM2=0;
MAXPROFIT_D:=(HHV(HIGH,ENTERBARS+2)-AVGENTERPRICE)/AVGENTERPRICE;
CURRENTPROFIT_D:=(CLOSE-AVGENTERPRICE)/AVGENTERPRICE;
CURRENTLOSS_D:=(AVGENTERPRICE-CLOSE)/AVGENTERPRICE;
MAXPROFIT_K:=(AVGENTERPRICE-LLV(LOW,ENTERBARS+2))/AVGENTERPRICE;
CURRENTPROFIT_K:=(AVGENTERPRICE-CLOSE)/AVGENTERPRICE;
CURRENTLOSS_K:=(CLOSE-AVGENTERPRICE)/AVGENTERPRICE;
CD1:=CURRENTLOSS_D>=0.01*Z1 AND HOLDING>0;
CD2:=MAXPROFIT_D>=0.01*Z2 AND CLOSE<=AVGENTERPRICE AND HOLDING>0;
CD3:=MAXPROFIT_D>=0.01*Z3 AND (HHV(HIGH,ENTERBARS+2)-CLOSE)/HHV(HIGH,ENTERBARS+2)>=0.01*Z4 AND HOLDING>0 ;
CD4:=CURRENTLOSS_K>=0.01*Z1 AND HOLDING<0;
CD5:=MAXPROFIT_K>=0.01*Z2 AND CLOSE>=AVGENTERPRICE AND HOLDING<0;
CD6:=MAXPROFIT_K>0.01*Z3 AND (CLOSE-LLV(LOW,ENTERBARS+2))/LLV(LOW,ENTERBARS+2)>=0.01*Z4 AND HOLDING<0;
//止盈止损
IF CD1=1 OR CD2=1 OR CD3=1 THEN
BEGIN
SELL(HOLDING>0,0,LIMIT,CLOSE-3*MINDIFF),IGNORECHECKPRICE;
DRAWTEXT( 1,LOW ,"平多" );
NUM1:=0;
END
IF CD4=1 OR CD5=1 OR CD6=1 THEN
BEGIN
SELLSHORT(HOLDING<0,0,LIMIT,CLOSE+3*MINDIFF),IGNORECHECKPRICE;
DRAWTEXT( 1,LOW ,"平空" );
NUM2:=0;
END
//开仓条件
IF CLOSE>MA_D AND CROSS(K_D,D_D) THEN
BEGIN
BUY( HOLDING=0,1,LIMIT,CLOSE+3*MINDIFF),IGNORECHECKPRICE;
DRAWTEXT( 1,LOW ,"开多" );
END
IF CLOSE<MA_K AND CROSS(D_K,K_K) THEN
BEGIN
BUYSHORT(HOLDING=0,1,LIMIT,CLOSE-3*MINDIFF),IGNORECHECKPRICE;
DRAWTEXT( 1,HIGH ,"开空" );
END
//加仓
IF CLOSE>1.02*ENTERPRICE AND HOLDING>0 AND NUM1<2 THEN
BEGIN
BUY(1,1,LIMIT,CLOSE+3*MINDIFF),IGNORECHECKPRICE;
NUM1:=NUM1+1;
END
IF CLOSE<0.98*ENTERPRICE AND HOLDING<0 AND NUM2<2 THEN
BEGIN
SELL(1,1,LIMIT,CLOSE-3*MINDIFF),IGNORECHECKPRICE;
NUM2:=NUM2+1;
END
你加仓这里只有多头加仓么。没有空头加仓:
IF CLOSE<0.98*ENTERPRICE AND HOLDING<0 AND NUM2<2 THEN
BEGIN
SELL(1,1,LIMIT,CLOSE-3*MINDIFF),IGNORECHECKPRICE;
NUM2:=NUM2+1;
END
这是最后一段代码,是不是写错了,这是一个平多的操作。