返回列表 发布新帖

场景_如何获取对手价下单?

2920 0
发表于 2024-4-7 11:04:13 | 显示全部楼层 阅读模式

问题

大家常常在问,如何才能获取到对手价之后下单?我们可以把这个问题切割成两个部分,1.如何获取到对手价? 2.如何用这个价格下单?在QMT软件里面,这两个问题都已经被提供了快捷的解决方法。

  1. 对手价:
# 可以通过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"]
  1. 用对手价下单:
# 内置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

image.png

# 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

image.png

get_fix_price()

image.png

'''
原生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 实战交流社群,交流群内有许多做量化交易的高手和大佬,具有良好的分享和互助氛围。且迅投官方会不定期为多次分享、乐于助人的群友申请送投研专业版的机会。

只需扫描下方的二维码,名额有限,限时加入。一起分享见解、交换信息、并共同进步,就像群友说的:“就算周末,晚上也有地方沟通交流!”

企业微信截图_17235220909173.png

回复

您需要登录后才可以回帖 登录 | 立即注册

客服专线

400-080-8112

用思考的速度交易,用真诚的态度合作,我们是认真的!
  • 关注公众号
  • 添加微信客服
Copyright © 2001-2025 迅投QMT社区 版权所有 All Rights Reserved. 京ICP备2025122616号-3
关灯 快速发帖
扫一扫添加微信客服
QQ客服返回顶部
快速回复 返回顶部 返回列表