老师,
你好,我有一个思路:我每次开仓一手,当上次平仓亏损时,下次开仓增加上次平仓的手数,在新开仓中计算上次平仓手数的盈利大于或等于上次平仓亏损的金额时,平仓上次亏损的手数,保留新开仓的1手到最后,程序如下:
//附交易
if NUMPROFIT(1)<0 then Fbb:=1;
if NUMPROFIT(1)<0 then SSJ:EXITVOL,LINETHICK0;
ELSE SSJ:=0,LINETHICK0;
if NUMPROFIT(1)<0 then 上亏:ABS( NUMPROFIT(1) ),LINETHICK0;
ELSE 上亏:=0,LINETHICK0;
if Fbb=1 AND ( holding>0 and NUMPROFIT(1)<0 ) AND ref(holding,1)<0 then
开多J:buy(holding>0 ,SSJ, NEXTOPEN );
IF holding>0 and NUMPROFIT(1)<0 AND ref(holding,1)<0 THEN Fbb:=-1,LINETHICK0;
if NUMPROFIT(1)<0 then 开多J盈利:( OPENprofit/holding)*SSJ ,LINETHICK0;
if Fbb<0 AND 开多J盈利 >= ABS( 上亏 ) and ENTERBARS>0 then
平多J: sell(HOLDING>0, SSJ, NEXTOPEN );
///////////////////
if ( Fbb=1 AND holding<0 and NUMPROFIT(1)<0 ) AND ref(holding,1)>0 then
开空J:buyshort(holding<0 ,SSJ, limitr, OPEN );
IF holding<0 and NUMPROFIT(1)<0 AND ref(holding,1)>0 THEN Fbb:=-1,LINETHICK0;
if NUMPROFIT(1)<0 then 开空J盈利:( OPENprofit/ABS( holding ))*SSJ ,LINETHICK0;
if 开空J盈利 >= ABS( 上亏 ) and ENTERBARS>0 then
平空J: sell(HOLDING<0, SSJ, NEXTOPEN );
但上面程序没有到我目的,弄了两天两夜都没有结果,能否帮忙检查看看那里出问题了?谢谢.
比如"MACD突破零轴价格预测"是软件自带的程序,如下:
//该模型为简单示范模型,用户需根据自己交易经验,修改完善后再实际应用!!!
//适用模式:“走完一根K线以后”
//若用户模式选为“固定时间间隔”,请将"交易条件"中的CLOSE改为OPEN,避免信号闪烁。
//
//中间变量
DIFF :=EMA(CLOSE,S) - EMA(CLOSE,P);
DEA :=EMA(DIFF,M);
MACD :=2*(DIFF-DEA);
手数:=ss;
//交易条件
开多平空条件:=CROSS(MACD,0);//开多平空条件
开空平多条件:=CROSS(0,MACD);//开空平多条件
//交易系统
平空:SELLSHORT(开多平空条件,手数,MARKET);
平多:SELL(开空平多条件,手数,MARKET);
开多:BUY(开多平空条件,手数,MARKET);
开空:BUYSHORT(开空平多条件,手数,MARKET);
当前持仓:HOLDING,COLORGRAY,LINETHICK0;
当前资产:ASSET,NOAXIS,COLORGRAY;
//注意交易系统先开后平的原则
--------------这段程序单独运行正常,当我加入我程序后就不正常了,程序如下:
//该模型为简单示范模型,用户需根据自己交易经验,修改完善后再实际应用!!!
//适用模式:“走完一根K线以后”
//若用户模式选为“固定时间间隔”,请将"交易条件"中的CLOSE改为OPEN,避免信号闪烁。
//
//中间变量
DIFF :=EMA(CLOSE,S) - EMA(CLOSE,P);
DEA :=EMA(DIFF,M);
MACD :=2*(DIFF-DEA);
手数:=ss;
//交易条件
开多平空条件:=CROSS(MACD,0);//开多平空条件
开空平多条件:=CROSS(0,MACD);//开空平多条件
//交易系统
平空:SELLSHORT(开多平空条件,手数,MARKET);
平多:SELL(开空平多条件,手数,MARKET);
开多:BUY(开多平空条件,手数,MARKET);
开空:BUYSHORT(开空平多条件,手数,MARKET);
//附交易
if NUMPROFIT(1)<0 then Fbb:=1;
if NUMPROFIT(1)<0 then SSJ:EXITVOL,LINETHICK0;
ELSE SSJ:=0,LINETHICK0;
if NUMPROFIT(1)<0 then 上亏:ABS( NUMPROFIT(1) ),LINETHICK0;
ELSE 上亏:=0,LINETHICK0;
if Fbb=1 AND ( holding>0 and NUMPROFIT(1)<0 ) AND ref(holding,1)<0 then
开多J:buy(holding>0 ,SSJ, NEXTOPEN );
IF holding>0 and NUMPROFIT(1)<0 AND ref(holding,1)<0 THEN Fbb:=-1,LINETHICK0;
if NUMPROFIT(1)<0 then 开多J盈利:( OPENprofit/holding)*SSJ ,LINETHICK0;
if Fbb<0 AND 开多J盈利 >= ABS( 上亏 ) and ENTERBARS>0 then
平多J: sell(HOLDING>0, SSJ, NEXTOPEN );
///////////////////
if ( Fbb=1 AND holding<0 and NUMPROFIT(1)<0 ) AND ref(holding,1)>0 then
开空J:buyshort(holding<0 ,SSJ, limitr, OPEN );
IF holding<0 and NUMPROFIT(1)<0 AND ref(holding,1)>0 THEN Fbb:=-1,LINETHICK0;
if NUMPROFIT(1)<0 then 开空J盈利:( OPENprofit/ABS( holding ))*SSJ ,LINETHICK0;
if 开空J盈利 >= ABS( 上亏 ) and ENTERBARS>0 then
平空J: sell(HOLDING<0, SSJ, NEXTOPEN );
当前持仓:HOLDING,COLORGRAY,LINETHICK0;
当前资产:ASSET,NOAXIS,COLORGRAY;
//注意交易系统先开后平的原则
if NUMPROFIT(1 ) <0 and 开仓条件 then buy(1,exitvol+1,marketr);
亏损加仓的话,这条语句就可以了