本帖最后由 资深技术03 于 2022-2-7 15:37 编辑
整体方法:使用全局变量记录当前执行的状态,像锁链一样,一环扣一环的处理。整体逻辑:
当1分钟开仓成立后,记录全局变量为1或者-1,之后策略执行只会执行1分钟平仓(平仓时置0,)或者出现2分钟开仓条件成立(全局变量变更为2或者-2,再之后只会按照2分钟的平仓条件处理)
注:此范例仅为演示解决方案,搞懂方法后,自行调整,若自身需要更为复杂,可能需要多个全局变量参与,共同表示区分状态。那么EXTGBDATASET定义的变量名称需要调整,如EXTGBDATASET( BUY_STKLABEL,0 );的方式,根据自身需要调整,只要保证全局变量名称唯一即可
[PEL] 复制代码 KD:= BIGUPTT1>=11 AND DIFFHF>=1 AND DIFF1>=2;//开多条件
PD:= MACDHF<0 OR (DIFF3>=5 AND MACD_UP3=0) OR (DIFF2>=3 AND MACD_UP2=0) OR (DIFF1>=2 AND MACD_UP1=0);
KK:= BIGDNTT1>=11 AND DIFFHF<=-1 AND DIFF1<=-2;//开空条件
PK:= MACDHF>0 OR (DIFF3<=-5 AND MACD_DOWN3=0) OR (DIFF2<=-3 AND MACD_DOWN2=0) OR (DIFF1<=-2 AND MACD_DOWN1=0);
//使用ext全局变量,0表示:平仓后的状态。1表示1分钟的多头状态,-1表示1分钟的空头状态
//平空信号,复位平仓状态。初始值为0
if PK=1 and EXTGBDATA(STKLABEL)=-1 then begin
TSELLSHORT(PK,0,MKT);
EXTGBDATASET( STKLABEL,0 );
end
//开多信号,同时,标记记录为1,表示1分钟多种开仓状态已触发
if KD AND TBUYHOLDINGEX('','',2)=0 and EXTGBDATA(STKLABEL)=0 then begin
TBUY(1,5,MKT);
EXTGBDATASET( STKLABEL,1 );
end
//平多信号,复位平仓状态。初始值为0
if pd=1 and EXTGBDATA(STKLABEL)=1 then begin
TSELL(1,0,MKT);
EXTGBDATASET( STKLABEL,0 );
end
//开空信号,表示空头开仓后,全局变量的状态为-1
if KK=1 AND TSELLHOLDINGEX('','',2)=0 and EXTGBDATA(STKLABEL)=0 then begin
TBUYSHORT(1,5,MKT);
EXTGBDATASET( STKLABEL,-1 );
end
[PEL] 复制代码
//下面是两分钟的开平仓代码:
KD:= BIGUPTT2 >=11 AND DIFFHF>=2 AND DIFF1>=3;//开多条件
PD:= MACDHF<0 OR (DIFF3>=8 AND MACD_UP3=0) OR (DIFF2>=5 AND MACD_UP2=0) OR (DIFF1>=3 AND MACD_UP1=0);
KK:= BIGDNTT2>=11 AND DIFFHF<-2 AND DIFF1<-3;//开空条件
PK:= MACDHF>0 OR (DIFF3<=-8 AND MACD_DOWN3=0) OR (DIFF2<=-5 AND MACD_DOWN2=0) OR (DIFF1<=-3 AND MACD_DOWN1=0);
//使用ext全局变量,0表示:平仓后的状态。2表示2分钟的多头状态,-2表示2分钟的空头状态
if PK=1 and EXTGBDATA(STKLABEL)=-2 then begin
TSELLshort(PK,0,MKT); //平空信号
EXTGBDATASET( STKLABEL,0 );//复位平仓状态。初始值为0
end
//开多信号,同时,标记记录为2,表示2分钟多种开仓状态已触发(只有当1分钟开仓后才会改变状态)
if KD=1 AND TBUYHOLDINGEX('','',2)>0 and EXTGBDATA(STKLABEL)=1 then begin
//TBUY(1,5,MKT);
EXTGBDATASET( STKLABEL,2 );
end
//平多信号,同时复位平仓状态。初始值为0
if PD=1 and EXTGBDATA(STKLABEL)=2 then begin
TSELL(,0,MKT);
EXTGBDATASET( STKLABEL,0 );
end
//开空信号,表示空头开仓后,全局变量的状态为-2
if KK AND TsellHOLDINGEX('','',2)>0 and EXTGBDATA(STKLABEL)=-1 then begin
//TBUYshort(1,5,MKT);
EXTGBDATASET( STKLABEL,-2 );
end
|