//适用模式:"不走完一根K线以后"
/*
目的:小时线卖后15分钟线买回。每5秒钟读取K线现价(CLOSE),小时线5周期均线下穿10周期均线且跌幅大于1%卖出一半持仓,同上且跌幅大于2%卖出所有持仓。监控若15分钟线5周期均线上穿10周期均线且当前价在10周期线以上1%则市价开仓用1/4资金买入。
*/
//中间变量
MA5_60M:=STKINDI('','MA(5)', 0,5);//当前品种小时线5周期均线
MA10_60M:=STKINDI('','MA(5)', 0,5);//当前品种小时线10周期均线
MA5_15M:=STKINDI('','MA(5)', 0,3);//当前品种15分钟线5周期均线
MA10_15M:=STKINDI('','MA(10)', 0,3);// 当前品种15分钟线10周期均线
//交易条件
//15分钟线5周期均线上穿10周期均线且当前价在10周期线以上1%
开多条件1:=CROSS(MA5_15M, MA10_15M) and CLOSE/ MA10_15M >1.01;
//小时线10周期均线下穿5周期均线且跌幅大于0.01
平多条件1:=CROSS(MA10_60M, MA5_60M) and DYNAINFO(14)<-0.01;
//小时线10周期均线下穿5周期均线且跌幅大于0.02
平多条件2:=CROSS(MA10_60M, MA5_60M) and DYNAINFO(14)<-0.02;
//交易系统
If 开多条件1 then
Begin
BUY(1,ASSET/4,MARKET); //用1/4资金市价开仓买入
PLAYSOUND(1,’C:\ Weisoft
Stock(x64)\OrderOK.WAV’);
EXIT;//开仓后退出监控
end
If 平多条件1 and HOLDING >0
then
Begin
SELL(1,HOLDING/2,MARKET); //卖出一半持仓
PLAYSOUND(1,’C:\ Weisoft
Stock(x64)\OrderOK.WAV’);
end
else if平多条件2 and HOLDING >0
begin
SELL(1,HOLDING,MARKET); //卖出全部持仓
PLAYSOUND(1,’C:\ Weisoft
Stock(x64)\OrderOK.WAV’);
end
当前持仓:HOLDING,COLORGRAY,LINETHICK0;
当前资产:ASSET,NOAXIS,COLORGRAY;
函数DYNAINFO(14)只有当前值。但是我只做当前K线监测,不做历史回测。这个问题我会注意。请继续对其他问题进行深入批评指正。谢谢。 |
1,问题1:BUY(1,ASSET/4,MARKET); //用1/4资金市价开仓买入
不能直接用资金代替手数,可以转化为手数BUY(1,asset/4/c,market);
2,问题2:如果你使用DYNAINFO(14),历史上涨跌幅的值都是错的,那你图表上的虚拟持仓holding都是错的,导致你的平仓条件也是有问题的。图表上用涨跌幅需要你公式计算出,不要直接使用DYNAINFO(14)。
不建议使用,图表是根据历史信号计算得来的
你如果历史信号出现闪烁会影响后续的信号产生
涨跌幅您可以用简单的日线收盘价去做判断,可以直接用stkindi引用日线闪(c-ref(c,1))/ref(c,1)