此主题相关图片如下:1.png

代码如下:
variable:ki=0,dj=0;
Tr1:=max(max(high-low),abs(ref(close,1)-high)),abs(ref(close,1))-low));
atr:=ma(tr1,14);
xsg:=ma(c,20)+o.5*atr;
你使用的是固定时间间隔的模式还是走完K线的模式。若是固定时间间隔的模式,则可能存在信号闪烁,可能这个信号是之后才出现的。
我用的逐K模式,仅刷新最后一根线, 固定时间模拟。 还有别的模式都试过了 都不行 信号是实时出现的,就是不平仓 是不是我的代码有问题啊?
信号有减仓 但是不会执行平仓动作 代码如下:
VARIABLE:kj=0,dj=0;
TR1 :=MAX(MAX((HIGH-LOW),ABS(REF(CLOSE,1)-HIGH)),ABS(REF(CLOSE,1)-LOW));
ATR :=MA(TR1,14);
XSG:=MA(c,20)+0.5*atr;
XXG:=MA(c,20)-0.5*atr;
DSG:=MA(c,60)+0.5*atr;
DXG:=MA(c,60)-0.5*atr;
XSG1:MA(c,20)+0.5*atr;//显示
XXG1:MA(c,20)-0.5*atr;
DSG1:MA(c,60)+0.5*atr;
DXG1:MA(c,60)-0.5*atr;
开多:=ref(C,1)>XSG AND ref(C,1)>DSG;
平多:=ref(C,1) <=XXG OR ref(C,1)<=DXG;
开空:=ref(C,1)<XXG AND ref(C,1)<DXG;
平空:=ref(C,1)>=XSG OR ref(C,1)>=DSG;
交易时间:=TIME>090000 AND TIME<143900;
平仓时间:= TIME>145400;
//图表日内交易模块:
//平空
if holding=-p and l<=kj THEN
SELLSHORT(1,p/2,limitr,kj);
IF 平空 THEN
SELLSHORT(1,HOLDING,LIMITr,OPEN);
// 空头全平
IF 平仓时间 THEN
SELLSHORT(1,HOLDING,LIMITr,OPEN); //空头收盘平仓
/////////////////////////////////////////////////////////
//开多
IF 交易时间 AND 开多 and STATE<>1 THEN BEGIN
BUY(1,P,LIMITr,OPEN);
dj:=AVGENTERPRICE+s*MINDIFF;
END
//////////////////////////////////
if HOLDING=p and h>=dj then
sell(1,p/2,LIMITR,dj);
IF 平多 THEN
SELL(1,HOLDING,LIMITr,OPEN); //多头全平;
IF 平仓时间 THEN
SELL(1,HOLDING,LIMITr,OPEN); //多头收盘平仓
///////////////////////////////////////////////////////
//开空
IF 交易时间 AND 开空 and STATE<>-1 THEN BEGIN
BUYSHORT(1,P,LIMITr,OPEN);
kj:=AVGENTERPRICE-s*MINDIFF;
END
当前持仓:HOLDING,COLORGRAY,LINETHICK0;
当前资产:ASSET,NOAXIS,COLORGRAY;
if HOLDING=p and h>=dj then sell(1,p/2,LIMITR,dj);
这句话是减仓语句?
按照下列调试方法: sell(1,p/2,LIMITR,dj); 改为 平多1:sell(1,p/2,LIMITR,dj); 其他开平仓语句同理,加载到图表上看每一处信号是哪一个语句触发的。
建议你认真看看下面这个帖子,如果你无法掌握基本的调试知识,那么你是很难编写出好一些策略的。
DEBUGFILE----使用日志方式完善您的策略
http://www.weistock.com/bbs/dispbbs.asp?boardid=4&Id=49428