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


金字塔客服中心 - 专业程序化交易软件提供商金字塔软件高级功能研发区 → 关于实现在一个信号点下单超过10手(个人一次下单只能10手)

   

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


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

主题:关于实现在一个信号点下单超过10手(个人一次下单只能10手)

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


加好友 发短信
等级:新手上路 帖子:11 积分:0 威望:0 精华:0 注册:2016/12/5 12:05:26
关于实现在一个信号点下单超过10手(个人一次下单只能10手)  发帖心情 Post By:2016/12/13 10:19:38 [只看该作者]

下面是我写的代码,可以运行,但存在一个问题,有时候会重复下单,比如我想要单次下单12手(也就是下一次10手和一次2手,共12手)但有时候会自动下单10+2+10+2。为了杜绝这个情况我已经加入了如果有委托单在后台的时候不再判断下单,但还是会出现这个情况,很奇怪,求问是什么原因导致的,如何解决。

其中tradetime是一次下单数量除以10取整,即下10手的次数。

    Set Formula = marketdata.STKINDI(codeid, marketid, pelfunction,0,0)
    ma1 = formula.getbufdata("ma1", formula.datasize-1)
    ma2 = formula.getbufdata("ma2", formula.datasize-1)
    ma3 = formula.getbufdata("ma3", formula.datasize-1)
    call order.HoldingInfoByCode2(codeid,marketid,buyhoding,buycost,buytodayhoding,sellhoding,sellcost,selltodayhoding,PNL,UseMargin)
    dim pendingcount
    pendingcount = order.OrderNum2
    application.MsgOut pendingcount
    if pendingcount = 0 then      '后台没有委托单子时才下单
    
    if ma1>ma2 and ma1>ma3 and buyhoding=0 and sellhoding = 0 then   '做多
        for i = 1 to tradetime
            call order.Buy(0,10,reportdata.newprice,0,codeid, marketid,"",0)
        next
        call order.Buy(0,onevol-tradetime*10,reportdata.newprice,0,codeid, marketid,"",0)
    end if
    if ma1<ma2 and ma1<ma3 and buyhoding=0 and sellhoding = 0 then    '做空
        for i = 1 to tradetime
            call order.BuyShort(0,10,reportdata.newprice,0,codeid, marketid,"",0)
        next
        call order.buyshort(0,onevol-tradetime*10,reportdata.newprice,0,codeid, marketid,"",0)
    end if
    if ma1>ma2 and sellhoding>0 then                     '平空
        for i = 1 to tradetime
            call order.sellshort(0,10,reportdata.newprice,0,codeid, marketid,"",0)
        next
        call order.sellshort(0,onevol-tradetime*10,reportdata.newprice,0,codeid, marketid,"",0)
    end if
    if ma1<ma2 and buyhoding>0 then                       '平多
        for i = 1 to tradetime
            call order.sell(0,10,reportdata.newprice,0,codeid, marketid,"",0)
        next
        call order.sell(0,onevol-tradetime*10,reportdata.newprice,0,codeid, marketid,"",0)
    end if
    
    end if

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


加好友 发短信
等级:罗宾汉 帖子:11808 积分:20695 威望:0 精华:10 注册:2009/8/18 8:15:13
  发帖心情 Post By:2016/12/13 11:54:53 [只看该作者]

建议你使用application.MsgOut 调试一下下单条件,看一下是具体哪个变量的异常导致的重复下单。

不过初步看了你的代码,order.HoldingInfoByCode2 这个是获取你的实际持仓,从报单到成交是需要过程的,有时不成交时间会更长, 你获取到的sellhoding =0这个条件是有问题的。

建议你代码增加未成交单的判断,并将扫描间隔时间延长



金字塔—专业程序化软件提供商

金字塔-技术部

-----------------------------------------------------------------------------------------------------

工作时间:周一至周五 08:30 - 17:30   周末及法定节假日休息

Email:service@weistock.com
 回到顶部
帅哥哟,离线,有人找我吗?
dylanchan265
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:新手上路 帖子:11 积分:0 威望:0 精华:0 注册:2016/12/5 12:05:26
  发帖心情 Post By:2016/12/14 9:41:07 [只看该作者]

其实我发现了那个问题,上面的代码也加设了未成交订单的信息作为判断。
我改了时间间隔为两秒然后测试了一下,发现期货板块是不会出现这种问题的,但期权仍然会出现,是否是因为期权数据的问题呢?

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


加好友 发短信
等级:超级版主 帖子:21598 积分:0 威望:0 精华:1 注册:2010/7/31 16:35:30
  发帖心情 Post By:2016/12/14 9:51:43 [只看该作者]

调试输出下未成交单以及实际持仓的数值,然后结合交易日志看下是否是报单到回报太慢导致??

账户栏那你也可以看下,下单后委托栏显示委托单信息速度怎么样


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


加好友 发短信
等级:新手上路 帖子:11 积分:0 威望:0 精华:0 注册:2016/12/5 12:05:26
  发帖心情 Post By:2016/12/14 10:01:58 [只看该作者]

重新试了一下,下的单子都是在同一秒内,但我设置的计时器是2秒,很奇怪呀。。
而且成交过快,未成交单数这个指标输出时(因为两秒间隔)一直为0,持仓则瞬间跳到36(也就是3倍于正常)

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


加好友 发短信
等级:新手上路 帖子:11 积分:0 威望:0 精华:0 注册:2016/12/5 12:05:26
  发帖心情 Post By:2016/12/14 10:29:25 [只看该作者]

想了一下,应该还是timer出了问题,因为信息窗口更新的速度远快于2秒… 想问一下有没有关于settimer比较全的资料,对这个东西的作用原理作用域什么的理解不是很深…麻烦了!

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


加好友 发短信
等级:超级版主 帖子:21598 积分:0 威望:0 精华:1 注册:2010/7/31 16:35:30
  发帖心情 Post By:2016/12/14 10:51:21 [只看该作者]

期权实盘还是模拟,你加入下下单事件

OrderStatusEx2 事件

 "Submitted"和"PreSubmitted"  表示订单已经提交

 

当订单属于提交后,输出时间你看下这个时间和你下单时候的时间,是不是超过了你2秒的轮询间隔了。


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


加好友 发短信
等级:新手上路 帖子:11 积分:0 威望:0 精华:0 注册:2016/12/5 12:05:26
  发帖心情 Post By:2016/12/14 10:54:58 [只看该作者]

是期权模拟,我试试

 回到顶部