最近才知道TargetPosTask是在之后的每次 wait_update 时才发出下单指令,我想知道具体的下单指令是怎样发出的,
就比如说wait_update接收到tick1,执行计算,满足条件的话task记录1手,然后继续其余的代码,然后循环回到wait_update,此时是立刻发出下单指令,还是等待500ms后的下一个tick2,??
另外TargetPosTask默认是对价下单,但是突破策略中,突破后的行情是很急的,可能对价都追不上,再加上等待下一个tick。。。tick本身已经是交易所主机的抽样了。。
这方面文华做的比较凶狠彻底,他们定义的市价就是涨停价,跌停价。。
所以希望TargetPosTask能自己设置价格(虽然我已经换用insert_order了。。),还有就是希望本地程序计算满足条件后可以立刻发送下单指令,1ms都不想等。。
可不可以把wait_update发送数据的部分分出来。。在TargetPosTask后就立刻执行。。
另外发现simnow问题多多。抛弃它!。开多纯碱时居然提示CTP:找不到合约。还有什么资金不足。。快期模拟一切正常!但是快期的成交通知缺个成交价格。
还有能不能把服务器的通知log下来??小白不会弄。。。
还有期货市场已经是机构主宰的狩猎场。小散要团结互助啊!??
while True:
api.wait_update()
if api.is_changing(ru2101) or api.is_changing(ru2105):
spread = ru2105.ask_price1 – ru2101.bid_price1
print(“当前价差:”, spread)
if spread < -200:
print(“目标持仓: 空近月,多远月”)
# 设置目标持仓为正数表示多头,负数表示空头,0表示空仓
target_pos_near.set_target_volume(-1)
target_pos_deferred.set_target_volume(1)
if spread >200:
print(“目标持仓: 空仓”)
target_pos_near.set_target_volume(0)
target_pos_deferred.set_target_volume(0)
是按照例子抄的,api.wait_update()在前面,这样对不对?
循环回到wait_update之后是立刻发出下单,如果不想等的话在执行完 TargetPosTask 之后可以直接调用 api.wait_update() 这样就实现了1ms都不等的方案。
因为TargetPosTask仅仅是个工具辅助下单的,所以只实现了大多数情况下会使用的场景,并且在使用的时候尽可能地从安全角度出发(因为不是所有人都会完整理解TargetPosTask的工作逻辑),所以采用的是对价下单,试想一下如果一个用户下单量特别大然后TargetPosTask还使用涨跌停的话就很容易被坑,因此相比于用户实实在在地亏损,难用一点至少还好一些,特别地,如果想控制下单的细节的话,完全可以使用更底层的 insert_order 接口来实现
如果开多开空的时候有找不到合约,那就先排查一下代码问题,看看是不是大小写弄错或者交易所弄错,资金不足也是同样的排查过程
你的TargetPosTask可以下单成功吗?我怎么使用TargetPosTask无法下单成功?
可以下单成功,你下单不成功有什么提示?调用TargetPosTask之后有没有调用 wait_update() ?
谢谢解答!我现在用insert_order了。小小散不担心砸破地板哈哈哈。在循环里再调用wait_update好像会出错退出,忘记了,现在没再测试了。
那个找不到纯碱的合约就是simnow的问题,我同一时间同样策略的快期模拟正常的,不管它了