量化策略開發 — 從假設到生產
建立盈利的交易策略不僅僅依賴直覺。它需要可測試的假設、嚴格的回測和謹慎的優化以避免過度擬合。本指南將帶您從基本原理開始建立量化策略 — 這正是Smart Money API背後算法所採用的方法。
關鍵原則: 95%的交易者失敗是因為他們在樣本內數據上進行優化。一個在歷史數據上回報200%的策略在實際交易中很可能虧損。學會避免這個陷阱。
假設階段
從可證偽的聲明開始
每個策略都始於一個具體、可測試的假設。不是「比特幣有時會上漲」,而是「當資金費率為正且鯨魚多頭共識超過65%時,接下來的4小時K線收高的概率為56%」。
好的假設:
- "LSR > 1.2 + 正資金費率 = 接下來的5根K線看漲概率60%"
- "MVRV > 1.5(鏈上狂熱) = 預計72小時內反轉"
- "交易所流入激增 + LSR下降 = 短期弱勢,長期強勢"
不好的假設:
- "當鯨魚看漲時價格上漲"(過於明顯,不具預測性)
- "這種模式成功過5次"(缺乏統計嚴謹性)
- "每週一UTC時間10點買入"(過度擬合歷史特異性)
定義您的優勢
您知道 什麼是 市場尚未定價的?對於Smart Money API來說,它是:「鯨魚共識變化比散戶反應早2-4小時。如果我們實時追踪前250個錢包,我們可以提前行動。」
策略框架
1. 進場條件
何時進場?明確說明:
Python — 進場邏輯
# 策略:鯨魚共識 + 衍生品匯合
def should_enter_long(symbol, bar):
# 條件1:鯨魚多頭共識 > 65%
whale_long_pct = get_whale_consensus(symbol)
cond_whale = whale_long_pct > 0.65
# 條件2:資金費率為正且上升
fr_current = get_funding_rate(symbol)
fr_previous = get_funding_rate(symbol, offset=1)
cond_fr = (fr_current > 0) and (fr_current > fr_previous)
# 條件3:LSR > 1.25(多頭多於空頭)
lsr = get_long_short_ratio(symbol)
cond_lsr = lsr > 1.25
# 條件4:價格高於50日均線(上升趨勢背景)
ma_50 = get_sma(symbol, 50)
cond_trend = bar.close > ma_50
return cond_whale and cond_fr and cond_lsr and cond_trend
2. 出場條件
何時平倉?定義盈利目標和止損:
Python — 出場邏輯
def should_exit_long(entry_price, current_price, time_in_trade):
pnl_pct = (current_price - entry_price) / entry_price
# 盈利目標:+2%
if pnl_pct > 0.02:
return True, "profit_target"
# 止損:-1%
if pnl_pct < -0.01:
return True, "stop_loss"
# 時間出場:4小時後平倉
if time_in_trade > timedelta(hours=4):
return True, "time_exit"
return False, None
3. 倉位規模
每筆交易風險多少?使用凱利公式或固定分數投注:
Python — 倉位規模
def calculate_position_size(account_balance, win_rate, avg_win, avg_loss):
# 凱利公式:f* = (p*b - q) / b
# p = 勝率, b = 盈虧比, q = 虧損率
p = win_rate
q = 1 - win_rate
b = avg_win / avg_loss
kelly_fraction = (p * b - q) / b
# 使用25%的凱利值以保守(避免破產)
position_fraction = kelly_fraction * 0.25
risk_amount = account_balance * position_fraction
return risk_amount
建立回測器
事件驅動回測引擎
Python — 回測框架
class BacktestEngine:
def __init__(self, initial_capital=10000):
self.capital = initial_capital
self.trades = []
self.equity_curve = []
def run(自身, 數據, 策略):
循環 i, 單根K線 於 枚舉(data):
# 檢查開倉交易的出場條件
循環 交易 於 自身.交易列表:
是否平倉, 平倉原因 = 交易.檢查出場條件(單根K線.收盤價)
若 是否平倉:
盈虧 = (單根K線.收盤價 - 交易.進場價) * 交易.倉位大小
自身.資金 += 盈虧
自身.交易列表.移除(交易)
# 檢查進場條件
若 策略.應進場(單根K線):
倉位大小 = 計算倉位規模(...)
交易 = 交易(進場價=單根K線.收盤價, 倉位大小=倉位大小)
自身.交易列表.追加(交易)
自身.資金曲線.追加(自身.資金)
返回 自身.計算指標()
關鍵回測指標
- 勝率: 盈利交易佔總交易次數的百分比
- 盈利因子: 總盈利 / 總虧損 (>1.5為佳)
- 夏普比率: 每單位風險的報酬率 (>1.0為合格)
- 最大回撤: 峰值到谷值的最大跌幅 (保持<-20%)
- 年複合成長率: 複合年增長率 (您的回報指標)
避免過度優化
過度擬合陷阱
若您在歷史數據上不斷調整參數直到獲得200%回報,實盤時將會失望。請使用嚴格的樣本外測試:
滾動式驗證: 用1年數據優化,在接下來3個月測試。然後用第2-3年數據優化,在第3年第1季測試。在整個數據集上重複此過程。僅報告樣本外結果。
參數敏感度
使用網格搜索測試多種參數組合,但需懲罰複雜度:
Python — 滾動式網格搜索
定義 滾動式優化(data, 參數範圍):
結果 = []
訓練窗口 = 252 # 1年的日線數據
測試窗口 = 63 # 3個月
循環 i 於 範圍(0, len(data) - 訓練窗口 - 測試窗口, 測試窗口):
訓練數據 = data[i:i+訓練窗口]
測試數據 = data[i+訓練窗口:i+訓練窗口+測試窗口]
# 在訓練數據上優化
最佳參數 = 無
最佳回報 = -浮點數('無限大')
循環 參數組合 於 參數組合生成(參數範圍):
回測結果 = 回測(訓練數據, 參數)
若 回測結果.回報百分比 > 最佳回報:
最佳回報 = 回測結果.回報百分比
最佳參數 = 參數
# 在未見數據上測試
樣本外結果 = 回測(測試數據, 最佳參數)
結果.追加({"樣本內": 最佳回報, "樣本外": 樣本外結果.回報百分比})
返回 結果
邁向實盤
先進行模擬交易
在投入真實資金前,進行2-4週的模擬交易。由於滑點、延遲和執行問題,您的實盤策略表現將比回測低5-15%。若模擬交易結果與回測高度吻合,即可準備就緒。
實盤交易中的風險管理
實盤交易截然不同。設定硬性限制:
- 單日虧損限制: 若當日虧損達賬戶2%則停止交易
- 月度回撤限制: 若當月累計虧損>5%則暫停交易
- 最大相關性: 同時持有相關性>3的倉位不超過3個
- 流動性門檻: 僅交易24小時成交量>$10M的交易對
與Smart Money API整合
使用我們的確認評分作為信號的前置篩選器或乘數:
Python — API整合範例
導入 requests
定義 帶確認的執行(交易對, 方向, 信號強度):
# 獲取Smart Money確認
響應 = requests.獲取(
f"https://api.smartmoneyapi.com/v1/confirm?symbol={交易對}&direction={方向}",
請求頭={"X-API-密鑰": API密鑰}
)
數據 = 響應.json()
# 根據Smart Money置信度應用倉位乘數
若 數據["置信度"] == 高:
position_size = base_size * 1.5
elif data[信心指數] == 中:
position_size = base_size * 1.0
elif data[信心指數] == 低:
position_size = base_size * 0.5
elif data[信心指數] == 否決:
return 跳過 # 不進行交易
# 以最終規模執行交易
execute_order(symbol, direction, position_size)