def my_tar_position_task(api, tar_pos_task, contract, tar_vol, margin_vol_limit=4):
"""
Parameters
----------
api
tar_pos_task
contract
tar_vol
margin_vol_limit
Returns
-------
"""
cur_pos = api.get_position(contract)
new_pos, orders = simulated_trade(cur_pos, tar_vol)
if new_pos.margin_vol <= margin_vol_limit:
try:
tar_pos_task = TargetPosTask(api, contract, offset_priority='昨开')
except Exception:
print(traceback.format_exc())
tar_pos_task.cancel()
while not tar_pos_task.is_finished():
api.wait_update()
tar_pos_task = TargetPosTask(api, contract, offset_priority='昨开')
tar_pos_task.set_target_volume(tar_vol)
else:
tar_pos_task.cancel()
while not tar_pos_task.is_finished():
api.wait_update()
print("tar_pos_task is finished")
new_tar_pos_task = TargetPosTask(api, contract)
new_tar_pos_task.set_target_volume(tar_vol)
print("new_task created")
api.wait_update()
tqacc = TqKq()
api = TqApi(tqacc, auth=TqAuth('', ''))
contract = 'CFFEX.IM2405'
tar_pos_task = TargetPosTask(api, contract, offset_priority='昨开')
while True:
api.wait_update()
my_tar_position_task(api, tar_pos_task, contract, 4, margin_vol_limit=4)
自定义函数的作用是在股指期货交易时判断用 ‘昨开”参数开仓(这种锁仓方式可以节省交易费用)是否满足保证金条件,如果超出了,就重新建一个默认参数的tar_position_task进行下单。如果没有超出保证金限制,就新建一个参数“昨开”的task进行下单。
但是程序貌似在新建new_tar_pos_task之后一直没有成交,一直重复在29和32行,是什么原因?貌似是因为实例化TargetPosTask不能放在循环内,但是在实盘中随时都有可能要新建一个新的task,要怎么修改才能正常运行呢
李思恒 已回答的问题 2024年4月25日