從回測到實盤監控,5 個開源 Skills 讓 Claude Code 變身量化交易專家

作者:DeepNoMind
日期:2026年5月16日 上午10:00
來源:WeChat 原文

整理版優先睇

速讀 5 個重點 高亮

量化交易嘅瓶頸唔係策略,而係由諗法到上線嗰段時間;用5個Claude Code Skills配合EODHD API,可以將幾星期嘅工作壓縮到幾日搞掂。

整理版摘要

呢篇文章係整理自幾個開源嘅Claude Code Skills倉庫,作者想解決嘅問題係量化交易者成日陷入寫樣板碼、對接API、通宵除錯呢啲低效工序,搞到好多策略未上線就死咗。作者認為,真正嘅瓶頸唔係策略本身,而係從諗法到實盤之間嘅執行速度。整體結論係:透過裝配5個專用Skills(回測專家、數據流水線、信號生成器、風險管理器、實時信號監控器),配合EODHD API,可以用結構化嘅方法大幅縮短開發週期,將注意力放返喺「邊啲策略值得測試」呢個核心問題上。

文章引用咗多個GitHub倉庫嘅Skills,每個都配有安裝命令、內部工作流程同可運行嘅Python代碼示範。作者唔係分享個人交易經驗,而係以整理者角度,將呢啲工具整合成一套完整流程,由回測到實盤監控都覆蓋到。佢強調Skills嘅價值在於將重複性工作自動化,同時強制執行最佳實踐(例如過擬合檢查、前瞻偏差驗證、倉位風險計算),令交易者唔使喺每個新項目由零開始摸索。

總括而言,呢篇文適合用Python做系統化交易嘅人,特別係想快速測試策略、但又唔想花時間寫基建嘅量化交易者。佢提供咗一條清晰嘅路徑:先用回測專家做初步篩選,再用信號生成器將策略轉成向量化代碼,然後用風險管理器控制倉位,最後用實時監控器自動檢測信號,成個流程幾日就搞得掂。

  • 量化交易嘅真正瓶頸係從諗法到上線嘅執行速度,唔係策略本身;Claude Code Skills可以將幾星期嘅工作壓縮到幾日。
  • 回測專家Skill強制進行過擬合檢查同明確信號邏輯,避免依賴黑盒庫,產出可重複嘅對比結果。
  • 市場數據流水線Skill統一處理EOD、日內、基本面數據,並自動應用公司行為調整,消除存活者偏差呢啲隱形殺手。
  • 風險管理器Skill提供ATR止損、固定比例倉位、投資組合熱度檢查同VaR計算,幫你將風險管理系統化。
  • 實時信號監控器Skill用輪詢模式配合EODHD免費套餐行到,信號同執行分離,唔會意外落單,適合波段同日內交易者。
值得記低
Skill github.com

回測專家 Skill

用嚟系統化測試交易策略,強制過擬合檢查,產生夏普比率、最大回撤等指標。GitHub: tradermonty/claude-trading-skills

Skill github.com

市場數據流水線 Skill

整合EODHD API,獲取調整後EOD、日內、基本面數據,輸出統一格式DataFrame。GitHub: JoelLewis/finance_skills

Skill github.com

信號生成器 Skill

將自然語言策略規則轉成向量化Python代碼,內置前瞻偏差檢查。GitHub: ScientiaCapital/skills

Skill github.com

風險管理器 Skill

計算ATR止損、固定比例倉位、投資組合熱度、VaR,輸出可重用參數化模塊。GitHub: JoelLewis/finance_skills (wealth-management插件)

整理重點

量化交易嘅真正瓶頸

大多數交易者以為量化交易嘅瓶頸係策略,其實唔係。真正嘅瓶頸係 從諗法到上線之間嘅時間。寫樣板碼、對接API、凌晨兩點仲喺度除錯vectorbt報錯 —— 呢啲先係策略死咗嘅原因。

如果你用Python做系統化交易、想測試技術指標、或者想將幾星期嘅工作壓縮到幾日,咁呢篇文對你好重要。

整理重點

5個Skills,覆蓋成個交易流程

以下五個Skills來自公開倉庫,配合 EODHD API,可以快速搭起一套算法交易系統。每個Skill都提供咗安裝命令、內部工作流程同可運行嘅Python代碼。

  1. 1 回測專家:結構化流程,確認規則→獲取數據→從頭計算指標→生成信號→向量化回測→輸出權益曲線,仲會標記過擬合風險。
  2. 2 數據流水線:統一獲取EOD、日內、基本面數據,自動調整公司行為,緩存結果避免重複API調用。
  3. 3 信號生成器:將自然語言策略解析成向量化pandas/numpy操作,內置前瞻偏差檢查,產出係生產級代碼。
  4. 4 風險管理器:基於ATR止損距離、固定比例倉位(預設1%風險)、投資組合熱度檢查(總敞口>5%警告)、歷史VaR計算。
  5. 5 實時監控器:輪詢EODHD獲取實時報價,維護滾動窗口,每條新K線重算指標,信號觸發時記錄時間戳同預警,但絕對唔會直接落單。
整理重點

回測專家:RSI策略實戰

下面係一個示範:用EODHDAAPL歷史數據,從零計RSI,生成買賣信號,最後計算 夏普比率同 總收益率。呢段碼示範咗點樣用向量化操作,唔靠任何黑盒庫。

程式內容 python
import requests
import pandas as pd
import numpy as np

API_KEY = "YOUR_EODHD_KEY"
url = f"https://eodhd.com/api/eod/AAPL.US"
params = {
 "api_token": API_KEY,
 "from": "2022-01-01",
 "to": "2024-12-31",
 "period": "d",
 "fmt": "json"
}
data = requests.get(url, params=params).json()
df = pd.DataFrame(data)[["date", "adjusted_close", "volume"]]
df["date"] = pd.to_datetime(df["date"])
df.set_index("date", inplace=True)
df.columns = ["close", "volume"]

