跑实盘遇到了坑,用TargetPosTask业务工具下单,即使用了对价下单,依然会存在问题.后来改用
order = api.insert_order(symbol=heyue, direction="SELL", offset="OPEN", volume=vol,limit_price=klines1.iloc[-1].close - 10)
下单,把价差增加,开仓没问题了,但是平仓存在问题了.
大连郑州交易所的平仓没问题,直接用
order = api.insert_order(symbol=heyue, direction="BUY", offset="CLOSE", volume=vol,limit_price=klines1.iloc[-1].close + 1)
就可以了,但是上海的合约,有个平今和平昨,只有用条件语句对pos来判断持仓是持今还是持昨,每次平完仓程序就出问题并且中断了,无论怎么改也不行.目前初步猜测pos的判断是否有问题,造成反复平仓出现问题,或者说平昨和平今有问题.真是头都大了.改回TargetPosTask业务工具下单,又总是买不进就撤单再买,结果追了好高才买到甚至买不到,真是头都大了啊,求大佬解决.
建议:能否对业务工具目标持仓的下单也增加limit限价,比如高出多少价位去买,而不是只有挂买一价或对价,这样行情波动大的话,就真的很无奈啊.
target_pos_task 内部是用 insert_order 来实现的,首先关于你说的追价太高买不到,我先解释一下 target_pos_task的逻辑:默认使用对价,也就是买单用卖一价来下单,结合交易所撮合逻辑,出现无法成交的原因只会有两个(从买的角度来看):
1. 由于延迟导致下单的时候卖一的单子被吃掉了,此时就变成了挂单
2. 手数太多导致卖一被你吃掉后依旧还有没成交的买单
然后 target_pos_task 的应对方式是:会监听价格变化,如果价格变化了还有单子没成交,那就撤单重新以新的卖一价下单。
所以如果总是出现买不进的很大一个可能性就是当时交易品种的流动性太低,比方说非主力合约或者关键价位突破大量买单涌入,可以从这两个角度来考虑解决
关于 insert_order 程序出问题中断很有可能就是你这边认为的昨今仓判断有误,会导致抛出错单的异常,注意在 insert_order 前后使用 try: except: 包裹代码块来检查
谢谢,不过还是期望业务工具库的POS能够多一点下单方式