止损不准确问题 (文华财经WH8赢智V8.2)

投资者咨询:止损不准确问题 (文华财经WH8赢智V8.2)
来源:文华财经  日期:2018-8-28 15:26

 //多头开仓加仓
B&&BKVOL=0,BK(1);
B1&&BKVOL<4&&ISLASTBK,BK(1);
B2&&BKVOL<4&&ISLASTBK,BK(1);
//多头减仓平仓
SJ,SP(1);
SQP,CLOSEOUT;
CHECKSIG(SP,'A',0,'C',0,0);

//空头开仓加仓
S&&SKVOL=0,SK(1);
S1&&SKVOL<4&&ISLASTSK,SK(1);
S2&&SKVOL<4&&ISLASTSK,SK(1);
//空头减仓平仓
BJ,BP(1);
BQP,CLOSEOUT;
CHECKSIG(BP,'A',0,'C',0,0);

TRADE_AGAIN(10);

 

老师好,这段代码有两个问题:

一:只能减仓一次,之后的减仓和减仓后全部平仓这两个信号都不能执行

二:减仓条件是2ATR,但是那一次减仓的实际点数却不是2ATR

 

请老师帮忙解决

技术人员回复
日期:2018-8-28 15:56
 这里最多给您修改CLOSEOUT条件,剩下的您说不能连续减仓和您没提供的编写有关,请您补充完整后我们看下

SQP,SP(BKVOL);
BQP,BP(SKVOL);

投资者咨询:止损不准确问题 (文华财经WH8赢智V8.2)
来源:文华财经  日期:2018-8-28 15:26
 

//方案一与原始方案一致,只不过采用了固定点止盈的平仓方案,但没到达固定点反向平仓的也要平仓
//第一部分:均线和KDJ的引用
//均线指标
MA1:MA(CLOSE,10);
MA2:MA(CLOSE,30);

//KDJ指标
RSV:=(CLOSE-LLV(LOW,9))/(HHV(HIGH,9)-LLV(LOW,9))*100;
K:=SMA(RSV,3,1);
D:=SMA(K,3,1);
J:=3*K-2*D;

//MACD指标
DIFF:=EMA(CLOSE,12) - EMA(CLOSE,26);//短周期与长周期的收盘价的指数平滑移动平均值做差。
DEA:=EMA(DIFF,9);//DIFF的M个周期指数平滑移动平均
DD:=2*(DIFF-DEA);//DIFF减DEA的2倍画柱状线

//ATR指标
TR:=MAX(MAX((HIGH-LOW),ABS(REF(CLOSE,1)-HIGH)),ABS(REF(CLOSE,1)-LOW));//求最高价减去最低价,一个周期前的收盘价减去最高价的绝对值,一个周期前的收盘价减去最低价的绝对值,这三个值中的最大值
ATR:=MA(TR,10),COLORYELLOW;//求N个周期内的TR的简单移动平均
N:=2*ATR;

 

//第二部分:多头开仓加仓条件
BB:IFELSE(K<D,IFELSE(J<20,J,REF(BB,1)),50);
B:=MA1>=MA2&&REF(BB,1)<20&&CROSS(K,D);
//多头开仓信号
B1:=ISLASTBK&&MA1>=MA2&&REF(BB,1)<20&&CROSS(K,D);
//多头加仓信号1
B2:=ISLASTBK&&MA1>=MA2&&CROSS(DIFF,DEA);
//多头加仓信号2

 

//第三信号:空头开仓加仓条件
SS:IFELSE(K>D,IFELSE(J>80,J,REF(SS,1)),50);
S:=MA1<=MA2&&REF(SS,1)>80&&CROSS(D,K);
//空头开仓信号
S1:=ISLASTSK&&MA1<=MA2&&REF(SS,1)>80&&CROSS(D,K);
//空头加仓信号1
S2:=ISLASTSK&&MA1<=MA2&&CROSS(DEA,DIFF);
//空头加仓信号2

 

//第四部分:多头止损和全平仓条件
//多头减仓信号
SJ:=ISLASTBK&&C<(BKPRICE-2*N);
//多头全平仓信号
SQP:=ISLASTBK&&MA1<=MA2;


//第五部分:空头止损和全平仓条件
//空头减仓信号
BJ:=ISLASTSK&&C>=(SKPRICE+2*N);
//空头全平仓信号
BQP:=ISLASTSK&&MA1>=MA2;

 

//第七部分:主程序
//多头开仓加仓
B&&BKVOL=0,BK(1);
B1&&BKVOL<4&&ISLASTBK,BK(1);
B2&&BKVOL<4&&ISLASTBK,BK(1);
//多头减仓平仓
SJ,SP(1);
SQP,CLOSEOUT;
CHECKSIG(SP,'A',0,'C',0,0);

