feedback
← 回到目錄

什麼是交易訊號

量化策略的最小單位——以及它跟大多數人想的不一樣的地方。

訊號是規則,不是預測

交易訊號不是預測。它是把一條規則套用到市場資料後,產生的二元決策。在任何一根 K 棒,這條規則只輸出三種值:

意義
1.0持有多頭部位
0.0空手(flat)
NaN維持上一根 K 棒的部位不變

就這樣。策略不是在「預測」未來——它是定義一套系統性規則,決定什麼時候進場、什麼時候出場。

從訊號到成交:四個階段

很多人會把這幾個階段搞混。訊號實際上是這樣一步步變成交易所裡的成交單:

1
指標(Indicator)

從價格或成交量算出的原始數值。例如:SMA(20) = 42,300、SMA(50) = 41,800。

2
訊號(Signal)

把規則套在指標上,得出 1.00.0。例如:SMA_fast > SMA_slow → signal = 1.0。

3
目標部位(Position)

Runner 把訊號轉換成資金配置。例如:signal = 1.0 → 投入 100% 資金做多。

4
成交(Trade)

Reconciler 比較目標部位和實際部位的差異,送出委託單補足缺口。

為什麼要在下一根 K 棒開盤執行?

BlaveClaw Type A 策略的訊號是在第 T 根 K 棒收盤時計算,但委託是在第 T+1 根 K 棒開盤時送出。這不是限制,是刻意設計的。

前視偏差(Lookahead Bias)的坑: 如果你用第 T 根 K 棒的收盤價計算訊號,卻馬上在這根 K 棒的收盤價成交,等於在回測裡用了「未來資料」。收盤價只有在這根 K 棒結束後才知道。在下一根 K 棒開盤成交,才是真實可執行的模型。

實際上,對 BTCUSDT 這類流動性高的市場,1h 週期的下一根開盤滑點通常很小。流動性差的資產就不一定了——回測時永遠要誠實地把手續費和滑點算進去。

三種常見訊號型態

交叉(Crossover)

兩條線互相穿越。快線在慢線上方做多,快線在慢線下方空手。SMA 黃金交叉、MACD 訊號線交叉都屬這類。

signal = 1.0 if SMA_fast > SMA_slow else 0.0

門檻(Threshold)

單一指標穿越某個水位。超過進場門檻做多,低於出場門檻離場。中間設「死區」,避免在臨界點反覆進出。

signal = 1.0 if TI > 1.69 else (0.0 if TI < -0.45 else NaN)

濾網(Regime Filter)

用第二個指標過濾主要訊號,只有在市場環境有利時才進場。可以大幅減少震盪行情的假訊號。

signal = primary_signal if market_dir > 0 else 0.0

真實範例:BTC SMA Cross

btc_sma_cross 是最簡單的 Type A 策略範例:

def compute_signals(df):
    signal = pd.Series(np.nan, index=df.index)
    golden = (df['SMA_F'] > df['SMA_S'])   # 快線穿越慢線上方
    death  = (df['SMA_F'] < df['SMA_S'])   # 快線穿越慢線下方
    signal[golden] = 1.0   # 做多
    signal[death]  = 0.0   # 空手
    return signal

在兩條 SMA 都還沒有足夠歷史資料時(熱身期),訊號是 NaN,BlaveClaw 不持倉。第一次交叉發生後,就根據規則在多頭和空手之間切換。

下一步: 了解訊號之後,自然會想問:怎麼知道一個訊號真的有效?這就是回測要回答的問題。閱讀 回測報告怎麼看 →
← 回到目錄