举例,比如螺纹钢
当价格超过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的内在运作逻辑,所以问的比较细致