//空头开仓加仓
S&&SKVOL=0,SK(1);
S1&&SKVOL<4&&ISLASTSK,SK(1);
S2&&SKVOL<4&&ISLASTSK,SK(1);
//空头减仓平仓
BJ,BP(1);
BQP,CLOSEOUT;
CHECKSIG(BP,'A',0,'C',0,0);

TRADE_AGAIN(10);

技术人员回复
日期:2018-8-28 16:15
 这么改下


 
//方案一与原始方案一致,只不过采用了固定点止盈的平仓方案,但没到达固定点反向平仓的也要平仓
//第一部分:均线和KDJ的引用
//均线指标
MA1:MA(CLOSE,10);
MA2:MA(CLOSE,30);
//KDJ指标
RSV:=(CLOSE-LLV(LOW,9))/(HHV(HIGH,9)-LLV(LOW,9))*100;
K:=SMA(RSV,3,1);
D:=SMA(K,3,1);
J:=3*K-2*D;
//MACD指标
DIFF:=EMA(CLOSE,12) - EMA(CLOSE,26);//短周期与长周期的收盘价的指数平滑移动平均值做差。
DEA:=EMA(DIFF,9);//DIFF的M个周期指数平滑移动平均
DD:=2*(DIFF-DEA);//DIFF减DEA的2倍画柱状线
//ATR指标
TR:=MAX(MAX((HIGH-LOW),ABS(REF(CLOSE,1)-HIGH)),ABS(REF(CLOSE,1)-LOW));//求最高价减去最低价,一个周期前的收盘价减去最高价的绝对值,一个周期前的收盘价减去最低价的绝对值,这三个值中的最大值
ATR:=MA(TR,10),COLORYELLOW;//求N个周期内的TR的简单移动平均
N:=2*ATR;
 
//第二部分:多头开仓加仓条件
BB:IFELSE(K<D,IFELSE(J<20,J,REF(BB,1)),50);
B:=MA1>=MA2&&REF(BB,1)<20&&CROSS(K,D);
//多头开仓信号
B1:=ISLASTBK&&MA1>=MA2&&REF(BB,1)<20&&CROSS(K,D);
//多头加仓信号1
B2:=ISLASTBK&&MA1>=MA2&&CROSS(DIFF,DEA);
//多头加仓信号2
 
//第三信号:空头开仓加仓条件
SS:IFELSE(K>D,IFELSE(J>80,J,REF(SS,1)),50);
S:=MA1<=MA2&&REF(SS,1)>80&&CROSS(D,K);
//空头开仓信号
S1:=ISLASTSK&&MA1<=MA2&&REF(SS,1)>80&&CROSS(D,K);
//空头加仓信号1
S2:=ISLASTSK&&MA1<=MA2&&CROSS(DEA,DIFF);
//空头加仓信号2
 
//第四部分:多头止损和全平仓条件
//多头减仓信号
SJ:=C<(BKPRICE-2*N);
//多头全平仓信号
SQP:=MA1<=MA2;

//第五部分:空头止损和全平仓条件
//空头减仓信号
BJ:=C>=(SKPRICE+2*N);
//空头全平仓信号
BQP:=MA1>=MA2;
 
//第七部分:主程序
//多头开仓加仓
B&&BKVOL=0,BK(1);
B1&&BKVOL<4&&ISLASTBK,BK(1);
B2&&BKVOL<4&&ISLASTBK,BK(1);
//多头减仓平仓
SJ,SP(1);
CHECKSIG(SP,'A',0,'C',0,0);
//空头开仓加仓
S&&SKVOL=0,SK(1);
S1&&SKVOL<4&&ISLASTSK,SK(1);
S2&&SKVOL<4&&ISLASTSK,SK(1);
//空头减仓平仓
BJ,BP(1);
CHECKSIG(BP,'A',0,'C',0,0);
TRADE_AGAIN(10);
SQP,SP(BKVOL);
BQP,BP(SKVOL);
投资者咨询:止损不准确问题 (文华财经WH8赢智V8.2)
来源:文华财经  日期:2018-8-28 15:26
 好的,谢谢,试了一下,可以平仓了,但是止损不准确还是不准确,麻烦老师了
技术人员回复
日期:2018-8-28 16:44
不是不准确

这是指令价,盘中ATR不能用收盘判断,是不一样的
投资者咨询:止损不准确问题 (文华财经WH8赢智V8.2)
来源:文华财经  日期:2018-8-28 15:26
 我将其改成当前k线的前一根K线的ATR了,最后发现最后一笔能正确止损,但是最后一笔的前一笔也是按照最后一笔的2ATR止损的,能不能改成按照最后一笔的前一笔的开仓价格的2ATR止损啊
技术人员回复
日期:2018-8-28 17:04
可以使上一根k线的ATR,不能是上一笔TICK

ATR:=MA(TR,10),COLORYELLOW;//求N个周期内的TR的简单移动平均
N:=2*REF(ATR,1);