delta = df["close"].diff()
gain = delta.clip(lower=0).rolling(14).mean()
loss = -delta.clip(upper=0).rolling(14).mean()
df["rsi"] = 100 - (100 / (1 + gain / loss))

df["signal"] = 0
df.loc[df["rsi"] < 30, "signal"] = 1
df.loc[df["rsi"] > 70, "signal"] = -1

df["returns"] = df["close"].pct_change()
df["strategy"] = df["signal"].shift(1) * df["returns"]
sharpe = df["strategy"].mean() / df["strategy"].std() * np.sqrt(252)
total = (1 + df["strategy"]).prod() - 1
print(f"夏普比率: {sharpe:.2f} | 總收益率: {total:.2%}")
整理重點

數據流水線:機構級品質,獨立開發者價錢

糟糕嘅數據係回測嘅隱形殺手。存活者偏差、未調整價格、遺漏公司行為 —— 呢啲唔會報錯,只會令策略睇落比實際好。EODHD覆蓋全球70+交易所,提供調整後嘅EOD、分鐘級日內、基本面同實時數據,有免費套餐俾原型開發。

程式內容 python
import requests
import pandas as pd

API_KEY = "YOUR_EODHD_KEY"

def fetch_eod(symbol: str, start: str, end: str) -> pd.DataFrame:
 r = requests.get(
 f"https://eodhd.com/api/eod/{symbol}",
 params={"api_token": API_KEY, "from": start, "to": end,
 "period": "d", "fmt": "json"}
 )
 df = pd.DataFrame(r.json())
 df["date"] = pd.to_datetime(df["date"])
 return df.set_index("date")[["open", "high", "low", "close",
 "adjusted_close", "volume"]]

def fetch_intraday(symbol: str, interval: str = "1m") -> pd.DataFrame:
 r = requests.get(
 f"https://eodhd.com/api/intraday/{symbol}",
 params={"api_token": API_KEY, "interval": interval, "fmt": "json"}
 )
 df = pd.DataFrame(r.json())
 df["datetime"] = pd.to_datetime(df["datetime"])
 return df.set_index("datetime")[["open", "high", "low", "close", "volume"]]

def fetch_fundamentals(symbol: str) -> dict:
 r = requests.get(
 f"https://eodhd.com/api/fundamentals/{symbol}",
 params={"api_token": API_KEY, "fmt": "json"}
 )
 return r.json()

aapl = fetch_eod("AAPL.US", "2023-01-01", "2024-12-31")
fund = fetch_fundamentals("AAPL.US")
eps = fund["Highlights"]["EPS"]
print(f"EPS: {eps} | 最新調整收盤價: ${aapl['adjusted_close'].iloc[-1]:.2f}")

呢個Skill將唔同數據類型統一成標準格式,仲會自動 緩存結果,同一會話唔使重複Call API

整理重點

風險管理同實時監控,閉環成個流程

風險管理器Skill幫你係統化控制每筆交易嘅風險。佢會計算 ATR止損距離、應用固定比例倉位(預設每筆1%)、檢查投資組合總敞口(超過淨值5%就警告),仲有歷史VaR計算。最後輸出入場價、止損價、股數、美元風險同R倍數。

程式內容 python
import requests
import pandas as pd
import numpy as np

API_KEY = "YOUR_EODHD_KEY"
r = requests.get(
 "https://eodhd.com/api/eod/AAPL.US",
 params={"api_token": API_KEY, "from": "2024-10-01",
 "to": "2024-12-31", "period": "d", "fmt": "json"}
)
df = pd.DataFrame(r.json())
df["date"] = pd.to_datetime(df["date"])
df = df.set_index("date")[["high", "low", "adjusted_close"]] \
 .rename(columns={"adjusted_close": "close"})

# ATR(14 週期)
tr = pd.concat([
 df["high"] - df["low"],
 (df["high"] - df["close"].shift()).abs(),
 (df["low"] - df["close"].shift()).abs()], axis=1).max(axis=1)
atr = tr.ewm(span=14, adjust=False).mean().iloc[-1]

def size_position(equity, risk_pct, entry, stop):
 risk_per_share = abs(entry - stop)
 if risk_per_share == 0:
 return 0
 return int((equity * risk_pct / 100) / risk_per_share)

equity = 10_000
entry_price = df["close"].iloc[-1]
stop_price = entry_price - (2 * atr)
shares = size_position(equity, 1.0, entry_price, stop_price)
print(f"入場價: ${entry_price:.2f}")
print(f"止損價(2×ATR): ${stop_price:.2f} | ATR: ${atr:.2f}")
print(f"倉位: {shares} 股")
print(f"美元風險: ${shares * abs(entry_price - stop_price):.2f}")

最後一個係 實時信號監控器,用輪詢模式每60秒檢查一次,喺EODHD免費套餐上都行到。佢會喺內存維護滾動窗口,當條件觸發時輸出預警,但絕對唔會自動落單。

程式內容 python
import requests
import pandas as pd
import numpy as np
import time
from datetime import datetime

API_KEY = "YOUR_EODHD_KEY"

def fetch_live_quote(symbol: str) -> float:
 r = requests.get(
 f"https://eodhd.com/api/real-time/{symbol}",
 params={"api_token": API_KEY, "fmt": "json"}
 )
 return r.json().get("close", None)

def fetch_recent_eod(symbol: str, n: int = 30) -> pd.Series:
 r = requests.get(
 f"https://eodhd.com/api/eod/{symbol}",
 params={"api_token": API_KEY, "period": "d", "fmt": "json"}
 )
 df = pd.DataFrame(r.json()).tail(n)
 df["date"] = pd.to_datetime(df["date"])
 return df.set_index("date")["adjusted_close"].rename("close")

