股票与 ETF
方法速查与排查
股票与 ETF 回测策略常用方法一览及结果确认方式,以及没有订单、订单被拒、有订单无成交、买入后卖不出、融资融券失败等常见问题的排查方法。
一、方法速查
| 使用场景 | 方法或对象 | 结果如何确认 |
|---|---|---|
| 读取当前行情 | data[symbol] |
检查空值及价格有效性 |
| 读取资金持仓 | context.stock_account_dict[account] |
cash、total_value、positions |
| 按股/份买卖 | order_shares |
二级订单列表及订单、成交回调 |
| 按金额买卖 | order_values |
同上;传入金额不是保证的成交金额 |
| 全账户目标调仓 | target_stock_group_order |
返回 None,观察逐笔回报 |
| 撤二级订单 | cancel_order |
返回 None,观察订单与撤单回报 |
| 申购 ETF | purchase |
单个一级订单及申赎回调 |
| 赎回 ETF | redeem |
单个一级订单及申赎回调 |
| 撤一级申请 | cancel_etf_cr_order |
布尔值及一级撤单回调 |
| 融资买入、融券卖出 | financing_buy、securities_lending_sell |
二级订单列表及回报 |
| 卖券还款、买券还券 | sell_repayment、buy_to_cover |
成交回报后查询负债 |
| 直接还款、直接还券 | repay_financing、return_securities |
实际还款金额或还券数量,再查信用快照 |
| 查询信用业务 | get_margin_snapshot |
字典,先检查 enabled |
「订单受理」「实际成交」「全部交收」是三种不同的结果,分别用对应的回报判断。
二、没有交易时怎么查
按顺序依次看:信号是否触发 → 行情是否有效 → 委托是否返回 → 订单状态和原因 → 成交回报 → 当前资产。申赎另外看 stage;两融另外看 risk_state、券源和债务。
三、常见问题
| 现象 | 检查方法 |
|---|---|
| 没有订单 | 检查账户市场、完整代码、行情价格、执行标记、时间条件;记录下单返回值是否为空 |
| 订单被拒 | 打印 order.message;核对资金、费用、整数股数、最小申报量、可卖数量和信用条件 |
| 有订单但无成交 | 检查终态、成交量和限价;以 on_stock_trade_rtn 和持仓变化确认实际成交 |
| 买入后卖不出 | 查询 sellable,检查是否同日买入、是否冻结、是否有未完成委托 |
| 分钟任务连续报相同订单 | 在下单前记录交易日和意图;用订单回调清理未完成状态 |
| 因子为空时被误清仓 | 保留「数据不足」的状态,只有成功产生目标组合后才执行调仓 |
| 融资启用但买入失败 | 检查任务授信是否大于 0、标的是否在两融名单、现金担保与费用是否足够 |
| 融券失败或还券失败 | 分别检查券源、欠券数量、未完成委托的预占和可交付现券;普通多头持仓不代表有券可借 |
| 卖出后仍有融资余额 | 查询实际卖出净收入、本金和利息;普通卖出与卖券还款用途不同 |
| 看见强平状态但债务未归零 | 检查强平委托和实际成交,保留未成交债务,不要自行把余额改成零 |
| 一级申请一直不完成 | 看 stage 与 reason;检查任务是否有实际确认交收资料、额度是否足够、清单最小单位是否变化 |
四、日志怎么打
日志用 print,优先记录交易日期、代码、订单号、状态、实际成交数量和错误原因。空行情、空因子属于可以显式处理的分支;参数错误和字段错误应保留原异常,便于定位。
策略代码只使用任务提供的 API 和数据对象,把运行状态保存在 context 里;初始资金、授信、券源和风险条件始终由任务配置提供。
