| name | longbridge-candlestick |
| description | K-line candlestick pattern recognition for stocks listed in HK / US / A-share / Singapore via Longbridge Securities. Identifies 15 classic patterns (hammer, hanging man, engulfing, doji, morning/evening star, three white soldiers/black crows, shooting star, etc.) from OHLCV data and generates a composite bullish/bearish/neutral signal. Triggers: "K线形态", "蜡烛图形态", "锤子线", "吞没形态", "十字星", "早晨之星", "暮色之星", "三白兵", "三黑鸦", "吊颈线", "射击之星", "K線形態", "蠟燭圖形態", "錘子線", "吞沒形態", "早晨之星", "暮色之星", "candlestick pattern", "hammer", "engulfing", "doji", "morning star", "evening star", "three white soldiers", "shooting star", "K-line pattern".
|
| license | MIT |
| metadata | {"author":"longbridge","version":"1.0.0","risk_level":"read_only","requires_login":false,"default_install":true,"requires_mcp":false,"tier":"read"} |
longbridge-candlestick
Identifies 15 classic K-line candlestick patterns from recent OHLCV data and produces a composite bullish / bearish / neutral signal with per-pattern explanations.
Response language: match the user's input language — Simplified Chinese / Traditional Chinese / English.
When to use
- "NVDA 最近有什么 K 线形态", "700.HK 是否出现锤子线"
- "TSLA candlestick patterns", "看看吞没形态", "有没有早晨之星"
- "600519.SH K線形態分析", "是否出現三白兵"
Workflow
- Resolve the symbol to
<CODE>.<MARKET> format.
- Fetch 200 daily candles:
longbridge kline <SYMBOL> --period day --count 200 --format json
- Run the Python analysis below to identify patterns and compute a composite score.
- Report detected patterns (most recent first), each with date, name, and interpretation. Summarise with a composite signal.
CLI
longbridge kline NVDA.US --period day --count 200 --format json
longbridge kline 700.HK --period day --count 200 --format json
longbridge kline 600519.SH --period day --count 200 --format json
Run longbridge kline --help to verify current flag names and defaults.
Python analysis
import pandas as pd, json, sys
data = json.loads(sys.stdin.read())
df = pd.DataFrame(data)
df = df.rename(columns={"open": "o", "high": "h", "low": "l", "close": "c", "volume": "v"})
df[["o","h","l","c","v"]] = df[["o","h","l","c","v"]].apply(pd.to_numeric)
body = (df["c"] - df["o"]).abs()
rng = df["h"] - df["l"]
upper = df.apply(lambda r: r["h"] - max(r["c"], r["o"]), axis=1)
lower = df.apply(lambda r: min(r["c"], r["o"]) - r["l"], axis=1)
bull = df["c"] > df["o"]
signals, score = [], 0
for i in range(max(0, len(df)-5), len(df)):
r = df.iloc[i]; b = body.iloc[i]; u = upper.iloc[i]; lo = lower.iloc[i]; rg = rng.iloc[i]
b < * rg:
signals.append((df[].iloc[i], , ))
lo > *b u < *b bull.iloc[i]:
signals.append((df[].iloc[i], , +))
lo > *b u < *b bull.iloc[i]:
signals.append((df[].iloc[i], , +))
lo > *b u < *b i > df[].iloc[i-] < df[].iloc[i]:
signals.append((df[].iloc[i], , -))
u > *b lo < *b bull.iloc[i-] i > :
signals.append((df[].iloc[i], , -))
u > *b lo < *b:
signals.append((df[].iloc[i], , +))
b > *rg bull.iloc[i]:
signals.append((df[].iloc[i], , +))
b > *rg bull.iloc[i]:
signals.append((df[].iloc[i], , -))
i ((, (df)-), (df)):
p, c_ = df.iloc[i-], df.iloc[i]
pb, cb = body.iloc[i-], body.iloc[i]
bull.iloc[i-] bull.iloc[i] c_[] < p[] c_[] > p[]:
signals.append((df[].iloc[i], , +)); score +=
bull.iloc[i-] bull.iloc[i] c_[] > p[] c_[] < p[]:
signals.append((df[].iloc[i], , -)); score -=
bull.iloc[i-] bull.iloc[i] c_[] < p[] c_[] > (p[]+p[])/:
signals.append((df[].iloc[i], , +)); score +=
bull.iloc[i-] bull.iloc[i] c_[] > p[] c_[] < (p[]+p[])/:
signals.append((df[].iloc[i], , -)); score -=
i ((, (df)-), (df)):
a, b_, c_ = df.iloc[i-], df.iloc[i-], df.iloc[i]
sb = body.iloc[i-]
bull.iloc[i-] sb < *(body.iloc[i-]) bull.iloc[i] c_[] > (a[]+a[])/:
signals.append((df[].iloc[i], , +)); score +=
bull.iloc[i-] sb < *(body.iloc[i-]) bull.iloc[i] c_[] < (a[]+a[])/:
signals.append((df[].iloc[i], , -)); score -=
bull.iloc[i-] bull.iloc[i-] bull.iloc[i] c_[]>b_[]>a[]:
signals.append((df[].iloc[i], , +)); score +=
bull.iloc[i-] bull.iloc[i-] bull.iloc[i] c_[]<b_[]<a[]:
signals.append((df[].iloc[i], , -)); score -=
_, _, s signals:
score += s
composite = score >= ( score <= - )
()
ts, name, s signals:
()
Output
Report format (3 languages):
| 字段 / 欄位 / Field | 简体 / 繁體 / English |
|---|
| 检测到的形态 | 检测到的形态 / 檢測到的形態 / Detected patterns |
| 综合信号 | 看多 / 看空 / 中性 |
| 解释 | 解释 / 解釋 / Explanation |
Present at most 5 most-recent patterns. Conclude with the composite signal and a one-sentence interpretation.
Error handling
| Situation | 简体回复 / 繁體回覆 / English reply |
|---|
command not found: longbridge | 请安装 longbridge-terminal / 請安裝 longbridge-terminal / Install longbridge-terminal first |
stderr not logged in / unauthorized | 请运行 longbridge auth login / 請執行 longbridge auth login / Run longbridge auth login |
| Other stderr | 直接展示错误信息 / 直接顯示錯誤訊息 / Surface error verbatim |
MCP fallback
When the CLI is unavailable, fall back to the MCP server. Discover available tools from the MCP server's tool list at runtime.
Related skills
longbridge-kline — raw OHLCV data and charting
longbridge-technical — indicator-based signals (MACD, RSI, KDJ, etc.)
longbridge-ichimoku — Ichimoku Cloud system
longbridge-quote — real-time price and reference data