def compute_rsi(series, n=14):
 delta = series.diff()
 gain = delta.clip(lower=0).rolling(n).mean()
 loss = -delta.clip(upper=0).rolling(n).mean()
 return 100 - (100 / (1 + gain / loss))

symbol = "AAPL.US"
print(f"正在監控 {symbol} | {datetime.now():%Y-%m-%d %H:%M}")
while True:
 close_series = fetch_recent_eod(symbol, n=30)
 live_price = fetch_live_quote(symbol) or close_series.iloc[-1]
 today = pd.Timestamp.now().normalize()
 close_series[today] = live_price
 rsi = compute_rsi(close_series).iloc[-1]
 status = "超賣 → 關注買入" if rsi < 30 else \
 "超買 → 關注賣出" if rsi > 70 else "中性"
 print(f"[{datetime.now():%H:%M:%S}] {symbol} | ${live_price:.2f} | RSI: {rsi:.1f} | {status}")
 if rsi < 30:
 print(f" 🔔 預警: RSI 超賣 {rsi:.1f} - 檢查入場機會")
 time.sleep(60)

呢篇文章介紹咗 5 個 Claude Code Skills(回測專家、數據流水線、信號生成器、風險管理器、實時信號監控器),同埋點樣用佢哋配合 EODHD API 快速搭建算法交易系統。

圖片

大部份交易者以為量化交易嘅瓶頸係策略,其實唔係,真正嘅瓶頸係由想法到上線之間嗰段時間。寫樣板代碼、對接 API、凌晨兩點仲喺度調試 vectorbt 報錯 —— 呢個先係大部份策略死咗嘅地方。

如果你正在:

  • 用 Python 構建系統化交易系統
  • 喺投入真金白銀之前測試技術指標
  • 想將幾個禮拜嘅量化工作壓縮到幾日完成

咁下面呢啲內容,對你好重要。


咩係 Claude Code Skills?

Claude Code 唔係聊天機械人,而係一個運行喺終端裏面嘅智能代理,可以讀取文件、執行代碼。對於算法交易嚟講,呢個改變咗遊戲規則。

真正嘅力量來自 Skills —— 即係 SKILL.md 文件。佢哋似菜譜咁,教 Claude 點樣處理特定任務。裝咗 Skill,Claude 就變成咗嗰個領域嘅專家。

下面介紹 5 個嚟自公開倉庫嘅 Skills,可以令 Claude Code 喺交易領域真係有用 —— 附帶安裝命令、內部工作流程,同埋用 EODHD 獲取市場數據嘅可運行 Python 代碼。


1. 回測專家 — 系統化策略測試

來源:tradermonty/claude-trading-skills[1] · ⭐ 16

git clone https://github.com/tradermonty/claude-trading-skills.git
cp -r claude-trading-skills/skills/backtest-expert ~/.claude/skills/

Skill 內部工作流程:

  1. 確認策略規則同參數
  2. 獲取指定標嘅同週期嘅歷史 OHLCV 數據
  3. 從頭計算指標——唔依賴任何庫嘅黑盒
  4. 生成明確嘅入場/出場信號
  5. 運行向量化回測:收益率、夏普比率、最大回撤、勝率
  6. 輸出權益曲線 + 彙總表
  7. 如果樣本內窗口唔夠 2 年,標記過擬合風險

代碼示例: 基於 RSI 嘅回測,用 EODHD API 獲取數據,由零開始計算 RSI,生成買賣信號,計算夏普比率同總收益率。

import requests
import pandas as pd
import numpy as np

API_KEY = "YOUR_EODHD_KEY"

# 通過 EODHD REST API 獲取歷史價格
url = f"https://eodhd.com/api/eod/AAPL.US"
params = {
    "api_token": API_KEY,
    "from""2022-01-01",
    "to""2024-12-31",
    "period""d",
    "fmt""json"
}
data = requests.get(url, params=params).json()
df = pd.DataFrame(data)[["date""adjusted_close""volume"]]
df["date"] = pd.to_datetime(df["date"])
df.set_index("date", inplace=True)
df.columns = ["close""volume"]

# 從零計算 RSI
delta = df["close"].diff()
gain  = delta.clip(lower=0).rolling(14).mean()
loss  = -delta.clip(upper=0).rolling(14).mean()
df["rsi"] = 100 - (100 / (1 + gain / loss))

# 生成信號
df["signal"] = 0
df.loc[df["rsi"] < 30"signal"] =  1# 買入
df.loc[df["rsi"] > 70"signal"] = -1# 賣出

# 向量化策略收益率
df["returns"]  = df["close"].pct_change()
df["strategy"] = df["signal"].shift(1) * df["returns"]
sharpe = df["strategy"].mean() / df["strategy"].std() * np.sqrt(252)
total  = (1 + df["strategy"]).prod() - 1
print(f"夏普比率: {sharpe:.2f} | 總收益率: {total:.2%}")

優點: 結構化流程唔會 skip 過過擬合檢查;強制使用明確嘅信號邏輯,唔依賴隱含嘅庫假設。

缺點: 需要清晰嘅策略描述;模糊嘅輸入會產生平庸嘅回測結果。

最適合: 每星期測試 5-10 個策略變體嘅量化交易者,需要可重複、可對比嘅結果。


2. 市場數據流水線 — EODHD 集成

來源:JoelLewis/finance_skills[2] · trading-operations 插件

npx skills add JoelLewis/finance_skills --plugin trading-operations

Skill 內部工作流程:

  1. 確認所需數據類型:EOD / 日內 / 基本面 / 實時
  2. 選擇對應嘅 EODHD 接口
  3. 構建請求參數(標嘅格式、日期範圍、週期)
  4. 將返回結果規範化為統一列名嘅 DataFrame
  5. 對歷史價格分析應用公司行為調整
  6. 緩存結果,避免同一會話入面嘅重複 API 調用
  7. 返回可以直接用嚟計算指標嘅 DataFrame

