以下的测试模型在后台能正常开仓,但无法平仓,是什么原因?
//平多仓
sell(ENTERBARS>0 && l<hm && holding>0,holding,LIMITR,c-MINDIFF*滑点);//按指令价平仓
sell(TIME>145500&&holding>0,holding,LIMITR,c-MINDIFF*滑点);//收盘前平多仓
tsell(tENTERBARS>0 && l<hm && holding>0,holding,LMT,c-MINDIFF*滑点,0,'21107701');//按指令价平仓
tsell(currenttime>145500&&holding>0,holding,LMT,c-MINDIFF*滑点,0,'21107701');//收盘前平多仓
//平空仓
sellshort(ENTERBARS>0&&h>lm && holding<0,holding,LIMITR,c+MINDIFF*滑点);//按指令价平仓
sellshort(TIME>145500&&holding<0,holding,LIMITR,c+MINDIFF*滑点);//收盘前平空仓
tsellshort(tENTERBARS>0&&h>lm && holding<0,holding,LMT,c+MINDIFF*滑点,0,'21107701');//按指令价平仓
tsellshort(currenttime>145500&&holding<0,holding,LMT,c+MINDIFF*滑点,0,'21107701');//收盘前平空仓
//建立多头条件
long:=H>HH&&TIME<144000&&time>090500&&holding<3;//做多条件
buy(EXITBARS<>0&&long,手数,LIMITR,c+MINDIFF*滑点);//指令价开多仓
long1:=H>HH&¤ttime<144000&¤ttime>090500&&holding<3;//做多条件
tbuy(tEXITBARS<>0&&long1,手数,LMT,c+MINDIFF*滑点,0,'21107701');//指令价开多仓
//建立空头条件
short:=L<LL&&TIME<144000&&time>090500&&holding>-3;//做空条件
BUYSHORT(EXITBARS<>0&&short,手数,LIMITR,c-MINDIFF*滑点);//指令价开空仓
short1:=L<LL&¤ttime<144000&¤ttime>090500&&holding>-3;//做空条件
tBUYSHORT(tEXITBARS<>0&&short1,手数,LMT,c-MINDIFF*滑点,0,'21107701');//指令价开空仓
我想用holding做虚拟仓,如果用 tholding 就无法做单品种多策略组合了
tsell(tENTERBARS>0
这个有问题,去掉T
tEXITBARS<>
等等这些条件,都改成图表的函数,不要加T
模型还是平不了仓,麻烦老师看一下
//平多仓
sell(ENTERBARS>0 && l<hm && holding>0,holding,LIMITR,c-MINDIFF*滑点);//按指令价平仓
//sell(ENTERBARS>0&& o<hm&&holding>0,holding,LIMITR,o-滑点);//按指令价平仓
sell(TIME>145500&&holding>0,holding,LIMITR,c-MINDIFF*滑点);//收盘前平多仓
tsell(ENTERBARS>0 && l<hm && holding>0,holding,LMT,c-MINDIFF*滑点,0,'21107701');//按指令价平仓
tsell(currenttime>145500 && holding>0,holding,LMT,c-MINDIFF*滑点,0,'21107701');//收盘前平多仓
//平空仓
sellshort(ENTERBARS>0&&h>lm && holding<0,holding,LIMITR,c+MINDIFF*滑点);//按指令价平仓
//sellshort(ENTERBARS>0&&o>lm && holding<0,holding,LIMITR,o+滑点);//按指令价平仓
sellshort(TIME>145500&&holding<0,holding,LIMITR,c+MINDIFF*滑点);//收盘前平空仓
tsellshort(ENTERBARS>0&&h>lm && holding<0,holding,LMT,c+MINDIFF*滑点,0,'21107701');//按指令价平仓
tsellshort(currenttime>145500&&holding<0,holding,LMT,c+MINDIFF*滑点,0,'21107701');//收盘前平空仓
//建立多头条件
long:=H>HH&&TIME<144000&&time>090500&&holding<3;//做多条件
buy(EXITBARS<>0&&long,手数,LIMITR,c+MINDIFF*滑点);//指令价开多仓
long1:=H>HH&¤ttime<144000&¤ttime>090500&&holding<3;//做多条件
tbuy(EXITBARS<>0&&long1,手数,LMT,c+MINDIFF*滑点,0,'21107701');//指令价开多仓
//longo:=o>HH&&TIME<144000&&time>090500&&holding<3;//做多条件
//buy(EXITBARS<>0&&longo,手数,LIMITR,o+滑点);//指令价开多仓
//建立空头条件
short:=L<LL&&TIME<144000&&time>090500&&holding>-3;//做空条件
BUYSHORT(EXITBARS<>0&&short,手数,LIMITR,c-MINDIFF*滑点);//指令价开空仓
short1:=L<LL&¤ttime<144000&¤ttime>090500&&holding>-3;//做空条件
tBUYSHORT(EXITBARS<>0&&short1,手数,LMT,c-MINDIFF*滑点,0,'21107701');//指令价开空仓
tsell(ENTERBARS>0 && l<hm && holding>0,holding,LMT,c-MINDIFF*滑点,0,'21107701');//按指令价平仓
使用了第一个平仓后,holding已经是0了,故tsell不会达到平仓条件。
你可以使用
myholding:=holding;
sell(TIME>145500&&myholding>0,myholding,LIMITR,c-MINDIFF*滑点);//收盘前平多仓
tsell(ENTERBARS>0 && l<hm && myholding>0,myholding,LMT,c-MINDIFF*滑点,0,'21107701');//按指令价平仓
这样改完后看看。
myholding和holding一样的啊?为什么要加个中间变量?
holding是函数,返回的是你持仓量
myholding是变量,记录你前面的持仓量,在出现平仓之后holding会马上是0,而myholding不会