欢迎使用金字塔普通技术服务论坛,您可以在相关区域发表技术支持贴。
我司技术服务人员将优先处理 VIP客服论坛 服务贴,普通区问题处理速度慢,请耐心等待。谢谢您对我们的支持与理解。


金字塔客服中心 - 专业程序化交易软件提供商金字塔软件金字塔软件问题提交 → 后台程序化撤单指令使用问题

   

欢迎使用金字塔普通技术服务论坛,您可以在相关区域发表技术支持贴。
我司技术服务人员将优先处理 VIP客服论坛 服务贴,普通区问题处理速度慢,请耐心等待。谢谢您对我们的支持与理解。    


  共有3044人关注过本帖树形打印复制链接

主题:后台程序化撤单指令使用问题

帅哥哟,离线,有人找我吗?
ebpart
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:新手上路 帖子:85 积分:115 威望:0 精华:0 注册:2011/1/26 23:20:51
后台程序化撤单指令使用问题  发帖心情 Post By:2019/8/28 16:14:13 [显示全部帖子]

我的需求:在下单前,把之前未成交的委托单撤掉,然后下新单,比如代码如下:

 

TCANCELEX(1,0,'','');
TSELLSHORT(1,LOTS,LMT,UP_LINE);
TBUY(1,LOTS,LMT,LOW_LINE);

 

按我的理解,这样写会把旧的委托单都撤掉,然后下新的平空和开多指令。

 

实际运行的时候,却出现,除了旧委托单被撤掉,第2和第3句的这两个下单语句,刚下完,也被马上撤掉。

 

要怎么办,如何正确使用?


 回到顶部
帅哥哟,离线,有人找我吗?
ebpart
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:新手上路 帖子:85 积分:115 威望:0 精华:0 注册:2011/1/26 23:20:51
  发帖心情 Post By:2019/8/28 16:16:48 [显示全部帖子]

备注:我使用的是模拟账户

 回到顶部
帅哥哟,离线,有人找我吗?
ebpart
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:新手上路 帖子:85 积分:115 威望:0 精华:0 注册:2011/1/26 23:20:51
  发帖心情 Post By:2019/8/28 17:08:30 [显示全部帖子]

好的,谢谢2位,我晚上再试一下

 回到顶部
帅哥哟,离线,有人找我吗?
ebpart
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:新手上路 帖子:85 积分:115 威望:0 精华:0 注册:2011/1/26 23:20:51
  发帖心情 Post By:2019/8/28 17:17:20 [显示全部帖子]

不对啊,你这样跟我也没区别啊,我只是简单的把撤单和平空,开多语句复制出来描述问题,检测为成交单是否满足撤单条件我也是有的
我的大概可以看成以下:
IF (撤单追单条件=1) THEN
BEGIN
    TCANCELEX(1,0,'','');
    TSELLSHORT(1,LOTS,LMT,UP_LINE);
    TBUY(1,LOTS,LMT,LOW_LINE);

END
以下是引用wenarm在2019/8/28 16:29:35的发言:

逻辑不对。你这种顺序执行的方式,自然会出现这种情况。

常规逻辑应该是:检测未成交单是否满足撤单条件,如:未成交历时单大于20秒等条件。

然后满足之后进行撤单追单

if   未成交单历时>20  then begin

    TCANCELEX(1,0,'','');
    TSELLSHORT(1,LOTS,LMT,UP_LINE);

 

end

 

注:你楼上的代码就是无脑撤单下单操作。

 

另外,你平空开多要分开判断,存在平空未成交,但是开多成交的情况。你这种操作,直接造成多头仓位增加n手


 回到顶部
帅哥哟,离线,有人找我吗?
ebpart
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:新手上路 帖子:85 积分:115 威望:0 精华:0 注册:2011/1/26 23:20:51
  发帖心情 Post By:2019/8/28 17:25:36 [显示全部帖子]

以下是引用banzhuan在2019/8/28 16:27:07的发言:
//先判断是否有未成交单
WCJ:=TREMAINQTY( 1, ZH1,PZ1);
IF WCJ<>0 THEN BEGIN
A:=WCJ;
END

//再对未成交单撤单追单
IF WCJ>0 THEN BEGIN
TCANCELEX(1,1,ZH1,PZ1 );
TBUY(WCJ=0,A,MKT,0,ZH1,PZ1);
END

 

 

我之前一直用图表程序化的,后台程序化是今天有需求,刚刚接触。

 

如果按图表程序化的逻辑,语句是按顺序执行下来,只执行最后一次最新的结果

 

按你写的这语句,是说WCJ是会变化的吗?假设确实有未成交的开多单,第一遍执行把未成交数量保存给A,然后撤单,第一遍没有执行开多,等撤单成功了,WCJ为0了,这时第2?遍了才来执行开多吗?


 回到顶部