以文本方式查看主题

-  金字塔客服中心 - 专业程序化交易软件提供商  (http://222.73.7.161/bbs/index.asp)
--  公式模型编写问题提交  (http://222.73.7.161/bbs/list.asp?boardid=4)
----  [求助]求助撤单挂单的代码  (http://222.73.7.161/bbs/dispbbs.asp?boardid=4&id=173998)

--  作者:ebpart
--  发布时间:2020/1/15 14:47:08
--  [求助]求助撤单挂单的代码
求大神/版主帮我写一段后台代码:

当没有仓位的时候,市价买入多单,然后在1000限价挂单卖出平仓,假设2分钟后没有成交,撤单,然后在900限价挂单卖出平仓,然后2分钟没成交,撤单,挂800限价卖出平仓。(备注:使用1分钟K线)

我现在实现的时候,撤单可以撤成功,但是新开的限价单,也会立即被撤单。

--  作者:FireScript
--  发布时间:2020/1/15 14:49:44
--  
 你是不是撤单的方向指定有问题。通常你撤平仓单,不会把开仓的撤掉,除非你指定的方向是全部方向单子。

[此贴子已经被作者于2020/1/15 14:49:54编辑过]

--  作者:ebpart
--  发布时间:2020/1/15 15:16:18
--  
我描述错了,重新写个条件:

当没有仓位的时候,市价买入多单,然后在1000限价挂单卖出平仓,假设某根K的开盘价小于800的时候,还没有成交,撤单,然后在900限价挂单卖出平仓。

这种情况下,就会出现新的挂单被撤。

我追踪记录,会出现,新的900的限价单挂出来后,因为撤单条件在K线走完前,仍然还是满足的,然后新的挂单被撤销了。但是900限价挂单,只能执行一次,并不会再次执行。

也就说,TCANCAL可以多次执行,挂单卖出平仓只能执行一次。最后的结果是新挂单也被撤销了。(刚刚那个超时撤单,因为新挂单后超时条件不会一直满足了,所以倒是没问题)

--  作者:FireScript
--  发布时间:2020/1/15 15:33:07
--  
 能否提供下你这部分的代码。在原先代码上进行校正会比较方便点。也能让我们更容易明确你的思路里面的细节。
--  作者:ebpart
--  发布时间:2020/1/15 15:33:18
--  
备注:我这个只是特地弄个例子简单化描述

在我这个例子里,我知道可以通用全局变量来控制,比如,在900限价单挂单后设置一个全局变量为1,撤单条件增加全局变量检测,如果为1则不再进入撤单代码。

但是这样,在接下来的运行里,撤单条件不能再重复使用了

--  作者:ebpart
--  发布时间:2020/1/15 15:34:42
--  
以下是引用FireScript在2020/1/15 14:49:44的发言:
 你是不是撤单的方向指定有问题。通常你撤平仓单,不会把开仓的撤掉,除非你指定的方向是全部方向单子。

[此贴子已经被作者于2020/1/15 14:49:54编辑过]

我撤平仓单,新开的也是平仓单,变一下价格
--  作者:FireScript
--  发布时间:2020/1/15 15:48:07
--  
 那行。目前具体代码可能需要盘中我这边一遍测试一遍处理。有需要进一步了解的我会跟帖咨询你的。
--  作者:ebpart
--  发布时间:2020/1/15 15:55:15
--  
当没有仓位的时候,市价买入多单,然后在1000限价挂单卖出平仓,假设某根K的开盘价小于800的时候,还没有成交,撤单,然后在900限价挂单卖出平仓

然后:假设某根K的开盘价小于800的时候,还没有成交撤单


难点是:这个撤单条件,我需要重复使用,所以不能说只撤单一次,就不再使用。而是撤单完后,在下一根K线,还要使用

--  作者:FireScript
--  发布时间:2020/1/15 16:05:17
--  
 撤单的控制条件是未成交时间还是价格,还是说2个综合的。
--  作者:FireScript
--  发布时间:2020/1/16 9:48:44
--  
 你可以这样做。你要做的其实就是限制撤单条件在一个K上不要重复触发以避免对新开的平仓单也执行撤单。
你可以这样:
if barpos>extgbdata(\'t\') and  撤单条件 then //用超全局变量记住barpos
begin
    //这里写撤单语句
extgbdataset(\'t\',barpos);//重置超全局变量
end

第一种方式有一点不好,就是那个超全局变量下次运行程序化时候 上次的值还保留着,所以需要手动清除下。
[此贴子已经被作者于2020/1/16 9:59:11编辑过]