差嘅數據係回測嘅隱形殺手。 存活者偏差、未調整價格、遺漏嘅公司行為 —— 呢啲唔會報錯,只會令策略睇起嚟比實際更好。

import requests
import pandas as pd

API_KEY = "YOUR_EODHD_KEY"

def fetch_eod(symbol: str, start: str, end: str) -> pd.DataFrame:
    r = requests.get(
        f"https://eodhd.com/api/eod/{symbol}",
        params={"api_token": API_KEY, "from": start, "to": end,
                "period""d""fmt""json"}
    )
    df = pd.DataFrame(r.json())
    df["date"] = pd.to_datetime(df["date"])
    return df.set_index("date")[["open""high""low""close",
                                 "adjusted_close""volume"]]

def fetch_intraday(symbol: str, interval: str = "1m") -> pd.DataFrame:
    r = requests.get(
        f"https://eodhd.com/api/intraday/{symbol}",
        params={"api_token": API_KEY, "interval": interval, "fmt""json"}
    )
    df = pd.DataFrame(r.json())
    df["datetime"] = pd.to_datetime(df["datetime"])
    return df.set_index("datetime")[["open""high""low""close""volume"]]

def fetch_fundamentals(symbol: str) -> dict:
    r = requests.get(
        f"https://eodhd.com/api/fundamentals/{symbol}",
        params={"api_token": API_KEY, "fmt""json"}
    )
    return r.json()

# 使用方法
aapl = fetch_eod("AAPL.US""2023-01-01""2024-12-31")
fund = fetch_fundamentals("AAPL.US")
eps  = fund["Highlights"]["EPS"]
print(f"EPS: {eps} | 最新調整收盤價: ${aapl['adjusted_close'].iloc[-1]:.2f}")

EODHD 覆蓋全球 70+ 交易所(美股、ETF、外匯、加密貨幣),提供經過公司行為調整嘅價格數據,仲有免費套餐俾原型開發用。

優點: 調整後嘅 EOD + 分鐘級日內數據 + 基本面 + 實時數據,全部嚟自同一個 API;有免費套餐。

缺點: 冇延遲嘅實時報價需要付費套餐。

最適合: 任何正在構建認真回測或實盤系統嘅人,需要機構級數據質量但只需要獨立開發者價格。


3. 信號生成器 — 將策略邏輯變成可執行代碼

來源:ScientiaCapital/skills[3] · active/signal-generation

git clone https://github.com/scientiacapital/skills.git
cp -r skills/active/signal-generation ~/.claude/skills/

策略喺你個腦入面、喺研究筆記入面、或者喺 TradingView Pine Script 入面。需要將佢變成乾淨、向量化嘅 Python 代碼。而呢個 Skill 負責翻譯工作。

Skill 內部工作流程:

  1. 將自然語言描述嘅策略規則解析為明確嘅條件
  2. 將每個條件映射為 pandas/numpy 操作
  3. 用向量化操作計算指標(唔逐行循環)
  4. 分別構建入場同出場序列
  5. 如果指定咗時段或交易會話過濾條件,就應用
  6. 輸出 DataFrame:[收盤價, 指標, 信號, 持倉]
  7. 驗證:冇前瞻偏差(所有指標喺信號比對前已完成位移)
import requests
import pandas as pd
import numpy as np

API_KEY = "YOUR_EODHD_KEY"
r = requests.get(
    "https://eodhd.com/api/eod/TSLA.US",
    params={"api_token": API_KEY, "from""2023-01-01",
            "to""2024-12-31""period""d""fmt""json"}
)
df = pd.DataFrame(r.json())
df["date"] = pd.to_datetime(df["date"])
df = df.set_index("date")[["high""low""adjusted_close"]] \
      .rename(columns={"adjusted_close""close"})

# EMA 交叉 + ADX 過濾器(不依賴 TA-Lib)
def ema(s, n):
    return s.ewm(span=n, adjust=False).mean()

def compute_adx(df, n=14):
    tr = pd.concat([
        df["high"] - df["low"],
        (df["high"] - df["close"].shift()).abs(),
        (df["low"]  - df["close"].shift()).abs()
    ], axis=1).max(axis=1)
    dm_pos = (df["high"] - df["high"].shift()).clip(lower=0)
    dm_neg = (df["low"].shift() - df["low"]).clip(lower=0)
    atr    = tr.ewm(span=n, adjust=False).mean()
    di_pos = 100 * dm_pos.ewm(span=n, adjust=False).mean() / atr
    di_neg = 100 * dm_neg.ewm(span=n, adjust=False).mean() / atr
    dx     = (100 * (di_pos - di_neg).abs() / (di_pos + di_neg))
    return dx.ewm(span=n, adjust=False).mean()

df["ema20"] = ema(df["close"], 20)
df["ema50"] = ema(df["close"], 50)
df["adx"]   = compute_adx(df)

cross_up = (df["ema20"] > df["ema50"]) & \
           (df["ema20"].shift() <= df["ema50"].shift())
adx_confirmed = df["adx"] > 25
df["signal"] = (cross_up & adx_confirmed).astype(int)

print(df[df["signal"] == 1][["close""ema20""ema50""adx"]].tail())

優點: 前瞻偏差檢查內置喺流程入面,Claude 喺交付代碼前就會標記問題;產出嘅係生產級向量化代碼,唔係教程式代碼。

缺點: 喺接入實盤資金之前,一定要人手驗證信號邏輯。

最適合: 嗰啲用策略規則思考、想 Claude 幫手做 Python 翻譯嘅交易者。


4. 風險管理器 — 倉位計算同風險控制

來源:JoelLewis/finance_skills[4] · wealth-management 插件(risk-measurement skill)

npx skills add JoelLewis/finance_skills --plugin wealth-management

冇風險管理嘅策略,就係兜多幾個圈嘅投機。呢個 Skill 為 Claude 提供咗每次倉位同風險計算嘅決策框架。

