求大神/版主帮我写一段后台代码:
当没有仓位的时候,市价买入多单,然后在1000限价挂单卖出平仓,假设2分钟后没有成交,撤单,然后在900限价挂单卖出平仓,然后2分钟没成交,撤单,挂800限价卖出平仓。(备注:使用1分钟K线)
我现在实现的时候,撤单可以撤成功,但是新开的限价单,也会立即被撤单。
你是不是撤单的方向指定有问题。通常你撤平仓单,不会把开仓的撤掉,除非你指定的方向是全部方向单子。
[此贴子已经被作者于2020/1/15 14:49:54编辑过]
我描述错了,重新写个条件:
当没有仓位的时候,市价买入多单,然后在1000限价挂单卖出平仓,假设某根K的开盘价小于800的时候,还没有成交,撤单,然后在900限价挂单卖出平仓。
这种情况下,就会出现新的挂单被撤。
我追踪记录,会出现,新的900的限价单挂出来后,因为撤单条件在K线走完前,仍然还是满足的,然后新的挂单被撤销了。但是900限价挂单,只能执行一次,并不会再次执行。
也就说,TCANCAL可以多次执行,挂单卖出平仓只能执行一次。最后的结果是新挂单也被撤销了。(刚刚那个超时撤单,因为新挂单后超时条件不会一直满足了,所以倒是没问题)
能否提供下你这部分的代码。在原先代码上进行校正会比较方便点。也能让我们更容易明确你的思路里面的细节。
备注:我这个只是特地弄个例子简单化描述
在我这个例子里,我知道可以通用全局变量来控制,比如,在900限价单挂单后设置一个全局变量为1,撤单条件增加全局变量检测,如果为1则不再进入撤单代码。
但是这样,在接下来的运行里,撤单条件不能再重复使用了
以下是引用FireScript在2020/1/15 14:49:44的发言:
你是不是撤单的方向指定有问题。通常你撤平仓单,不会把开仓的撤掉,除非你指定的方向是全部方向单子。
[此贴子已经被作者于2020/1/15 14:49:54编辑过]
我撤平仓单,新开的也是平仓单,变一下价格
那行。目前具体代码可能需要盘中我这边一遍测试一遍处理。有需要进一步了解的我会跟帖咨询你的。
当没有仓位的时候,市价买入多单,然后在1000限价挂单卖出平仓,假设某根K的开盘价小于800的时候,还没有成交,撤单,然后在900限价挂单卖出平仓
然后:假设某根K的开盘价小于800的时候,还没有成交,撤单
难点是:这个撤单条件,我需要重复使用,所以不能说只撤单一次,就不再使用。而是撤单完后,在下一根K线,还要使用
撤单的控制条件是未成交时间还是价格,还是说2个综合的。
你可以这样做。你要做的其实就是限制撤单条件在一个K上不要重复触发以避免对新开的平仓单也执行撤单。
你可以这样:
if barpos>extgbdata('t') and 撤单条件 then //用超全局变量记住barpos
begin
//这里写撤单语句
extgbdataset('t',barpos);//重置超全局变量
end
第一种方式有一点不好,就是那个超全局变量下次运行程序化时候 上次的值还保留着,所以需要手动清除下。
[此贴子已经被作者于2020/1/16 9:59:11编辑过]