返回列表 发布新帖

【done】小问题:strategy_name 和 order_remark 无法传入

1019 4
发表于 2024-3-19 18:27:37 | 显示全部楼层 阅读模式
@ER@AP0T34{PVAKX9](R{@S.png

不清楚是哪里出问题了


def on_stock_order(self, order):
    """
委托回报推送    :param order: XtOrder对象    :return:
    """
data = {
        "委托备注": order.order_remark,
        "股票代码": order.stock_code,
        "委托类型": order.order_type,
        '成交均价':order.traded_price,
        '成交数量':order.traded_volume,
        '委托状态':order.order_status,
        '策略名称': order.strategy_name,
    }  # POST请求所需要传递的数据
print(datetime.datetime.now(), '委托回调1', data)


评论4

rzp
发表于 2024-3-19 20:39:54 | 显示全部楼层
发一下完整代码看看
*******6564楼主
发表于 2024-3-20 09:01:34 | 显示全部楼层
# order_stock_async - 下单
# 本示例用于展示如何订阅上海及深圳市场全推,对于沪深A股品种策略进行判断当前涨幅超过 9 个点的买入 200 股


#coding:utf-8
import time, datetime, traceback, sys
from xtquant import xtdata
from xtquant.xttrader import XtQuantTrader, XtQuantTraderCallback
from xtquant.xttype import StockAccount
from xtquant import xtconstant
from 发送post请求 import post_to_django

#定义一个类 创建类的实例 作为状态的容器
class _a():
    pass
A = _a()
A.bought_list = []
A.hsa = xtdata.get_stock_list_in_sector('沪深A股')


def interact():
    """执行后进入repl模式"""
    import code
    code.InteractiveConsole(locals=globals()).interact()
xtdata.download_sector_data()


# def f(data):
#     now = datetime.datetime.now()
#     for stock in data:
#         if stock not in A.hsa:
#             continue
#         cuurent_price = data[stock]['lastPrice']
#         pre_price = data[stock]['lastClose']
#         ratio = cuurent_price / pre_price - 1 if pre_price > 0 else 0
#         if ratio > 0.05 and stock not in A.bought_list:
#
#             async_seq = xt_trader.order_stock_async(acc, stock, xtconstant.STOCK_BUY, 200, xtconstant.LATEST_PRICE, -1, '111', stock)
#             if async_seq==-1:
#                 print(f'下单失败{async_seq=}')
#             else:
#                 (f"{async_seq=}{now} 最新价 买入 {stock} 200股")
#             A.bought_list.append(stock)

class MyXtQuantTraderCallback(XtQuantTraderCallback):
    def on_disconnected(self):
        """
        连接断开
        :return:
        """

        print(datetime.datetime.now(),'连接断开回调')
        return

    def on_stock_order(self, order):
        """
        委托回报推送
        :param order: XtOrder对象
        :return:
        """
        data = {
            "委托备注": order.order_remark,
            "股票代码": order.stock_code,
            "委托类型": order.order_type,
            '成交均价':order.traded_price,
            '成交数量':order.traded_volume,
            '委托状态':order.order_status,
            '策略名称': order.strategy_name,
        }  # POST请求所需要传递的数据

        print(datetime.datetime.now(), '委托回调1', data)

    def on_stock_trade(self, trade):
        """
        成交变动推送
        :param trade: XtTrade对象
        :return:
        """
        data = {
            "data":{
                "委托备注": trade.order_remark,
                "股票代码": trade.stock_code,
                "委托类型": trade.order_type,
                '成交均价': trade.traded_price,
                '成交数量': trade.traded_volume,
                '成交金额': trade.traded_amount,
                '策略名称': trade.strategy_name,
            }

        }  # POST请求所需要传递的数据
        response = post_to_django(data)
        print(response)
        print(datetime.datetime.now(), '成交回调1',data)


    def on_order_error(self, order_error):
        """
        委托失败推送
        :param order_error:XtOrderError 对象
        :return:
        """
        # print("on order_error callback")
        # print(order_error.order_id, order_error.error_id, order_error.error_msg)
        print(f"委托报错回调 {order_error.order_remark} {order_error.error_msg}")

    def on_cancel_error(self, cancel_error):
        """
        撤单失败推送
        :param cancel_error: XtCancelError 对象
        :return:
        """
        print(datetime.datetime.now(), sys._getframe().f_code.co_name)

    def on_order_stock_async_response(self, response):
        """
        异步下单回报推送
        :param response: XtOrderResponse 对象
        :return:
        """
        print(f"异步委托回调 {response.order_remark}")

    def on_cancel_order_stock_async_response(self, response):
        """
        :param response: XtCancelOrderResponse 对象
        :return:
        """
        print(datetime.datetime.now(), sys._getframe().f_code.co_name)

    def on_account_status(self, status):
        """
        :param response: XtAccountStatus 对象
        :return:
        """
        print(datetime.datetime.now(), sys._getframe().f_code.co_name)

if __name__ == '__main__':
    print("start")
    #指定客户端所在路径
    path = r'D:\国盛证券QMT 交易端模拟\userdata_mini'
    # 生成session id 整数类型 同时运行的策略不能重复
    session_id = int(time.time())
    xt_trader = XtQuantTrader(path, session_id)
    # 开启主动请求接口的专用线程 开启后在on_stock_xxx回调函数里调用XtQuantTrader.query_xxx函数不会卡住回调线程,但是查询和推送的数据在时序上会变得不确定
    # 详见: http://docs.thinktrader.net/vip/pages/ee0e9b/#开启主动请求接口的专用线程
    # xt_trader.set_relaxed_response_order_enabled(True)

    # 创建资金账号为 800068 的证券账号对象
    acc = StockAccount('161000003', 'STOCK')
    # 创建交易回调类对象,并声明接收回调
    callback = MyXtQuantTraderCallback()
    xt_trader.register_callback(callback)
    # 启动交易线程
    xt_trader.start()
    # 建立交易连接,返回0表示连接成功
    connect_result = xt_trader.connect()
    print('建立交易连接,返回0表示连接成功', connect_result)
    # 对交易回调进行订阅,订阅后可以收到交易主推,返回0表示订阅成功
    subscribe_result = xt_trader.subscribe(acc)
    print('对交易回调进行订阅,订阅后可以收到交易主推,返回0表示订阅成功', subscribe_result)

    stock = '000858.SZ'
    # async_seq = xt_trader.order_stock_async(acc, stock, xtconstant.STOCK_BUY, 1000, xtconstant.LATEST_PRICE, -1,
    #                                         'strategy_name', stock)
    async_seq = xt_trader.order_stock_async(acc, stock, xtconstant.STOCK_BUY, 1000, xtconstant.FIX_PRICE, 50,
                                            '111', stock)
    seq = xt_trader.order_stock(acc, stock, xtconstant.STOCK_BUY, 1000, xtconstant.FIX_PRICE, 50,
                                            strategy_name='一锤定音', order_remark='test')
    #这一行是注册全推回调函数 包括下单判断 安全起见处于注释状态 确认理解效果后再放开
    # xtdata.subscribe_whole_quote(["SH", "SZ"], callback=f)
    # 阻塞主线程退出
    # xt_trader.run_forever()
    # 如果使用vscode pycharm等本地编辑器 可以进入交互模式 方便调试 (把上一行的run_forever注释掉 否则不会执行到这里)
    # interact()

    # stock = '159605.SZ'

    #

    #
    # async_seq = xt_trader.order_stock(acc, stock, xtconstant.STOCK_BUY, 1000, xtconstant.FIX_PRICE, 0.500,
    #                                         'strategy_name', stock)
    #
    # async_seq = xt_trader.order_stock(acc, stock, xtconstant.STOCK_SELL, 100, xtconstant.FIX_PRICE, 1000,
    #                                         'strategy_name', stock)
*******6564楼主
发表于 2024-3-20 09:01:50 | 显示全部楼层
rzp 发表于 2024-3-19 20:39
发一下完整代码看看

看二楼
rzp
发表于 2024-3-20 09:08:29 | 显示全部楼层
image.png
image.png
我这是对的 可以加我帮你看看 https://www.xuntou.net/forum.php ... mp;user_code=I3DJ97

回复

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

客服专线

400-080-8112

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