
ICT Order Block 信號引擎完整教學:從理論到 10 項增強、從回測到實盤對齊
完整教學文章:將 ICT Order Block 交易理論用 Python 向量化實現,配合 10 項比原始 PineScript 更強嘅增強項目(雙向 OB、mitigation 追蹤、ATR 動態 SL、量能確認、Displacement、FVG、EMA 趨勢、時段過濾、新鮮度評分、區域評分)。涵蓋 Brain + Hands 混合架構、StrategyConfig 參數全集、BacktestEngine 同 LiveEngine 嘅一致性保證。
點解要寫呢篇文?
今時今日量化交易嘅入場門檻低咗好多 — 一台機、一份歷史數據、一段 PineScript / Python 就可以跑 backtest。但門檻低唔代表容易贏錢。大部分自己寫嘅策略,落到實盤都係輸。
我喺 signals_module.ict_ob 入面寫咗一個信號引擎,目標係將 「ICT Order Block」呢套結構性交易理論,用 Python 向量化實現出嚟,並且做咗 10 項比原始 PineScript 更強嘅增強。呢篇文係一份 完整教學:你讀完之後,應該能夠
- 講清楚咩係 Order Block(OB)、點解佢可以預測反轉
- 知道呢個引擎由邊兩層組成(Brain + Hands)以及點解要分
- 列出 10 個增強項目同埋每個解決咗咩問題
- 自己改
StrategyConfig嘅參數、做 backtest、睇結果 - 知道實盤部分點由 MT5 接入、點保證同回測一致
成篇文會用 XAUUSD(M5)做主場景 — 因為呢個引擎就係為黃金交易設計嘅。
本文對應源碼:signals_module.ict_ob/重點文件:signals.py(信號生成),config.py(策略參數),backtest/engine.py(回測),live/engine.py(實盤)
1. 背景:XAUUSD 同算法交易
XAUUSD 即係倫敦 / 紐約場內交易嘅現貨黃金(以美元計價)。佢同一般股票好唔同:
- 24 小時交易(週一至週五,幾乎無停)
- 點差小、流動性高(倫敦 + 紐約合併時段)
- 波動大(單日 ±20-50 美元好常見)
呢啲特性令 XAUUSD 好適合用 M5(5 分鐘 K 線)做短線策略,亦都係 ICT Order Block 呢套結構性理論最常見嘅應用對象。

黃金嘅長線升值趨勢,加上 M5 級別嘅短線波動,提供咗一個 「順大趨勢、抓短線回測」 嘅天然策略舞台。
1.1 點解要自己寫?
| 方法 | 優點 | 缺點 |
|---|---|---|
| TradingView 內建指標 | 零代碼 | 唔可以自己改、唔可以實盤自動下單 |
| 第三方 EA(MT5) | 即裝即用 | 黑盒、唔透明、收費、未必對應你嘅風控 |
| 自己寫 Python | 完全控制、可以迭代、可以同研究流程對接 | 需要寫碼、要有嚴格嘅回測紀律 |
呢個引擎屬於第三種。底層邏輯 100% 公開;想改任何一行(例如想加入宏觀新聞過濾、想用 M1 改做 H1),都可以喺幾分鐘內改完再 backtest。
算法交易嘅本質唔係「電腦幫你揀股」,而係 「將你嘅交易規則變成可以重複執行嘅代碼」。

2. 咩係 Order Block(OB)?
呢個理論源自 ICT(Inner Circle Trader)。核心觀念:
當一筆大資金(機構、莊家)想喺某個位置快速買入或賣出,佢哋會留低一組特殊嘅 K 線。
之後價格回測呢個區域嘅時候,往往會再次被呢筆資金承接 — 呢個區域就叫做 Order Block。
OB 同傳統 Support / Resistance(支撐 / 阻力)好相似,但有兩個關鍵分別:
- OB 係由「特定 K 線結構」識別出嚟,唔係由主觀判斷劃線
- OB 有「壽命」 — 被突破之後就失效(叫做 *Mitigation*),唔可以再用

Order Block 係「有根有據」嘅支撐阻力 — 唔係畫一條線就當係位。
2.1 兩種 OB
| 類型 | 別名 | 結構 | 用途 |
|---|---|---|---|
| Bullish OB | Demand OB(需求區) | Pivot Low(局部最低)→ 之前最近一根 Bearish(陰)K 線 | 等待價格回測,做多 |
| Bearish OB | Supply OB(供應區) | Pivot High(局部最高)→ 之前最近一根 Bullish(陽)K 線 | 等待價格回測,做空 |
#### Bullish OB 嘅「Base Candle」範例
所謂 Base Candle,意思係「OB 嘅邊界由呢根 K 線定義」。Bullish OB 嘅 Base Candle 一定係一根 陰燭(close < open),因為佢代表「跌市入面最後一擊」。

