demo.py 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128
  1. #coding:utf-8
  2. import time, datetime, traceback, sys
  3. from xtquant import xtdata
  4. from xtquant.xttrader import XtQuantTrader, XtQuantTraderCallback
  5. from xtquant.xttype import StockAccount
  6. from xtquant import xtconstant
  7. #定义一个类 创建类的实例 作为状态的容器
  8. class _a():
  9. pass
  10. A = _a()
  11. A.bought_list = []
  12. A.hsa = xtdata.get_stock_list_in_sector('沪深A股')
  13. def interact():
  14. """执行后进入repl模式"""
  15. import code
  16. code.InteractiveConsole(locals=globals()).interact()
  17. xtdata.download_sector_data()
  18. def f(data):
  19. now = datetime.datetime.now()
  20. for stock in data:
  21. if stock not in A.hsa:
  22. continue
  23. cuurent_price = data[stock]['lastPrice']
  24. pre_price = data[stock]['lastClose']
  25. ratio = cuurent_price / pre_price - 1 if pre_price > 0 else 0
  26. if ratio > 0.09 and stock not in A.bought_list:
  27. print(f"{now} 最新价 买入 {stock} 200股")
  28. async_seq = xt_trader.order_stock_async(acc, stock, xtconstant.STOCK_BUY, 200, xtconstant.LATEST_PRICE, -1, 'strategy_name', stock)
  29. A.bought_list.append(stock)
  30. xt_trader.query_stock_orders()
  31. class MyXtQuantTraderCallback(XtQuantTraderCallback):
  32. def on_disconnected(self):
  33. """
  34. 连接断开
  35. :return:
  36. """
  37. print(datetime.datetime.now(),'连接断开回调')
  38. def on_stock_order(self, order):
  39. """
  40. 委托回报推送
  41. :param order: XtOrder对象
  42. :return:
  43. """
  44. print(datetime.datetime.now(), '委托回调', order.order_remark)
  45. def on_stock_trade(self, trade):
  46. """
  47. 成交变动推送
  48. :param trade: XtTrade对象
  49. :return:
  50. """
  51. print(datetime.datetime.now(), '成交回调', trade.order_remark)
  52. def on_order_error(self, order_error):
  53. """
  54. 委托失败推送
  55. :param order_error:XtOrderError 对象
  56. :return:
  57. """
  58. # print("on order_error callback")
  59. # print(order_error.order_id, order_error.error_id, order_error.error_msg)
  60. print(f"委托报错回调 {order_error.order_remark} {order_error.error_msg}")
  61. def on_cancel_error(self, cancel_error):
  62. """
  63. 撤单失败推送
  64. :param cancel_error: XtCancelError 对象
  65. :return:
  66. """
  67. print(datetime.datetime.now(), sys._getframe().f_code.co_name)
  68. def on_order_stock_async_response(self, response):
  69. """
  70. 异步下单回报推送
  71. :param response: XtOrderResponse 对象
  72. :return:
  73. """
  74. print(f"异步委托回调 {response.order_remark}")
  75. def on_cancel_order_stock_async_response(self, response):
  76. """
  77. :param response: XtCancelOrderResponse 对象
  78. :return:
  79. """
  80. print(datetime.datetime.now(), sys._getframe().f_code.co_name)
  81. def on_account_status(self, status):
  82. """
  83. :param response: XtAccountStatus 对象
  84. :return:
  85. """
  86. print(datetime.datetime.now(), sys._getframe().f_code.co_name)
  87. if __name__ == '__main__':
  88. print("start")
  89. #指定客户端所在路径
  90. path = r'c:\\qmt\\userdata_mini'
  91. # 生成session id 整数类型 同时运行的策略不能重复
  92. session_id = int(time.time())
  93. xt_trader = XtQuantTrader(path, session_id)
  94. # 创建资金账号为 800068 的证券账号对象
  95. acc = StockAccount('920000207040', 'SECURITY')
  96. # 创建交易回调类对象,并声明接收回调
  97. callback = MyXtQuantTraderCallback()
  98. xt_trader.register_callback(callback)
  99. # 启动交易线程
  100. xt_trader.start()
  101. # 建立交易连接,返回0表示连接成功
  102. connect_result = xt_trader.connect()
  103. print('建立交易连接,返回0表示连接成功', connect_result)
  104. # 对交易回调进行订阅,订阅后可以收到交易主推,返回0表示订阅成功
  105. subscribe_result = xt_trader.subscribe(acc)
  106. print('对交易回调进行订阅,订阅后可以收到交易主推,返回0表示订阅成功', subscribe_result)
  107. # asset = xt_trader.query_stock_asset(acc)
  108. # cash = asset.cash
  109. # print(cash)
  110. # xtdata.subscribe_whole_quote(["SH", "SZ"], callback=f)
  111. xtdata.run()
  112. #进入交互模式
  113. # interact()