# -*- coding: utf-8 -*-
from xtquant.xttrader import XtQuantTrader, XtQuantTraderCallback
from xtquant.xttype import StockAccount
from xtquant import xtconstant
import time, datetime, traceback, sys
class MyXtQuantTraderCallback(XtQuantTraderCallback):
def on_disconnected(self):
print("连接断开")
def on_stock_order(self, order):
print("委托回报")
print(order.stock_code, order.order_status, order.order_sysid)
def on_stock_asset(self, asset):
print("资金变动")
print(asset.account_id, asset.cash, asset.total_asset)
def on_stock_trade(self, trade):
print("成交变动")
print(trade.account_id, trade.stock_code, trade.order_id)
def on_stock_position(self, position):
print("持仓变动")
print(position.stock_code, position.volume)
def on_order_error(self, order_error):
print("委托失败")
print(order_error.order_id, order_error.error_id, order_error.error_msg)
def on_cancel_error(self, cancel_error):
print("撤单失败")
print(cancel_error.order_id, cancel_error.error_id, cancel_error.error_msg)
def on_order_stock_async_response(self, response):
print("异步下单回")
print(response.account_id, response.order_id, response.seq)
def on_account_status(self, status):
print("账户状态")
print(status.account_id, status.account_type, status.status)
if __name__ == "__main__":
print("开始运行")
# path为安装目录下userdata_mini路径,"D:\\QMT\\"需要根据自己的路径修改
path = 'C:\\中金财富QMT个人版交易端\\userdata_mini'
# 打开可执行文件XtMiniQmt.exe "D:\\QMT\\"需要根据自己的路径修改
import subprocess
process = subprocess.Popen('C:\\中金财富QMT个人版交易端\\bin.x64\\XtMiniQmt.exe')
session_id = int(time.time())
xt_trader = XtQuantTrader(path, session_id)
callback = MyXtQuantTraderCallback()
xt_trader.register_callback(callback)
xt_trader.start()
connect_result = xt_trader.connect()
if connect_result != 0:
import sys
sys.exit('xtquant链接失败,请确认xtminiqmt登录后再重试,程序即将退出 %d' % connect_result)
# 创建资金账号为"1234567"的证券账号对象,需要改为自己的账号
acc = StockAccount('1234567')
print(acc)
subscribe_result = xt_trader.subscribe(acc)
if subscribe_result != 0:
print('账号订阅失败 %d' % subscribe_result)
print(subscribe_result)
stock_code = '600000.SH'
order_go = xt_trader.order_stock(acc, stock_code, xtconstant.STOCK_BUY, 100, xtconstant.FIX_PRICE, 10.5,'strategy_name', 'remark')
print(order_go)
cxl_order = xt_trader.cancel_order_stock(acc, order_go)
print(cxl_order)
#async_seq = xt_trader.order_stock_async(acc, stock_code, xtconstant.STOCK_BUY, 200, xtconstant.FIX_PRICE, 10.5,'strategy_name', 'remark')
#print(async_seq)
asset = xt_trader.query_stock_asset(acc)
if asset:
print("资产:")
print("可用资金 {0}".format(asset.cash))
order = xt_trader.query_stock_order(acc, order_go)
if order:
print("委托:")
print("委托 {0}".format(order.order_id))
orders = xt_trader.query_stock_orders(acc)
print("所有委托:", len(orders))
if len(orders) != 0:
print("最终委托:")
print("{0} {1} {2}".format(orders[-1].stock_code, orders[-1].order_volume, orders[-1].price))
trades = xt_trader.query_stock_trades(acc)
print("所有交易:", len(trades))
if len(trades) != 0:
print("最终成交:")
print("{0} {1} {2}".format(trades[-1].stock_code, trades[-1].traded_volume, trades[-1].traded_price))
positions = xt_trader.query_stock_positions(acc)
print("持仓:", len(positions))
if len(positions) != 0:
print("所有持仓:")
print("{0} {1} {2}".format(positions[-1].account_id, positions[-1].stock_code, positions[-1].volume))
position = xt_trader.query_stock_position(acc, stock_code)
if position:
print("持仓:")
print("{0} {1} {2}".format(position.account_id, position.stock_code, position.volume))
xt_trader.run_forever()
上述测试代码执行下来,一直提示交易账户参数不能为空,能查询账户余额之类都没问题。如下所述,求解。
开始运行
<xtquant.xttype.StockAccount object at 0x00000260A764F9B0>
0
135266310
委托失败
135266310 10 限价买入 [SH600000] 功能入参[交易账户]不能为空
0
资产:
可用资金 100000.0
所有委托: 0
所有交易: 0
持仓: 0