Skill 內部工作流程:

  1. 基於當前設置計算 ATR 止蝕距離
  2. 應用固定比例倉位(默認:每筆交易風險係賬户嘅 1%)
  3. 檢查投資組合熱度:如果總敞口超過淨值嘅 5% 就標記警告
  4. 計算當前投資組合嘅歷史 VaR(95% 置信度)
  5. 輸出:入場價、止蝕價、股數、美元風險、R 倍數目標
  6. 定義熔斷閾值:如果回撤超過 X%,停止新開倉
import requests
import pandas as pd
import numpy as np

API_KEY = "YOUR_EODHD_KEY"
r = requests.get(
    "https://eodhd.com/api/eod/AAPL.US",
    params={"api_token": API_KEY, "from""2024-10-01",
            "to""2024-12-31""period""d""fmt""json"}
)
df = pd.DataFrame(r.json())
df["date"] = pd.to_datetime(df["date"])
df = df.set_index("date")[["high""low""adjusted_close"]] \
      .rename(columns={"adjusted_close""close"})

# ATR(14 週期)
tr = pd.concat([
    df["high"] - df["low"],
    (df["high"] - df["close"].shift()).abs(),
    (df["low"]  - df["close"].shift()).abs()
], axis=1).max(axis=1)
atr = tr.ewm(span=14, adjust=False).mean().iloc[-1]

def size_position(equity, risk_pct, entry, stop):
    risk_per_share = abs(entry - stop)
    if risk_per_share == 0:
        return0
    return int((equity * risk_pct / 100) / risk_per_share)

equity      = 10_000
entry_price = df["close"].iloc[-1]
stop_price  = entry_price - (2 * atr)
shares      = size_position(equity, 1.0, entry_price, stop_price)

print(f"入場價:       ${entry_price:.2f}")
print(f"止損價(2×ATR): ${stop_price:.2f}  |  ATR: ${atr:.2f}")
print(f"倉位:          {shares} 股")
print(f"美元風險:      ${shares * abs(entry_price - stop_price):.2f}")

優點: 產出可複用嘅參數化模塊,唔係硬編碼值;流程入麪包含投資組合熱度檢查,唔限於單筆交易。

缺點: 倉位模型需要人手審核 —— Claude 唔知道你嘅個人回撤容忍度。

最適合: 同時運行多個策略嘅系統化交易者,需要一致、可審計嘅風險框架。


5. 實時信號監控器 — 實時預警

來源:roman-rr/trading-skills[5] · trading-signals skill

git clone https://github.com/roman-rr/trading-skills.git
cp -r trading-skills/trading-signals ~/.claude/skills/

最後一個 Skill 閉環咗由研究到實盤監控嘅全流程。唔再係跑回測,而係實時監控信號,喺條件滿足時觸發告警。

Skill 內部工作流程:

  1. 通過 EODHD REST API 獲取實時報價同近期 EOD K 線
  2. 喺內存入面維護一個滾動窗口
  3. 每條新 K 線到嚟時重新計算指標
  4. 評估信號條件——入場、出場或持倉
  5. 信號觸發時:記錄時間戳、標嘅、價格、指標值
  6. 發送預警(打印 / Telegram / 郵件)
  7. 從來唔直接執行訂單 —— 只輸出信號
import requests
import pandas as pd
import numpy as np
import time
from datetime import datetime

API_KEY = "YOUR_EODHD_KEY"

def fetch_live_quote(symbol: str) -> float:
    r = requests.get(
        f"https://eodhd.com/api/real-time/{symbol}",
        params={"api_token": API_KEY, "fmt""json"}
    )
    return r.json().get("close"None)

def fetch_recent_eod(symbol: str, n: int = 30) -> pd.Series:
    r = requests.get(
        f"https://eodhd.com/api/eod/{symbol}",
        params={"api_token": API_KEY, "period""d""fmt""json"}
    )
    df = pd.DataFrame(r.json()).tail(n)
    df["date"] = pd.to_datetime(df["date"])
    return df.set_index("date")["adjusted_close"].rename("close")

def compute_rsi(series, n=14):
    delta = series.diff()
    gain  = delta.clip(lower=0).rolling(n).mean()
    loss  = -delta.clip(upper=0).rolling(n).mean()
    return100 - (100 / (1 + gain / loss))

symbol = "AAPL.US"
print(f"正在監控 {symbol} | {datetime.now():%Y-%m-%d %H:%M}")

whileTrue:
    close_series = fetch_recent_eod(symbol, n=30)
    live_price   = fetch_live_quote(symbol) or close_series.iloc[-1]

    today = pd.Timestamp.now().normalize()
    close_series[today] = live_price
    rsi   = compute_rsi(close_series).iloc[-1]

    status = "超賣 → 關注買入"if rsi < 30else \
             "超買 → 關注賣出"if rsi > 70else"中性"
    print(f"[{datetime.now():%H:%M:%S}{symbol} | ${live_price:.2f} | RSI: {rsi:.1f} | {status}")

    if rsi < 30:
        print(f"  🔔 預警: RSI 超賣 {rsi:.1f} - 檢查入場機會")

    time.sleep(60)

配合 Telegram 機械人使用,你就可以獲得 24/7 自動運行嘅信號檢測系統,唔使再人手睇盤喇。

優點: 輪詢模式喺 EODHD 免費套餐上都可以運行,唔需要 WebSocket 訂閲;Skill 強制信號同執行分離,唔會意外落單。

缺點: 60 秒輪詢唔適合亞分鐘級策略(呢類需求應該用 EODHD 嘅 WebSocket 數據流)。

最適合: 波段交易者同日內交易者,希望喺唔構建完整執行系統嘅情況下實現信號自動檢測。


轉變已嚟

Claude Code Skills 唔係咩神奇嘅嘢,就係一套結構化解決方案,可以避免喺每個新項目入面都要從頭開始摸索嘅問題。

