從回測到實盤監控,5 個開源 Skills 讓 Claude Code 變身量化交易專家
整理版優先睇
量化交易嘅瓶頸唔係策略,而係由諗法到上線嗰段時間;用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: tradermonty/claude-trading-skills
市場數據流水線 Skill
整合EODHD API,獲取調整後EOD、日內、基本面數據,輸出統一格式DataFrame。GitHub: JoelLewis/finance_skills
信號生成器 Skill
將自然語言策略規則轉成向量化Python代碼,內置前瞻偏差檢查。GitHub: ScientiaCapital/skills
風險管理器 Skill
計算ATR止損、固定比例倉位、投資組合熱度、VaR,輸出可重用參數化模塊。GitHub: JoelLewis/finance_skills (wealth-management插件)
量化交易嘅真正瓶頸
大多數交易者以為量化交易嘅瓶頸係策略,其實唔係。真正嘅瓶頸係 從諗法到上線之間嘅時間。寫樣板碼、對接API、凌晨兩點仲喺度除錯vectorbt報錯 —— 呢啲先係策略死咗嘅原因。
如果你用Python做系統化交易、想測試技術指標、或者想將幾星期嘅工作壓縮到幾日,咁呢篇文對你好重要。
5個Skills,覆蓋成個交易流程
以下五個Skills來自公開倉庫,配合 EODHD API,可以快速搭起一套算法交易系統。每個Skill都提供咗安裝命令、內部工作流程同可運行嘅Python代碼。
- 1 回測專家:結構化流程,確認規則→獲取數據→從頭計算指標→生成信號→向量化回測→輸出權益曲線,仲會標記過擬合風險。
- 2 數據流水線:統一獲取EOD、日內、基本面數據,自動調整公司行為,緩存結果避免重複API調用。
- 3 信號生成器:將自然語言策略解析成向量化pandas/numpy操作,內置前瞻偏差檢查,產出係生產級代碼。
- 4 風險管理器:基於ATR止損距離、固定比例倉位(預設1%風險)、投資組合熱度檢查(總敞口>5%警告)、歷史VaR計算。
- 5 實時監控器:輪詢EODHD獲取實時報價,維護滾動窗口,每條新K線重算指標,信號觸發時記錄時間戳同預警,但絕對唔會直接落單。
回測專家:RSI策略實戰
下面係一個示範:用EODHD拎AAPL歷史數據,從零計RSI,生成買賣信號,最後計算 夏普比率同 總收益率。呢段碼示範咗點樣用向量化操作,唔靠任何黑盒庫。
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、分鐘級日內、基本面同實時數據,有免費套餐俾原型開發。
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倍數。
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免費套餐上都行到。佢會喺內存維護滾動窗口,當條件觸發時輸出預警,但絕對唔會自動落單。
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 內部工作流程:
確認策略規則同參數 獲取指定標嘅同週期嘅歷史 OHLCV 數據 從頭計算指標——唔依賴任何庫嘅黑盒 生成明確嘅入場/出場信號 運行向量化回測:收益率、夏普比率、最大回撤、勝率 輸出權益曲線 + 彙總表 如果樣本內窗口唔夠 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 內部工作流程:
確認所需數據類型:EOD / 日內 / 基本面 / 實時 選擇對應嘅 EODHD 接口 構建請求參數(標嘅格式、日期範圍、週期) 將返回結果規範化為統一列名嘅 DataFrame 對歷史價格分析應用公司行為調整 緩存結果,避免同一會話入面嘅重複 API 調用 返回可以直接用嚟計算指標嘅 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 內部工作流程:
將自然語言描述嘅策略規則解析為明確嘅條件 將每個條件映射為 pandas/numpy 操作 用向量化操作計算指標(唔逐行循環) 分別構建入場同出場序列 如果指定咗時段或交易會話過濾條件,就應用 輸出 DataFrame:[收盤價, 指標, 信號, 持倉] 驗證:冇前瞻偏差(所有指標喺信號比對前已完成位移)
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 內部工作流程:
基於當前設置計算 ATR 止蝕距離 應用固定比例倉位(默認:每筆交易風險係賬户嘅 1%) 檢查投資組合熱度:如果總敞口超過淨值嘅 5% 就標記警告 計算當前投資組合嘅歷史 VaR(95% 置信度) 輸出:入場價、止蝕價、股數、美元風險、R 倍數目標 定義熔斷閾值:如果回撤超過 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 內部工作流程:
通過 EODHD REST API 獲取實時報價同近期 EOD K 線 喺內存入面維護一個滾動窗口 每條新 K 線到嚟時重新計算指標 評估信號條件——入場、出場或持倉 信號觸發時:記錄時間戳、標嘅、價格、指標值 發送預警(打印 / Telegram / 郵件) 從來唔直接執行訂單 —— 只輸出信號
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 同一個可靠嘅數據層,瓶頸就由「點樣實現」轉移咗去本來應該喺嘅地方:判斷邊啲策略值得測試。
大部份量化交易者唔缺想法,缺嘅係足夠快嘅執行能力,嚟揾到嗰啲真正有效嘅策略。
而呢樣,正正係改變緊嘅嘢。
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 內部工作流程:
確認策略規則和參數 獲取指定標的和週期的歷史 OHLCV 數據 從頭計算指標——不依賴任何庫的黑盒 生成明確的入場/出場信號 運行向量化回測:收益率、夏普比率、最大回撤、勝率 輸出權益曲線 + 彙總表 如果樣本內窗口不足 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 內部工作流程:
確認所需數據類型:EOD / 日內 / 基本面 / 實時 選擇對應的 EODHD 接口 構建請求參數(標的格式、日期範圍、週期) 將返回結果規範化為統一列名的 DataFrame 對歷史價格分析應用公司行為調整 緩存結果,避免同一會話中的重複 API 調用 返回可直接用於指標計算的 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 內部工作流程:
將自然語言描述的策略規則解析為明確的條件 將每個條件映射為 pandas/numpy 操作 使用向量化操作計算指標(不逐行循環) 分別構建入場和出場序列 如果指定了時段或交易會話過濾條件,則應用 輸出 DataFrame:[收盤價, 指標, 信號, 持倉] 驗證:無前瞻偏差(所有指標在信號比對前已完成位移)
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 內部工作流程:
基於當前設置計算 ATR 止損距離 應用固定比例倉位(默認:每筆交易風險為賬户的 1%) 檢查投資組合熱度:如果總敞口超過淨值的 5% 則標記警告 計算當前投資組合的歷史 VaR(95% 置信度) 輸出:入場價、止損價、股數、美元風險、R 倍數目標 定義熔斷閾值:如果回撤超過 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 內部工作流程:
通過 EODHD REST API 獲取實時報價和近期 EOD K 線 在內存中維護一個滾動窗口 每根新 K 線到來時重新計算指標 評估信號條件——入場、出場或持倉 信號觸發時:記錄時間戳、標的、價格、指標值 發送預警(打印 / Telegram / 郵件) 從不直接執行訂單 —— 只輸出信號
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 和一個可靠的數據層,瓶頸就從"怎麼實現"轉移到了本來應該在的地方:判斷哪些策略值得測試。
大多數量化交易者不缺想法,缺的是足夠快的執行能力,來找到那些真正有效的策略。
而這,正是正在改變的事情。
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