问题
大家常常在问,如何才能获取到对手价之后下单?我们可以把这个问题切割成两个部分,1.如何获取到对手价? 2.如何用这个价格下单?在QMT软件里面,这两个问题都已经被提供了快捷的解决方法。
- 对手价:
# 可以通过get_full_tick(),取买一价(bidPrice[0])为对手价,若买一价为0,说明已经跌停,则取最新价(lastPrice)
# 内置Python
to_do_trade_list = ["000001.SZ", "...", ......]
fix_price = {}
tick = C.get_full_tick(to_do_trade_list)
for code in tick:
fix_price[code] = tick[code]["bidPrice"][0] if tick[code]["bidPrice"][0] != 0 else tick[code]["lastPrice"]
# 原生Python
to_do_trade_list = ["000001.SZ", "...", ......]
fix_price = {}
tick = xtdata.get_full_tick(to_do_trade_list)
for code in tick:
fix_price[code] = tick[code]["bidPrice"][0] if tick[code]["bidPrice"][0] != 0 else tick[code]["lastPrice"]
- 用对手价下单:
# 内置Python
for code in to_do_trade_list:
passorder(23, 1101, "your_account", code, 14, fix_price[code], volume, "strategyName", 1, "", C)
# 原生Python
for code in to_do_trade_list:
print(f"合约号{code}的下单请求序号: {xt_trade.order_stock_async(account, code, xtconstant.STOCK_BUY, 1000, xtconstant.FIX_PRICE, fix_price_dict[code], 'strategy1', 'order_test')}")
以上就是两个被拆解的问题的解决方法,当我们将这两个解决方法结合起来就能够顺利的解决用对手价下单的场景了。
解答
内置Python

# coding:gbk
'''
内置python, 取对手价下单
'''
def init(C):
pass
def after_init(C):
volume = 1000
to_do_trade_list = ["000001.SZ"]
fix_price = {}
tick = C.get_full_tick(to_do_trade_list)
# 取买一价为对手价,若买一价为0,说明已经跌停,则取最新价
for code in tick:
fix_price[code] = tick[code]["bidPrice"][0] if tick[code]["bidPrice"][0] != 0 else tick[code]["lastPrice"]
print(f'对手价:{fix_price}')
# 下单
for code in to_do_trade_list:
passorder(23, 1101, "account", code, 14, fix_price[code], volume, "strategyName", 1, "", C)
def handlebar(C):
return
原生Python

get_fix_price()

'''
原生python取对手价下单
'''
from xtquant import xtdata,xttrader
from xtquant.xttype import StockAccount
from xtquant import xtconstant
import time
def get_fix_price(stock_list:list = []) -> dict:
'''
获取传入股票列表中所有股票的对手价
:param stock: 指定的股票代码列表, stock.market格式
:return: 如列表不为空返回包含对手价信息字典, {code:fix_price}
'''
if not stock_list:
print("无指定股票")
return
# 链接到主程序获取数据,链接的端口需要一致
xtdata.connect(port = 58601)
# 取对手价下单
to_do_trade_list = stock_list
fix_price = {}
tick = xtdata.get_full_tick(to_do_trade_list)
# 取买一价为对手价,若买一价为0,说明已经跌停,则取最新价
for code in tick:
fix_price[code] = tick[code]["bidPrice"][0] if tick[code]["bidPrice"][0] != 0 else tick[code]["lastPrice"]
return fix_price
# 填写投研端的股票账号
account = StockAccount("2000567")
# 填投研端的userdata路径
xt_trade = xttrader.XtQuantTrader(r"D:\迅投极速交易终端睿智融科版\userdata",int(time.time()))
# 启动交易线程
xt_trade.start()
# 链接交易
connect_result = xt_trade.connect()
subscribe_result = xt_trade.subscribe(account)
print(connect_result)
# 预设下单股票代码
to_do_trade_list = ['000001.SZ']
fix_price_dict = get_fix_price(to_do_trade_list)
print(fix_price_dict)
# 循环每一个预设的股票代码进行下单操作
for code in to_do_trade_list:
try:
print(f"合约号{code}的下单请求序号: {xt_trade.order_stock_async(account, code, xtconstant.STOCK_BUY, 1000, xtconstant.FIX_PRICE,fix_price_dict[code], 'strategy1', 'order_test')}")
except AttributeError as e:
print(f"{e} with code {code}")
continue
xtdata.run()
不清楚的内容可添加下方助理微信咨询,有其他 QMT 小技巧想学习的吗?欢迎在下方留言,笔者将根据大家的留言持续更新哦!
欢迎和我一起加入迅投组建的 QMT 实战交流社群,交流群内有许多做量化交易的高手和大佬,具有良好的分享和互助氛围。且迅投官方会不定期为多次分享、乐于助人的群友申请送投研专业版的机会。
只需扫描下方的二维码,名额有限,限时加入。一起分享见解、交换信息、并共同进步,就像群友说的:“就算周末,晚上也有地方沟通交流!”