五個 Skills 同一個可靠嘅數據層,瓶頸就由「點樣實現」轉移咗去本來應該喺嘅地方:判斷邊啲策略值得測試

大部份量化交易者唔缺想法,缺嘅係足夠快嘅執行能力,嚟揾到嗰啲真正有效嘅策略。

而呢樣,正正係改變緊嘅嘢。

參考資料
[1] 

tradermonty/claude-trading-skills: https://github.com/tradermonty/claude-trading-skills

[2] 

JoelLewis/finance_skills: https://github.com/JoelLewis/finance_skills

[3] 

ScientiaCapital/skills: https://github.com/scientiacapital/skills

[4] 

JoelLewis/finance_skills: https://github.com/JoelLewis/finance_skills

[5] 

roman-rr/trading-skills: https://github.com/roman-rr/trading-skills


本文介紹了 5 個 Claude Code Skills(回測專家、數據流水線、信號生成器、風險管理器、實時信號監控器)以及如何用通過它們配合 EODHD API 快速搭建算法交易系統。

圖片

大多數交易者以為量化交易的瓶頸是策略,其實不是,真正的瓶頸,是從想法到上線之間的那段時間。寫樣板代碼、對接 API、凌晨兩點還在調試 vectorbt 報錯 —— 這才是大多數策略死掉的地方。

如果你正在:

  • 用 Python 構建系統化交易系統
  • 在投入真金白銀之前測試技術指標
  • 想把幾周的量化工作壓縮到幾天完成

那麼下面這些內容,對你很重要。


什麼是 Claude Code Skills?

Claude Code 不是聊天機器人,而是一個運行在終端裏的智能代理,能讀取文件、執行代碼。對於算法交易來說,這改變了遊戲規則。

真正的力量來自 Skills —— 也就是 SKILL.md 文件。它們像菜譜一樣,告訴 Claude 如何處理特定任務。裝上 Skill,Claude 就變成了那個領域的專家。

下面介紹 5 個來自公開倉庫的 Skills,能讓 Claude Code 在交易領域真正有用 —— 附帶安裝命令、內部工作流程,以及使用 EODHD 獲取市場數據的可運行 Python 代碼。


1. 回測專家 — 系統化策略測試

來源:tradermonty/claude-trading-skills[1] · ⭐ 16

git clone https://github.com/tradermonty/claude-trading-skills.git
cp -r claude-trading-skills/skills/backtest-expert ~/.claude/skills/

Skill 內部工作流程:

  1. 確認策略規則和參數
  2. 獲取指定標的和週期的歷史 OHLCV 數據
  3. 從頭計算指標——不依賴任何庫的黑盒
  4. 生成明確的入場/出場信號
  5. 運行向量化回測:收益率、夏普比率、最大回撤、勝率
  6. 輸出權益曲線 + 彙總表
  7. 如果樣本內窗口不足 2 年,標記過擬合風險

代碼示例: 基於 RSI 的回測,使用 EODHD API 獲取數據,從零計算 RSI,生成買賣信號,計算夏普比率和總收益率。

import requests
import pandas as pd
import numpy as np

API_KEY = "YOUR_EODHD_KEY"

# 通過 EODHD REST API 獲取歷史價格
url = f"https://eodhd.com/api/eod/AAPL.US"
params = {
    "api_token": API_KEY,
    "from""2022-01-01",
    "to""2024-12-31",
    "period""d",
    "fmt""json"
}
data = requests.get(url, params=params).json()
df = pd.DataFrame(data)[["date""adjusted_close""volume"]]
df["date"] = pd.to_datetime(df["date"])
df.set_index("date", inplace=True)
df.columns = ["close""volume"]

# 從零計算 RSI
delta = df["close"].diff()
gain  = delta.clip(lower=0).rolling(14).mean()
loss  = -delta.clip(upper=0).rolling(14).mean()
df["rsi"] = 100 - (100 / (1 + gain / loss))

# 生成信號
df["signal"] = 0
df.loc[df["rsi"] < 30"signal"] =  1# 買入
df.loc[df["rsi"] > 70"signal"] = -1# 賣出

# 向量化策略收益率
df["returns"]  = df["close"].pct_change()
df["strategy"] = df["signal"].shift(1) * df["returns"]
sharpe = df["strategy"].mean() / df["strategy"].std() * np.sqrt(252)
total  = (1 + df["strategy"]).prod() - 1
print(f"夏普比率: {sharpe:.2f} | 總收益率: {total:.2%}")

優點: 結構化流程不會跳過過擬合檢查;強制使用明確的信號邏輯,不依賴隱含的庫假設。

缺點: 需要清晰的策略描述;模糊的輸入會產生平庸的回測結果。

最適合: 每週測試 5-10 個策略變體的量化交易者,需要可重複、可對比的結果。


2. 市場數據流水線 — EODHD 集成

來源:JoelLewis/finance_skills[2] · trading-operations 插件

npx skills add JoelLewis/finance_skills --plugin trading-operations

Skill 內部工作流程:

  1. 確認所需數據類型:EOD / 日內 / 基本面 / 實時
  2. 選擇對應的 EODHD 接口
  3. 構建請求參數(標的格式、日期範圍、週期)
  4. 將返回結果規範化為統一列名的 DataFrame
  5. 對歷史價格分析應用公司行為調整
  6. 緩存結果,避免同一會話中的重複 API 調用
  7. 返回可直接用於指標計算的 DataFrame

糟糕的數據是回測的隱形殺手。 存活者偏差、未調整價格、遺漏的公司行為 —— 這些不會報錯,只會讓策略看起來比實際更好。

import requests
import pandas as pd

API_KEY = "YOUR_EODHD_KEY"

def fetch_eod(symbol: str, start: str, end: str) -> pd.DataFrame:
    r = requests.get(
        f"https://eodhd.com/api/eod/{symbol}",
        params={"api_token": API_KEY, "from": start, "to": end,
                "period""d""fmt""json"}
    )
    df = pd.DataFrame(r.json())
    df["date"] = pd.to_datetime(df["date"])
    return df.set_index("date")[["open""high""low""close",
                                 "adjusted_close""volume"]]

