举例,比如螺纹钢
当价格超过3800的时候,TargetPosTask设置,建立10手,做多,目标是希望能够建仓价格控制在3800最好
问题:
核心问题:TargetPosTask的建仓优先级是否是首先满足建仓手数,然后才是价格
1、“PASSIVE”的设置下,建仓机制是如何的,比如现在买一价格是3799,卖一价格是3801,超过3800,是否此时下单的价格就是3799,如果不能成交,那么多久会撤单,又如何下单?如何这个时候行情猛拉,会否不断撤单,挂单,然后随着行情的上升,最终建仓价格也可能提升很多,高过3800很多,会否有这样的情况
2、“ACTIVE”下,也是如此,极端情况下,如何行情猛拉,我是想买,这个时候ACTIVE是下的价格是对价卖一价格,还是直接下涨停价格?如何是涨停价格,当手数过大的时候,会否把上面的单子自己吃了,然后自己把价格拉了上去
问题较细,多谢耐心解答哈,谢谢
appleman4000 已回答的问题 2022年9月29日
使用insert_order完成下单,如果价格远离5跳以上则停止下单,包含大单拆分小单功能
lots= 200 min_volume = 20 max_volume = 100 # 开多单 init_price = quote.ask_price1 while position.pos_long < lots: if quote.ask_price1 >= init_price + 5 * quote.price_tick: break if lots - position.pos_long > max_volume: lot = random.randint(min_volume, max_volume) else: lot = lots - position.pos_long limit_price = quote.ask_price1 order = api.insert_order(symbol=underlying_symbol, direction='BUY', offset='OPEN', volume=lot, limit_price=limit_price) print(quote.datetime, end=' ') print('开多单(' + str(lot) + '手)', end=' ') print(limit_price) while order.status != 'FINISHED': api.wait_update() if order.insert_date_time == 0: continue if api.is_changing(quote, ['ask_price1']) and \ quote.ask_price1 > order.limit_price + 2 * quote.price_tick: api.cancel_order(order) if order.volume_orign - order.volume_left > 0: print(quote.datetime, end=' ') print('已成交(' + str(order.volume_orign - order.volume_left) + '手),共' + str(position.pos_long) + '手', end=' ') print(order.trade_price) # 开空单 init_price = quote.bid_price1 while position.pos_short < lots: if quote.bid_price1 <= init_price - 5 * quote.price_tick: break if lots - position.pos_short > max_volume: lot = random.randint(min_volume, max_volume) else: lot = lots - position.pos_short limit_price = quote.bid_price1 order = api.insert_order(symbol=underlying_symbol, direction='SELL', offset='OPEN', volume=lot, limit_price=limit_price) current = datetime.datetime.fromtimestamp(klines_30m.datetime.iloc[-1] / 1e9) print(quote.datetime, end=' ') print('开空单(' + str(lot) + '手)', end=' ') print(limit_price) while order.status != 'FINISHED': api.wait_update() if order.insert_date_time == 0: continue if api.is_changing(quote, ['bid_price1']) and \ quote.bid_price1 < order.limit_price - 2 * quote.price_tick: api.cancel_order(order) if order.volume_orign - order.volume_left > 0: print(quote.datetime, end=' ') print('已成交(' + str(order.volume_orign - order.volume_left) + '手),共' + str(position.pos_short) + '手', end=' ') print(order.trade_price)
tfintech2022 发表新评论 2022年10月2日
感谢解答,这个代码是对targetpos的功能替代,还是其内在运作的逻辑解释,因为在api中我没有找到targetpos的内在运作逻辑,所以问的比较细致