引擎入面就係用類似嘅邏輯:偵測到 Pivot Low 之後,向前搜尋最多 5 根 K 線,搵最近嘅一根陰燭做 Base Candle。
#### Bearish OB 嘅 Base Candle 範例
Bearish OB 嘅 Base Candle 一定係一根 陽燭(close > open) — 代表「升市入面最後一擊」。

2.2 點樣量化「找 OB」呢個動作?
PineScript 嘅 ta.pivothigh() / ta.pivotlow() 函數喺 Python 必須自己寫。我哋嘅實現(見 signals.py):
def _detect_pivot_high(highs, left=2, right=2):
# bar i 為 Pivot High 若其 high 嚴格大於左 left 根 + 右 right 根嘅 high
# 喺 i + right 嗰根(確認 bar)先返回值
# 其餘 bar 為 NaN
...呢個函數係 O(n × (left + right)),全向量化,200K 根 K 線大約 0.5 秒。
3. 引擎架構:Brain + Hands
呢個引擎採用 混合架構(Hybrid Architecture):
- Brain(大腦層) —
signals.py
- 純函數、無狀態、向量化
- 輸入 DataFrame,輸出帶信號嘅 DataFrame
- 回測同實盤 共用同一份代碼
- Hands(執行層) —
backtest/engine.py+live/engine.py
- 物件導向、有狀態、逐 bar 迭代
- 處理訂單、持倉、摩擦成本
- 兩種引擎分別對應回測同實盤
MT5 / CSV Data
↓
┌───────────────────────────────┐
│ Brain (signals.py) │
│ prepare_data() │
│ detect_order_blocks() │
│ generate_signals() │
│ ─── 純函數、無狀態 ─── │
└──────────┬────────────────────┘
↓ DataFrame with signal/sl/tp
┌──────────┴────────────────────┐
│ Hands │
│ ┌─ BacktestEngine (回測) │
│ │ • 逐 bar 模擬成交 │
│ │ • 計算手續費 + 滑點 │
│ │ • 統計勝率、Sharpe、MDD │
│ └─ LiveEngine (實盤) │
│ • POST 訂單到 trading API │
│ • MT5 持倉超時自動關倉 │
└───────────────────────────────┘3.1 點解要分 Brain 同 Hands?
呢個係呢個引擎嘅 最重要嘅架構決定。原因有三:
- 可測試性 — Brain 係純函數,可以喺 Jupyter 一步步驗證;Hands 係 I/O 邊界,最難寫 test,所以要 keep 佢薄
- 一致性保證 — 回測同實盤調用同一份
generate_signals(),保證行為 100% 一致 - 效能優化空間 — Brain 可以用 numpy/pandas 全面向量化;Hands 必須逐 bar 迭代(模擬真實成交),所以佢哋嘅優化策略完全唔同
設計原則:The Brain 不持有任何狀態,The Hands 不做任何指標計算。
4. 信號生成流程(Brain 層)
成個 Brain 層分三步,每步都係一個獨立函數。
4.1 `prepare_data()` — 計算技術指標
輸入原始 OHLCV DataFrame,輸出加咗以下列嘅 DataFrame:
| 指標 | 公式 / 來源 | 用途 |
|---|---|---|
atr | 14 期真實波幅均值 | 動態止損 / OB 大小評分 |
rsi | 14 期相對強弱指數 | RSI 過濾(預設關閉) |
ema_fast | 50 期 EMA | 趨勢過濾(短期) |
ema_slow | 200 期 EMA | 趨勢過濾(長期) |
vol_ma | 20 期成交量均線 | 量能過濾 |
全部用 pandas / numpy 計算,唔使用 for 迴圈,100K 根 K 線 < 1 秒。
4.2 `detect_order_blocks()` — 偵測 OB
呢一步係 PineScript 邏輯嘅 Python 化,並且 做咗 1 個關鍵增強:雙向偵測。
原始 PineScript 只偵測 Bearish OB(睇空機會)。本引擎加埋 Bullish OB(睇多機會),兩個都用同一套 pivot 偵測邏輯:
| 流程 | Bearish OB | Bullish OB |
|---|---|---|
| 1. 偵測 Pivot | ta.pivothigh 確認 bar | ta.pivotlow 確認 bar |
| 2. 向前搜尋 Base Candle | 最近嘅 陽燭(close > open) | 最近嘅 陰燭(close < open) |
| 3. OB 邊界 | Top = Pivot High, Bottom = Base Candle Low | Top = Base Candle High, Bottom = Pivot Low |
| 4. 用途 | 之後價格回測,做空 | 之後價格回測,做多 |
搜尋窗口由 base_candle_search 參數控制(預設 5),即係最多向前 5 根 K 線搵 Base Candle。搵唔到就放棄,唔會強行用更遠嘅 K 線。
4.3 `generate_signals()` — 生成交易信號
最複雜嘅一步。逐 bar 迭代,根據當前價、活躍 OB 列表、各過濾器決定出唔出信號。
for i in range(start_i, n):
atr_val = atr_arr[i]
# 1. OB 失效檢查(mitigation)
# 2. OB 過期檢查
# 3. 趨勢過濾
# 4. 時段過濾
# 5. 成交量過濾
# 6. RSI 過濾
# 7. Displacement 過濾
# 8. 做多:價格回測活躍 Bull OB 區域
# 9. 做空:價格回測活躍 Bear OB 區域呢個迴圈表面睇似 O(n × active_OB_count),但因為:
- 用 numpy 預提取列(避免
df.iloc[i]嘅 Series 開銷) - OB 列表喺每次失效 / 過期時都會 shrink
- 早停:一旦該 bar 出咗做多信號,就唔再嘗試做空
200K 根 K 線嘅 M5 數據(≈ 2 年)全跑一次,30 秒 → < 1 秒。
5. 10 項增強(相比原始 PineScript)
呢個引擎相比原本 PineScript 嘅版本,做咗 10 項有意義嘅增強。每一項都係為咗解決一個具體嘅交易問題,唔係為加而加:
| # | 增強 | 解決咗咩問題 |
|---|---|---|
| 1 | 雙向 OB 偵測 | 原本只有 Bearish OB,無法做多 |
| 2 | OB Mitigation 追蹤 | 被突破嘅 OB 自動失效,避免喺失效 OB 入市 |
| 3 | ATR 動態止損 | 唔同波動環境用唔同 SL,比固定點數合理 |
| 4 | 成交量確認 | 過濾「無量」假突破,量能配合先入場 |
| 5 | Displacement 過濾 | 要求強勢動量 K 線確認 OB 真確性 |
| 6 | FVG 偵測 | 額外確認信號(Fair Value Gap = 跳空缺口) |
| 7 | EMA 趨勢過濾 | 順大勢做單,唔好逆流 |
| 8 | 交易時段過濾 | 避開亞洲早段 / 跨日薄時段 |
| 9 | OB 新鮮度評分 | 優先交易未受測試嘅 OB |
| 10 | OB 區域評分系統 | 綜合評估 OB 質量,分數低過門檻就唔做 |
5.1 OB 評分系統(重點講)
呢個係最實用嘅增強。_score_ob() 函數將 OB 質量量化為 0-1 分數,由四個維度加權:
| 維度 | 比重 | 計算 |
|---|---|---|
| 大小(相對 ATR) | 0.3 | 0.5-2.0 ATR 最佳,太細或太大都扣分 |
| 量能 | 0.3 | 量大過 1.5× 均量 = 滿分 |
| 新鮮度 | 0.2 | 越新越高分,超過 ob_max_age 為 0 |
| 距離 | 0.2 | 距離當前 bar 越近越高分 |
最低分數門檻由 min_ob_score 控制(預設 0.3)。分數低過門檻嘅 OB 直接跳過,唔考慮入單。
評分系統嘅好處:將「呢個 OB 睇起上來 OK 唔 OK」呢個主觀判斷,變成一個 0-1 嘅數字。Backtest 嗰陣可以單獨比較「分數 > 0.6 嘅 OB」嘅勝率,量化驗證邊類 OB 真係比較好。
5.2 增強項目嘅開關
所有 10 項增強都係 可開可關。StrategyConfig 入面有對應 bool 參數,預設值如下:
use_displacement_filter = True # ON — 預設開
use_fvg_filter = False # OFF — 預設關(信號太疏)
track_mitigation = True # ON
use_ob_scoring = True # ON
use_trend_filter = True # ON
use_session_filter = True # ON
use_rsi_filter = False # OFF
use_volume_filter = True # ON想做 A/B 測試?用--no-scoring跑一次 backtest,再用預設跑一次,比較兩個結果。run.py嘅 CLI flags 全部對應呢啲參數。
6. `StrategyConfig`:所有可調參數
呢個 dataclass 集中管理所有策略參數,回測同實盤共用同一份設定,避免「回測贏錢、實盤輸錢」嘅常見陷阱。
6.1 信號參數
| 參數 | 預設 | 範圍建議 | 影響 |
|---|---|---|---|
pivot_left_bars | 2 | 2-5 | 越大越少 OB,OB 越重要 |
pivot_right_bars | 2 | 2-5 | 越大越延遲確認,但 OB 越穩 |
base_candle_search | 5 | 3-10 | 越大越容易搵到 Base Candle,但可能搵到太舊嘅 |
reward_ratio | 2.0 | 1.5-3.0 | 2.0 = 賺 2 倍先走 |
sl_atr_coeff | 1.0 | 0.5-2.0 | SL 離 OB 邊界幾多個 ATR |
ob_max_age | 50 | 20-100 | 超過幾多根 K 線 OB 就算過期 |
6.2 過濾器開關
(見上節 5.2)
6.3 執行參數(Hands 層)
| 參數 | 預設 | 影響 |
|---|---|---|
initial_capital | 100,000 | 起始資金(回測用) |
commission_rate | 0.0002 | 萬分之二手續費率 |
slippage | 1.0 | 滑點(以 XAUUSD 計即係 $1) |
max_holding_bars | 50 | 超時強制平倉(5min × 50 = 4 小時多) |
position_size | 0.01 | 每單 0.01 手(即 1 微型手) |
啟用實盤前,記得係dry_run = True跑一兩日,確認信號出嘅頻率、SL/TP 嘅距離都係你想要嘅。signal_ob_score欄位會寫入實際 OB 評分,dump 出嚟對圖睇非常有幫助。
7. Backtest 引擎(Hands — 回測)
BacktestEngine 接收信號 DataFrame,逐 bar 模擬真實交易。重點設計:
7.1 訂單生命週期
@dataclass
class Order:
direction: int # 1 = 做多, -1 = 做空
entry_price: float # 入場價(已加滑點)
sl_price: float
tp_price: float
exit_price: float = 0.0
exit_bar: int = 0
exit_reason: str = "" # 'SL' / 'TP' / 'TIMEOUT' / 'CLOSE'
pnl: float = 0.0 # 已扣手續費 + 滑點
ob_type: str = "" # 'BULL' / 'BEAR'
ob_score: float = 0.0每一筆交易都係一個 Order 物件,記錄 入場、出場、盈虧、原因、對應 OB 資料。get_trades_df() 會將全部訂單轉成 DataFrame,方便 dump 出嚟做後期分析。
7.2 出場優先順序
逐 bar 檢查出場條件,嚴格優先順序:
1. 止損(SL) — 即刻出場,最高優先
2. 止盈(TP) — 即刻出場
3. 超時 — 持倉超過 max_holding_bars 強制平倉
4. 反向信號 — ⚠️ 當前版本唔支持加倉或反手注意:當同一根 bar 同時觸及 SL 同 TP(極端行情),會先當 SL 出場(悲觀假設),呢個係回測最常見嘅偏差源之一。真實市場可能會成交喺 SL 同 TP 之間嘅中間價。
7.3 績效指標
get_results() 自動計算:
| 指標 | 公式 / 解釋 |
|---|---|
| 總交易次數 | N 筆 |
| 勝率 | 賺錢筆數 / 總筆數 × 100% |
| 多空勝率 | 分別計算做多、做空嘅勝率 |
| 獲利因子(PF) | 總賺 / 總賠,越大越好(> 1.5 為合格) |
| 最大回撤(MDD) | 權益從最高點跌落嘅最大幅度(百分比) |
| 夏普比率 | 年化(× √24192 bars for M5) |
| 平均持倉 K 線數 | 平均持倉時間(M5 數) |
| 平均 OB 評分 | 進場 OB 嘅平均質量分數 |
想知策略有冇 overfit? 將 M5 數據切兩段(前 70% 做訓練,後 30% 做驗證),比較兩段嘅 PF 同 Sharpe。如果差距大過 30%,好大機會 overfit。
7.4 摩擦成本
回測一定要加 手續費 + 滑點,否則勝率會被高估。
呢個引擎每筆交易計兩次手續費(開倉 + 平倉),仲會根據方向加滑點:
- 做多入場:
close + slippage(悲觀假設) - 做多出場:SL/TP 價原值(已是最壞價)
- 做空入場:
close - slippage - 做空出場:SL/TP 價原值
XAUUSD 0.01 手嘅單,手續費加滑點大約 $0.3-0.5。如果平均 PnL 唔夠呢個數,策略基本上唔可能賺錢。
8. 實盤引擎(Hands — 實盤)

