已经在用 QMT,持仓和异常怎么盯
已经开了 QMT,策略也在跑,下一步常常是:「持仓变了谁通知我?废单了怎么知道?」
这是工程记录。只谈怎么把持仓打出来、异常打日志、提醒往哪接。不是代盯盘,也不是保证你盘中一定看得到。不构成投资建议,不代操盘。
手册:查持仓和资金 · get-trade-detail-data · 委托回调
先分清两件事
- 对账: 策略进程里打印资金、持仓、委托、成交。这是 QMT 里就能做的。
- 提醒: 发到微信 / 企业微信。QMT 编辑器不负责「自动推到你手机」,要另接通道。PTrade 托管里有
send_qywx,QMT 常见是自己写 HTTP 或邮件,令牌不要写进正文。
电脑关机、断网,本机 QMT 上的策略会停。要人不在家也跑,看券商 PTrade 托管,不是再买一台永远开机的承诺。
分几步(本机对账)
init里set_account。- 定时或
handlebar最后一根,取ACCOUNT/POSITION/ORDER/DEAL。 - 字段用
m_前缀。版本不同名字可能略差,空了就dir(obj)。 - 可用数量、废单状态打到日志。不要把打印出来的数字直接当买卖指令。
python
#coding:gbk
def init(C):
try:
C.acc = account
C.acct_type = accountType
except NameError:
C.acc = ''
C.acct_type = 'STOCK'
C.set_account(C.acc)
def handlebar(C):
if not C.is_last_bar():
return
accts = get_trade_detail_data(C.acc, C.acct_type, 'ACCOUNT') or []
poss = get_trade_detail_data(C.acc, C.acct_type, 'POSITION') or []
if accts:
a = accts[0]
print('available', getattr(a, 'm_dAvailable', None))
for p in poss:
print(getattr(p, 'm_strInstrumentID', ''),
'vol', getattr(p, 'm_nVolume', None),
'can', getattr(p, 'm_nCanUseVolume', None))
def order_callback(C, orderInfo):
print('order', getattr(orderInfo, 'm_strInstrumentID', ''),
getattr(orderInfo, 'm_nOrderStatus', ''),
getattr(orderInfo, 'm_nVolumeTraded', 0))废单、部成、全成,以柜台状态为准。回调怎么写见 委托回调。
提醒怎么接
- PTrade: 托管机在券商机房,适合做无人值守。企业微信用
send_qywx,企业可信 IP 等限制以官方说明为准。 - QMT: 跑在你家电脑。提醒要另写接口,只监听本机,不要把下单接口暴露到公网。miniQMT 停了以后的本机桥见 本机 HTTP 桥。
- 令牌、企业微信 secret 放文件,不要贴到策略正文和截图里。
容易卡住的地方
- 只看策略日志里的「已下单」,没对持仓,账会偏。
- 编辑器里点运行,常常没有真实委托,回调也不会来。
- 本机断网后,微信再及时也收不到新成交。
- 我们不代盯盘、不代操盘。提醒通道接好了,仍要你自己看账户。
搞不定时
对账字段对照见 查持仓和资金。需要接到微信或改策略,公众号留言 策略代写。问答走 知识星球。
完整讨论和附件在 知识星球 Kimi量化研究所。
