//该模型为简单示范模型,用户需根据自己交易经验,修改完善后再实际应用!!!
//该模型运行于后台程序化模式
ZH1:'1000';
PZ1:'IF00';
VARIABLE:A=0;
//条件判断
MA5:MA(CLOSE,5);
MA10:MA(CLOSE,10);
CONDBUY:=CROSS(MA5,MA10);
CONDSELL:=CROSS(MA10,MA5);
//开仓和平仓
TBUY(CONDBUY AND TBUYHOLDINGEX( ZH1,PZ1 ,0 )<10,1,LMT,CLOSE,0,ZH1,PZ1 );
TSELL(CONDSELL,TBUYHOLDINGEX( ZH1,PZ1 ,0 ),MKT,0,ZH1,PZ1);
//移动止损模块部分*******************************
//A有三种数值状态:1,0,最新价;
//当A=1时表示当前有持仓,A=0时表示移动止损执行完毕,A=最新价时用于比较价格是否回落
//将A赋值为1,表示当前有持仓
IF TBUYHOLDINGEX( '','' ,0 )>0 AND EXTGBDATA('a' )=0 THEN BEGIN
EXTGBDATASET( 'a',1 );
END
//使A始终表示监控开始后的最高价
IF DYNAINFO( 7)>EXTGBDATA('a' ) and EXTGBDATA('a' )>0 THEN BEGIN
EXTGBDATASET( 'a',DYNAINFO( 7));
END
//发现价格回落止损,并将A赋值为0表示移动止损动作完成
IF EXTGBDATA('a' )-DYNAINFO( 7)>5*MINDIFF and EXTGBDATA('a' )>0 THEN BEGIN
TSELL(1,1,MKT );
EXTGBDATASET( 'a',0);
END
//*******************************
这是系统自带的移动止盈,不是很理解,想修改成最高盈利超过1%,回撤一半就平仓,该怎么修改??
策略有时候会多空仓都有开并同时持有,好像会错乱。。。
看下后台监控日志,是不是监控里面有触发。实际账户没下单?
有先开了多仓,用debugout函数观察到tenterbars函数开始从0开始计数,当计数到3的时候,开空单条件触发,之后tenterbars函数输出又变0了
你自己加的空单?把你改后的代码发下,上面代码就一个多头
账号:='';
多仓均价:=TAVGENTERPRICEEX2(账号 ,'',0 )linethick0;
空仓均价:=TAVGENTERPRICEEX2(账号 ,'',1 )linethick0;
多仓:TBUYHOLDINGEX(账号 , '', 0)linethick0;
空仓:TSELLHOLDINGEX(账号 ,'' ,0 )linethick0;
未成多仓:TBUYHOLDINGEX(账号 , '', 3)linethick0;
未成空仓:TSELLHOLDINGEX(账号 ,'' ,3 )linethick0;
买一价:=DYNAINFO( 28);卖一价:=DYNAINFO( 34);
hh:hhv(h,tenterbars);
多仓最高盈利:=if(多仓>0,(hhv(h,tenterbars)-多仓均价)/多仓均价*100,0),linethick0;//得出%
空仓最高盈利:=if(空仓>0,(空仓均价-llv(l,tenterbars))/空仓均价*100,0),linethick0;//得出%
debugout('持仓以来最高价:%.2f',hh);
debugout('多仓最高盈利:%.2f',多仓最高盈利);
debugout('空仓最高盈利:%.2f',空仓最高盈利);
debugout('持仓时长:%.2f',tenterbars);
ydzs:=2*(hh-tavgenterprice)>=hh-tavgenterprice;//移动止盈条件
if c>ref(c,1) and 多仓=0 then TBUY(1,手数,lmt,卖一价,0,账号,'');//开多
if c<ref(c,1) and 空仓=0 then TBUYSHORT(1,手数,lmt,买一价,0,账号,'');//开空
tSELL(tenterbars>5,0,lmt,买一价,0,账号,'');//平多(限价)
tSELLSHORT(tenterbars>10,0,lmt,卖一价,0,账号,'');//平空(限价)
你这个代码 多空仓同时存在很正常啊! 看开平仓条件