def fetch_intraday(symbol: str, interval: str = "1m") -> pd.DataFrame:
    r = requests.get(
        f"https://eodhd.com/api/intraday/{symbol}",
        params={"api_token": API_KEY, "interval": interval, "fmt""json"}
    )
    df = pd.DataFrame(r.json())
    df["datetime"] = pd.to_datetime(df["datetime"])
    return df.set_index("datetime")[["open""high""low""close""volume"]]

def fetch_fundamentals(symbol: str) -> dict:
    r = requests.get(
        f"https://eodhd.com/api/fundamentals/{symbol}",
        params={"api_token": API_KEY, "fmt""json"}
    )
    return r.json()

# 使用方法
aapl = fetch_eod("AAPL.US""2023-01-01""2024-12-31")
fund = fetch_fundamentals("AAPL.US")
eps  = fund["Highlights"]["EPS"]
print(f"EPS: {eps} | 最新調整收盤價: ${aapl['adjusted_close'].iloc[-1]:.2f}")

EODHD 覆蓋全球 70+ 交易所(美股、ETF、外匯、加密貨幣),提供經過公司行為調整的價格數據,並有免費套餐供原型開發使用。

優點: 調整後的 EOD + 分鐘級日內數據 + 基本面 + 實時數據,全部來自同一個 API;有免費套餐。

缺點: 無延遲的實時報價需要付費套餐。

最適合: 任何正在構建嚴肅回測或實盤系統的人,需要機構級數據質量但只需獨立開發者價格。


3. 信號生成器 — 把策略邏輯變成可執行代碼

來源:ScientiaCapital/skills[3] · active/signal-generation

git clone https://github.com/scientiacapital/skills.git
cp -r skills/active/signal-generation ~/.claude/skills/

策略在你的腦子裏、在研究筆記裏、或者在 TradingView Pine Script 裏。需要把它變成乾淨、向量化的 Python 代碼。而這個 Skill 負責翻譯工作。

Skill 內部工作流程:

  1. 將自然語言描述的策略規則解析為明確的條件
  2. 將每個條件映射為 pandas/numpy 操作
  3. 使用向量化操作計算指標(不逐行循環)
  4. 分別構建入場和出場序列
  5. 如果指定了時段或交易會話過濾條件,則應用
  6. 輸出 DataFrame:[收盤價, 指標, 信號, 持倉]
  7. 驗證:無前瞻偏差(所有指標在信號比對前已完成位移)
import requests
import pandas as pd
import numpy as np

API_KEY = "YOUR_EODHD_KEY"
r = requests.get(
    "https://eodhd.com/api/eod/TSLA.US",
    params={"api_token": API_KEY, "from""2023-01-01",
            "to""2024-12-31""period""d""fmt""json"}
)
df = pd.DataFrame(r.json())
df["date"] = pd.to_datetime(df["date"])
df = df.set_index("date")[["high""low""adjusted_close"]] \
      .rename(columns={"adjusted_close""close"})

# EMA 交叉 + ADX 過濾器(不依賴 TA-Lib)
def ema(s, n):
    return s.ewm(span=n, adjust=False).mean()

def compute_adx(df, n=14):
    tr = pd.concat([
        df["high"] - df["low"],
        (df["high"] - df["close"].shift()).abs(),
        (df["low"]  - df["close"].shift()).abs()
    ], axis=1).max(axis=1)
    dm_pos = (df["high"] - df["high"].shift()).clip(lower=0)
    dm_neg = (df["low"].shift() - df["low"]).clip(lower=0)
    atr    = tr.ewm(span=n, adjust=False).mean()
    di_pos = 100 * dm_pos.ewm(span=n, adjust=False).mean() / atr
    di_neg = 100 * dm_neg.ewm(span=n, adjust=False).mean() / atr
    dx     = (100 * (di_pos - di_neg).abs() / (di_pos + di_neg))
    return dx.ewm(span=n, adjust=False).mean()

df["ema20"] = ema(df["close"], 20)
df["ema50"] = ema(df["close"], 50)
df["adx"]   = compute_adx(df)

cross_up = (df["ema20"] > df["ema50"]) & \
           (df["ema20"].shift() <= df["ema50"].shift())
adx_confirmed = df["adx"] > 25
df["signal"] = (cross_up & adx_confirmed).astype(int)

print(df[df["signal"] == 1][["close""ema20""ema50""adx"]].tail())

優點: 前瞻偏差檢查內置於流程中,Claude 在交付代碼前就會標記問題;產出的是生產級向量化代碼,不是教程式代碼。

缺點: 在接入實盤資金之前,務必人工驗證信號邏輯。

最適合: 那些用策略規則思考、希望 Claude 幫忙做 Python 翻譯的交易者。


4. 風險管理器 — 倉位計算與風險控制

來源:JoelLewis/finance_skills[4] · wealth-management 插件(risk-measurement skill)

npx skills add JoelLewis/finance_skills --plugin wealth-management

沒有風險管理的策略,就是多繞了幾步路的投機。這個 Skill 為 Claude 提供了每次倉位和風險計算的決策框架。

Skill 內部工作流程:

  1. 基於當前設置計算 ATR 止損距離
  2. 應用固定比例倉位(默認:每筆交易風險為賬户的 1%)
  3. 檢查投資組合熱度:如果總敞口超過淨值的 5% 則標記警告
  4. 計算當前投資組合的歷史 VaR(95% 置信度)
  5. 輸出:入場價、止損價、股數、美元風險、R 倍數目標
  6. 定義熔斷閾值:如果回撤超過 X%,停止新開倉
import requests
import pandas as pd
import numpy as np