LiveEngine 繼承 LiveEngineBase,共享 MT5 連接、主循環、bar 時間追蹤等基礎設施。佢只負責 ICT OB 策略特有嘅嘢:
8.1 與回測嘅對齊保證
| 項目 | 回測 | 實盤 |
|---|---|---|
| Brain 函數 | prepare_data / detect_order_blocks / generate_signals | 同一份 |
StrategyConfig | 同一份 | 同一份 |
| SL / TP 計算公式 | sl = ob_bottom - sl_atr_coeff × atr | 同一條公式 |
| 所有過濾器 | 由 use_* flags 控制 | 同樣 flags |
回測贏錢 + 實盤輸錢 = 99% 係因為回測同實盤嘅邏輯唔一致。呢個架構嘅核心承諾就係「消除呢類偏差」。
8.2 實盤主循環
while True:
if new_bar_formed():
df = mt5.copy_rates_from_pos(symbol, M5, 0, lookback_bars)
df = prepare_data(df, **cfg.get_prepare_kwargs())
df = detect_order_blocks(df, **cfg.get_signal_kwargs())
df = generate_signals(df, **cfg.get_signal_kwargs())
signal = df.iloc[-1]["signal"]
if signal != 0 and not has_position():
send_signal(signal, sl, tp) # POST 到 trading API
time.sleep(poll_interval)每 poll_interval 秒(預設 5)檢查一次有冇新 M5 bar 形成,有就先 call 一次 Brain,最後一根嘅 signal 唔等於 0 就出單。
8.3 強制測試模式
StrategyConfig 內有兩個測試專用參數:
force_signal: bool = False
force_direction: str = "BUY"設 force_signal = True 之後,第一根新 bar 會自動發送一個合成的 force_direction 信號(無視所有 OB 偵測)。用嚟測:
- trading API 通訊有冇問題
- MT5 訂單執行流程通唔通
- 風險管理(持倉上限、單筆金額上限)有冇生效
正式上線前一定要 set dry_run = True 跑 2-3 日,期間唔會真出金,但所有信號同訂單 log 都會寫入。9. 點樣自己跑一次
9.1 環境準備
# 確保用 native Python 3.10
& "C:\Users\Rick\AppData\Local\Programs\Python\Python310\python.exe" -m pip install MetaTrader5 pandas numpy9.2 跑回測
# 用模擬數據(預設)
& "C:\Users\Rick\AppData\Local\Programs\Python\Python310\python.exe" -m signals_module.ict_ob.backtest.run
# 用真實 MT5 數據
& "C:\Users\Rick\AppData\Local\Programs\Python\Python310\python.exe" -m signals_module.ict_ob.backtest.run --data data/data_XAUUSD_M5.csv
# 調整盈虧比
& "C:\Users\Rick\AppData\Local\Programs\Python\Python310\python.exe" -m signals_module.ict_ob.backtest.run --reward-ratio 3.0
# 關閉部分過濾器做 A/B 測試
& "C:\Users\Rick\AppData\Local\Programs\Python\Python310\python.exe" -m signals_module.ict_ob.backtest.run --no-displacement --no-scoring9.3 跑實盤
# 預設 dry_run = True(推薦先用呢個跑 2-3 日)
& "C:\Users\Rick\AppData\Local\Programs\Python\Python310\python.exe" -m signals_module.ict_ob.live.run
# 真實出金模式(⚠️ 真錢)
& "C:\Users\Rick\AppData\Local\Programs\Python\Python310\python.exe" -m signals_module.ict_ob.live.run --no-dry-run9.4 結果點睇
跑完 backtest 之後,get_results() 會 print 一個矩陣。重點睇呢 4 個數字:
總交易次數 → < 50 = 樣本太少,結論唔可靠
勝率 → > 45% + PF > 1.3 = 初步合格
最大回撤 (MDD) → < 20% = 風控合格
夏普比率 → > 1.0 = 風險調整後回報合理⚠️ 任何一項唔合格都唔好上實盤。M5 嘅 1-2 年數據,回測出嚟 PF < 1.2、Sharpe < 0.8 嘅策略,落到實盤 99% 會輸。
10. 點樣自己改呢個引擎
引擎嘅設計鼓勵兩類修改:
10.1 加新過濾器
最常見嘅修改。例如想加「外匯新聞事件過濾」:
- 喺
StrategyConfig加use_news_filter: bool = False - 喺
generate_signals()加一段(接收新聞日曆 DataFrame 做額外 input) - 唔通過就直接
continue
呢個改動只影響 Brain 層,Hands 層完全唔使動。
10.2 換時間框架
預設係 M5。想試 M15 / H1:
StrategyConfig.symbol同timeframe改值- 重新 backtest 一次(唔使改代碼)
- 留意
ob_max_age、pivot_left_bars等需要按 TF 比例調整
例如 M15 嘅 ob_max_age 應該由 50 改成 17(約等於 M5 × 50 / 15 ≈ 167 K 線 / 15 ≈ 11,實際 17-25 比較好)。
10.3 加新出場規則
例如想加入「移動止損(Trailing Stop)」:
- 喺
BacktestEngine._check_exit()加新條件 - 計算 trailing SL(例如每根 bar 將 SL 移近 entry + 0.5× ATR)
- 重新 backtest,比較結果
⚠️ 改 Hands 層嘅嘢要特別小心 — backtest 同實盤嘅偏差最容易從呢度產生。改完一定要喺 dry_run = True 嘅實盤跑幾日。11. 常見陷阱
11.1 Look-Ahead Bias(偷看未來)
規則:Brain 層所有計算,必須只用第 i 根同之前嘅數據。
呢個引擎已經嚴格遵守(所有 numpy 提取都係 [i],唔係 [i+1])。但如果你自己加新功能(例如想用「下一根 K 線嘅 high 嚟做 SL」),就會破壞呢個保證。
11.2 Overfit
最容易中招嘅地方係 StrategyConfig 調參。如果你係 backtest 完之後再改參數、再 backtest、再改⋯⋯ 跑 100 輪之後揀最好嗰個,咁個結果係 揀選偏差(selection bias),唔係真實表現。
好習慣:用 walk-forward 驗證。將數據切成多段,每段用前段做訓練、後段做驗證,最後攞全部驗證段嘅平均結果。
11.3 信號太疏 / 太密
如果 generate_signals() 跑出嚟 100 根 K 線先出一個信號,統計意義唔夠。
如果 10 根 K 線就出 5 個信號,過度交易、手續費食晒。
理想頻率(XAUUSD M5 一年數據):
- 出信號:~ 100-300 筆
- 平均持倉:~ 10-30 根 K 線(50-150 分鐘)
11.4 LiveEngine 同 BacktestEngine 行為唔一致
如果發現實盤表現明顯差過回測,第一步就係 dump 實盤最後 50 根 K 線出嚟,跑一次 backtest 比較。99% 嘅時候你會發現:
- 數據有 NaN
- 時間窗口唔同
- 有交易時段被 skip
- 某個過濾器喺實盤入面被關咗
12. 結語
呢個引擎嘅 真正價值 唔係「自動幫你賺錢」 — 任何聲稱可以嘅嘢都係騙局。真正價值係:
- 將一套交易理論完整代碼化,方便研究同迭代
- 嚴格分層架構,回測同實盤行為一致
- 10 項增強項目,每項都對應一個具體交易問題
- 可讀、可改、可審計 — 所有邏輯攤開喺 4 個 Python 檔案入面
寫算法交易系統,本質係寫一份 「你自己嘅交易決策書」。
如果你寫嘅代碼連你自己都睇唔明,咁個策略根本唔可能持續改進。
下一步可以做嘅事:
- 將呢個引擎 port 到 TradingView PineScript(用
mcp_tradingview_*tools 自動寫 + 測) - 將 M5 改做 M15,比較兩個 TF 嘅 Sharpe
- 加 walk-forward 驗證腳本,做更嚴格嘅樣本外測試
- 同 外匯新聞日曆 對接做事件過濾
記住:策略迭代係終身嘅事。呢個引擎只係起點,唔係終點。
⚠️ 免責聲明:本文章內容僅供學習參考,不構成任何投資建議。投資有風險,入市需謹慎。


