我采用小时线进行图表交易,下单按k线结束前20秒下单,使用marketr函数开仓。止损为开仓价格反向波动n1止损,代码如下:
止损条件:=l<=ENTERPRICE-n1;//多头止损标准(以多头为例)
if holding>0 and 止损条件=1 THEN sell(1,0,MARKETr);
如果开仓的那根k线的最低价l,满足l<=ENTERPRICE-n1,是否会在开仓后立即被止损?如何避免这种情况?
之前用market函数开仓,止损代码为:
if holding>0 and 止损条件=1 and enterbars>0 THEN sell(1,0,MARKETr);
这样写不能在开仓后的第一根k线止损,也不避免开仓后立即被止损
不是的。
用代码完成的:
abb:=(time0-timetot0(dynainfo(207))<=20) or not(islastbar);
if abb then begin;//k线结束前提前20秒下单
开多
开空
end;
你是希望止损在下根k上生效?
if holding>0 and 止损条件=1 and enterbars>0 THEN sell(1,0,MARKETr);
这个写法没有问题,你把开空和开多指令中的MARKET==》MARKETR、这样enterbars函数就能满足你的要求。(本周期和次周期的指令对enterbars函数的计算是有影响的,你可以自己在图表中看一下)
abb:=(time0-timetot0(dynainfo(207))<=20) or not(islastbar);
if abb then begin;//k线结束前提前20秒下单
开多
开空
你是希望止损在下根k上生效?
if holding>0 and 止损条件=1 and enterbars>0 THEN sell(1,0,MARKETr);
这个写法没有问题,你把开空和开多指令中的MARKET==》MARKETR、这样enterbars函数就能满足你的要求。(本周期和次周期的指令对enterbars函数的计算是有影响的,你可以自己在图表中看一下)
abb:=(time0-timetot0(dynainfo(207))<=20) or not(islastbar);
if abb then begin;//k线结束前提前20秒下单
开多
开空
我开空和开多指令就是用的MARKETR,但是不能让止损在下根k上生效。
我在图表上试过了,在本次开仓的当根K线时,enterbars显示的数值是上次开仓到现在的bar数,而不是0.
贴出你完成的测试代码。你止损条件中使用的是建议你排查下其他条件。
if holding>0 and 止损条件=1 and enterbars>0 THEN sell(1,0,MARKETr);
enterbars的记录结果如下图
我开空和开多指令就是用的MARKETR,但是不能让止损在下根k上生效。
我在图表上试过了,在本次开仓的当根K线时,enterbars显示的数值是上次开仓到现在的bar数,而不是0.
enterbars的返回值在开仓的K上不是0就是-1.你可以再次确认下。