等级: 免费版
- 注册:
- 2021-6-1
- 曾用名:
|
//*****************************策略环境设置及变量定义****************************
Variable:CCTB=0; //变量-持仓同步开关
variable:CC1=0,CP1=0; //变量-持仓量 入场价
//变量-趋势周期参数
//*********************************趋势策略模块***********************************
M1:MA(C,5); M2:MA(C,30);
//平仓1---固定宽止损-防止黑天鹅意外
JSKDZSD:=ENTERPRICE*0.95;JSKDZSJ:=IF(OPEN<JSKDZSD-MINDIFF,OPEN,JSKDZSD-MINDIFF);
JSKKZSD:=ENTERPRICE*1.05;JSKKZSJ:=IF(OPEN>JSKKZSD+MINDIFF,OPEN,JSKKZSD+MINDIFF);
IF L<JSKDZSD AND ENTERBARS>0 AND HOLDING>0 THEN BEGIN
止多:SELL(HOLDING>0,0,LIMITR,JSKDZSJ);
CC1:=0;CP1:=0;
tsell(1,0,LMT,JSKDZSJ);
END
IF H>JSKKZSD AND ENTERBARS>0 AND HOLDING<0 THEN BEGIN
止空:SELLSHORT(HOLDING<0,0,LIMITR,JSKKZSJ);
CC1:=0;CP1:=0;
tsellshort(1,0,LMT,JSKKZSJ);
END
//条件
KDTJ:= C>M1 AND M1>M2 AND H>L AND BARPOS>30;
PDTJ:= C<M1 AND M1<M2 AND H>L;
KKTJ:= C<M1 AND M1<M2 AND H>L AND BARPOS>30;
PKTJ:= C>M1 AND M1>M2 AND H>L;
//**************************K线走完前3秒内运行执行以下部分*************************
T3:=time0-timetot0(DYNAINFO(207));
ABB:=(T3<=3 AND T3>=0) OR NOT(ISLASTBAR);
IF ABB THEN BEGIN
IF CC1>0 AND PDTJ THEN BEGIN
平多:SELL(CC1>0,CC1,THISCLOSE);
CC1:=0;CP1:=0;
tsell(1,CC1,mkt);
END
IF CC1<0 AND PKTJ THEN BEGIN
平空:SELLSHORT(CC1<0,ABS(CC1),THISCLOSE);
CC1:=0;CP1:=0;
tsellshort(1,CC1,mkt);
END
IF CC1=0 AND KDTJ THEN BEGIN
TN:=MAX(1,INTPART(12000/(O*MULTIPLIER*0.1)+0.3)); //使用资金1%计算仓位手数,最少1手
开多:BUY(CC1=0,TN,THISCLOSE);
CC1:=TN;CP1:=C;
tbuy(1,TN,mkt);
END
IF CC1=0 AND KKTJ THEN BEGIN
TN:=MAX(1,INTPART(12000/(O*MULTIPLIER*0.1)+0.3)); //使用资金1%计算仓位手数,最少1手
开空:BUYSHORT(CC1=0,TN,THISCLOSE);
CC1:=-TN;CP1:=C;
tbuyshort(1,TN,mkt);
END
END
//*********************************持仓同步交易模块*************************************
//有挂单情形下,不进行该品种的持仓同步,避免重复发单
//早晚9点开盘时间,刚好是分钟整点,交易拥挤,+6则能避开自动换月和持仓同步可能冲突
//在第 6 18 30 42 54 秒执行持仓同步,K结束最后3秒执行交易信号
Is_order:=TGLOBALSUBMITEX(0,'','',0)=0; //是否有未成交单,返回0表示无挂单
ABB1:=MOD(timetot0(CURRENTTIME)+6,12)=0; //采用CURRENTTIME函数来精准控制持仓同步功能运行时间
IF Is_order AND CCTB AND ABB1 THEN BEGIN //不需要持仓同步,则在第一行修改变量CCTB=0
CC2:=HOLDING; //新仓
CC3:=THOLDING; //实际持仓
xiadan1:=CC2-CC3; //持仓差
if xiadan1>0.5 then begin //xiadan1数字增加,只能是平空 平空开多 开多
cang:=min(xiadan1,abs(CC3));
if CC3<0 then tsellshort(1,cang,mkt),allowrepeat; //平空
cang:=xiadan1+min(CC3,0);
if cang>0 then tbuy(1,cang,mkt),allowrepeat; //开多
end
if xiadan1<-0.5 then begin //xiadan1数字减少,只能是平多 平多开空 开空
cang:=min(abs(xiadan1),abs(CC3));
if CC3>0 then tsell(1,cang,mkt),allowrepeat; //平多
cang:=abs(xiadan1)-max(CC3,0);
if cang>0 then tbuyshort(1,cang,mkt),allowrepeat; //开空
end
END
资产:ASSET,NOAXIS,COLORMAGENTA,PRECISION0;
持仓:CC1,nodraw,COLORYELLOW,PRECISION0;
持价:trimprice(CP1),NODRAW,COLORRED;
次数:totaltrade,NODRAW;
胜率:percentwin,NODRAW,PRECISION2,COLORRED;
DEBUGFILE('D:\TEST.TXT',stklabel&'开多条件%.0f',KDTJ);
DEBUGFILE('D:\TEST.TXT',stklabel&'开空条件%.0f',KKTJ);
DEBUGFILE('D:\TEST.TXT',stklabel&'平多条件%.0f',PDTJ);
DEBUGFILE('D:\TEST.TXT',stklabel&'平空条件%.0f',PKTJ);
DEBUGFILE('D:\TEST.TXT',stklabel&'M1数值%.3f',M1);
DEBUGFILE('D:\TEST.TXT',stklabel&'M2数值%.3f',M2);
DEBUGFILE('D:\TEST.TXT',stklabel&'M2数值%.3f',M2);
DEBUGFILE('D:\TEST.TXT',stklabel&'持仓%.0f',CC1);
DEBUGFILE('D:\TEST.TXT',stklabel&'持仓函数%.0f',HOLDING);
DEBUGFILE('D:\TEST.TXT',stklabel&'收盘价-1%.3f',REF(C,1));
DEBUGFILE('D:\TEST.TXT',stklabel&'收盘价-2%.3f',REF(C,2));
DEBUGFILE('D:\TEST.TXT',stklabel&'收盘价-3%.3f',REF(C,3));
DEBUGFILE('D:\TEST.TXT',stklabel&'收盘价-4%.3f',REF(C,4));
DEBUGFILE('D:\TEST.TXT',stklabel&'收盘价-5%.3f',REF(C,5));
DEBUGFILE('D:\TEST.TXT',stklabel&'收盘价-6%.3f',REF(C,6));
DEBUGFILE('D:\TEST.TXT',stklabel&'收盘价-7%.3f',REF(C,7));
整体代码框架不要变,其次修改在哪里,有些类似的策略修改过程中还有哪些需要修改的?
|
|