API_KEY = "YOUR_EODHD_KEY"
r = requests.get(
    "https://eodhd.com/api/eod/AAPL.US",
    params={"api_token": API_KEY, "from""2024-10-01",
            "to""2024-12-31""period""d""fmt""json"}
)
df = pd.DataFrame(r.json())
df["date"] = pd.to_datetime(df["date"])
df = df.set_index("date")[["high""low""adjusted_close"]] \
      .rename(columns={"adjusted_close""close"})

# ATR(14 週期)
tr = pd.concat([
    df["high"] - df["low"],
    (df["high"] - df["close"].shift()).abs(),
    (df["low"]  - df["close"].shift()).abs()
], axis=1).max(axis=1)
atr = tr.ewm(span=14, adjust=False).mean().iloc[-1]

def size_position(equity, risk_pct, entry, stop):
    risk_per_share = abs(entry - stop)
    if risk_per_share == 0:
        return0
    return int((equity * risk_pct / 100) / risk_per_share)

equity      = 10_000
entry_price = df["close"].iloc[-1]
stop_price  = entry_price - (2 * atr)
shares      = size_position(equity, 1.0, entry_price, stop_price)

print(f"入場價:       ${entry_price:.2f}")
print(f"止損價(2×ATR): ${stop_price:.2f}  |  ATR: ${atr:.2f}")
print(f"倉位:          {shares} 股")
print(f"美元風險:      ${shares * abs(entry_price - stop_price):.2f}")

優點: 產出可複用的參數化模塊,不是硬編碼值;流程中包含投資組合熱度檢查,不限於單筆交易。

缺點: 倉位模型需要人工審核 —— Claude 不知道你的個人回撤容忍度。

最適合: 同時運行多個策略的系統化交易者,需要一致、可審計的風險框架。


5. 實時信號監控器 — 實時預警

來源:roman-rr/trading-skills[5] · trading-signals skill

git clone https://github.com/roman-rr/trading-skills.git
cp -r trading-skills/trading-signals ~/.claude/skills/

最後一個 Skill 閉環了從研究到實盤監控的全流程。不再是跑回測,而是實時監控信號,在條件滿足時觸發告警。

Skill 內部工作流程:

  1. 通過 EODHD REST API 獲取實時報價和近期 EOD K 線
  2. 在內存中維護一個滾動窗口
  3. 每根新 K 線到來時重新計算指標
  4. 評估信號條件——入場、出場或持倉
  5. 信號觸發時:記錄時間戳、標的、價格、指標值
  6. 發送預警(打印 / Telegram / 郵件)
  7. 從不直接執行訂單 —— 只輸出信號
import requests
import pandas as pd
import numpy as np
import time
from datetime import datetime

API_KEY = "YOUR_EODHD_KEY"

def fetch_live_quote(symbol: str) -> float:
    r = requests.get(
        f"https://eodhd.com/api/real-time/{symbol}",
        params={"api_token": API_KEY, "fmt""json"}
    )
    return r.json().get("close"None)

def fetch_recent_eod(symbol: str, n: int = 30) -> pd.Series:
    r = requests.get(
        f"https://eodhd.com/api/eod/{symbol}",
        params={"api_token": API_KEY, "period""d""fmt""json"}
    )
    df = pd.DataFrame(r.json()).tail(n)
    df["date"] = pd.to_datetime(df["date"])
    return df.set_index("date")["adjusted_close"].rename("close")

def compute_rsi(series, n=14):
    delta = series.diff()
    gain  = delta.clip(lower=0).rolling(n).mean()
    loss  = -delta.clip(upper=0).rolling(n).mean()
    return100 - (100 / (1 + gain / loss))

symbol = "AAPL.US"
print(f"正在監控 {symbol} | {datetime.now():%Y-%m-%d %H:%M}")

whileTrue:
    close_series = fetch_recent_eod(symbol, n=30)
    live_price   = fetch_live_quote(symbol) or close_series.iloc[-1]

    today = pd.Timestamp.now().normalize()
    close_series[today] = live_price
    rsi   = compute_rsi(close_series).iloc[-1]

    status = "超賣 → 關注買入"if rsi < 30else \
             "超買 → 關注賣出"if rsi > 70else"中性"
    print(f"[{datetime.now():%H:%M:%S}{symbol} | ${live_price:.2f} | RSI: {rsi:.1f} | {status}")

    if rsi < 30:
        print(f"  🔔 預警: RSI 超賣 {rsi:.1f} - 檢查入場機會")

    time.sleep(60)

搭配 Telegram 機器人使用,你就能獲得 24/7 自動運行的信號檢測系統,不用再人工盯盤了。

優點: 輪詢模式在 EODHD 免費套餐上也能運行,不需要 WebSocket 訂閲;Skill 強制信號與執行分離,不會意外下單。

缺點: 60 秒輪詢不適合亞分鐘級策略(這類需求應使用 EODHD 的 WebSocket 數據流)。

最適合: 波段交易者和日內交易者,希望在不構建完整執行系統的情況下實現信號自動檢測。


轉變已來

Claude Code Skills 並非什麼神奇的東西,就是一套結構化解決方案,能夠避免在每個新項目中都不得不從頭開始摸索的問題。

五個 Skills 和一個可靠的數據層,瓶頸就從"怎麼實現"轉移到了本來應該在的地方:判斷哪些策略值得測試

大多數量化交易者不缺想法,缺的是足夠快的執行能力,來找到那些真正有效的策略。

而這,正是正在改變的事情。

參考資料
[1] 

tradermonty/claude-trading-skills: https://github.com/tradermonty/claude-trading-skills

[2] 

JoelLewis/finance_skills: https://github.com/JoelLewis/finance_skills

[3] 

ScientiaCapital/skills: https://github.com/scientiacapital/skills

[4] 

JoelLewis/finance_skills: https://github.com/JoelLewis/finance_skills

[5] 

roman-rr/trading-skills: https://github.com/roman-rr/trading-skills