12. 模擬實盤中的風控與 Broker 適配(雙路徑)

本教程通過兩條完整路徑,帶你在模擬實盤中驗證 S1.3 的關鍵行爲:

  • 路径 A:asset_type='E' + simulator

  • 路径 B:asset_type='FD' + simulator

目標是“跑通 + 觀測 + 驗證”,而不是隻看概念。

12.1. 0. 教程目标

  • 跑通兩條路徑(E 與 FD)

  • 人工觸發一次拒單並定位原因

  • 觀察分批成交狀態從 partial-filledfilled 的可見行爲

12.2. 1. 前置准备

  • 已有可運行的 Operator

  • 本地數據可支持運行頻率

  • 已配置 live 賬戶參數

建議先準備一個“可穩定觸發拒單”的規則配置(例如較小的單筆數量上限),便於復現實驗。

12.3. 2. 路径 A:E + simulator

步驟 1:設置配置

import qteasy as qt

qt.configure(
    mode=0,
    asset_type='E',
    live_trade_broker_type='simulator',
    live_price_acquire_channel='eastmoney',
    live_price_acquire_freq='15MIN',
)

步驟 2:啓動運行

qt.run(op)

步驟 3:提交一筆測試訂單並觀察反饋

  • 關注是否出現提交成功提示

  • 關注是否出現風控拒單提示(英文)

  • 記錄一次訂單 ID(後續對照日誌)

12.4. 3. 路径 B:FD + simulator

步驟 1:切換資產類型配置

import qteasy as qt

qt.configure(
    mode=0,
    asset_type='FD',
    live_trade_broker_type='simulator',
    live_price_acquire_channel='eastmoney',
    live_price_acquire_freq='15MIN',
)

步驟 2:重複啓動與下單

qt.run(op)

步驟 3:驗證行爲一致性

  • FD 路徑應可進入 live 運行鏈路

  • 拒單/提交/日誌的觀察方式與 E 路徑一致

  • 同一類訂單在兩條路徑下應有一致的反饋語義

12.5. 4. 人工触发一次风控拒单

建議臨時設置嚴格規則(如單筆數量上限),提交超限訂單。 你應看到類似英文提示:

Order rejected by risk rule [MAX_ORDER_QTY]: order quantity exceeds limit

並可在 risk_log 中檢索到對應記錄。

建議至少驗證兩次:

  1. 一次被拒(確認拒因可見)

  2. 一次放行(確認策略可繼續運行)

12.6. 5. 观察订单状态变化

重點觀察是否出現:

  • submitted -> partial-filled -> filled

在分批成交場景中,最終狀態應與累計成交量一致。

如果你看到了 partial-filled 長時間不變,請回到排錯頁按“狀態理解偏差”劇本覈對日誌。

12.7. 6. 教程验收清单

  • E 路徑可運行

  • FD 路徑可運行

  • 可觸發並識別風控拒單

  • 可在日誌中定位拒單原因

  • 可觀察並理解分批成交狀態變化

  • 至少完成一次“拒單 -> 調整參數 -> 放行”閉環驗證

12.8. 7. 下一步

  • 深入機制:live_trading/3-risk-and-order-lifecycle

  • 扩展 Broker:live_trading/4-broker-adapter-and-integration

  • 排錯手冊:live_trading/5-artifacts-and-troubleshooting

12.9. 8. 结果判定标准

當你完成本教程後,應能獨立回答以下問題:

  • 當前訂單是被風控拒絕,還是已提交但未成交?

  • 爲什麼某筆訂單會停留在 partial-filled

  • 需要去哪個日誌文件先看、再看什麼字段?

若以上三題都能獨立回答,說明你已經具備 live 場景下的基本排錯能力。