opencode-skills-collection 4.0.73 → 4.0.75
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bundled-skills/.antigravity-install-manifest.json +16 -1
- package/bundled-skills/claude-api/SKILL.md +4 -4
- package/bundled-skills/claude-api/curl/examples.md +5 -5
- package/bundled-skills/claude-api/java/claude-api.md +1 -1
- package/bundled-skills/claude-api/php/claude-api.md +2 -2
- package/bundled-skills/claude-api/python/claude-api/README.md +13 -13
- package/bundled-skills/claude-api/python/claude-api/batches.md +3 -3
- package/bundled-skills/claude-api/python/claude-api/files-api.md +3 -3
- package/bundled-skills/claude-api/python/claude-api/streaming.md +6 -6
- package/bundled-skills/claude-api/python/claude-api/tool-use.md +19 -19
- package/bundled-skills/claude-api/ruby/claude-api.md +3 -3
- package/bundled-skills/claude-api/shared/error-codes.md +2 -2
- package/bundled-skills/claude-api/shared/live-sources.md +1 -1
- package/bundled-skills/claude-api/shared/models.md +4 -4
- package/bundled-skills/claude-api/shared/tool-use-concepts.md +2 -2
- package/bundled-skills/claude-api/typescript/claude-api/README.md +12 -12
- package/bundled-skills/claude-api/typescript/claude-api/batches.md +2 -2
- package/bundled-skills/claude-api/typescript/claude-api/files-api.md +1 -1
- package/bundled-skills/claude-api/typescript/claude-api/streaming.md +4 -4
- package/bundled-skills/claude-api/typescript/claude-api/tool-use.md +14 -14
- package/bundled-skills/electron-drive-skill/LICENSE +21 -0
- package/bundled-skills/electron-drive-skill/README.md +172 -0
- package/bundled-skills/electron-drive-skill/SKILL.md +237 -0
- package/bundled-skills/electron-drive-skill/drive.config.json.example +10 -0
- package/bundled-skills/electron-drive-skill/package.json +28 -0
- package/bundled-skills/electron-drive-skill/scripts/daemon.mjs +352 -0
- package/bundled-skills/electron-drive-skill/scripts/drive.mjs +250 -0
- package/bundled-skills/electron-drive-skill/scripts/lib.mjs +165 -0
- package/bundled-skills/electron-drive-skill/scripts/lib.test.mjs +56 -0
- package/bundled-skills/film-crew/SKILL.md +129 -0
- package/bundled-skills/film-crew/references/model-prompting.md +89 -0
- package/bundled-skills/film-crew/references/reroll-review.md +46 -0
- package/bundled-skills/film-crew/references/roles/director.md +38 -0
- package/bundled-skills/film-crew/references/roles/dp.md +28 -0
- package/bundled-skills/film-crew/references/roles/editor.md +34 -0
- package/bundled-skills/film-crew/references/roles/gaffer.md +30 -0
- package/bundled-skills/film-crew/references/roles/production-designer.md +43 -0
- package/bundled-skills/film-crew/references/roles/script-supervisor.md +35 -0
- package/bundled-skills/film-crew/references/roles/sound.md +23 -0
- package/bundled-skills/film-crew/references/templates/shot-list.md +38 -0
- package/bundled-skills/film-crew/references/unslop.md +29 -0
- package/bundled-skills/mcp-dependency-drift-audit/SKILL.md +169 -0
- package/bundled-skills/nexrad-mosaic-access/SKILL.md +297 -0
- package/bundled-skills/nexrad-mosaic-construction/SKILL.md +277 -0
- package/bundled-skills/nexrad-product-access/SKILL.md +258 -0
- package/bundled-skills/nexrad-radar-visualization/SKILL.md +318 -0
- package/bundled-skills/radar-satellite-analysis/SKILL.md +314 -0
- package/bundled-skills/testdriver-e2e-testing/SKILL.md +121 -0
- package/bundled-skills/traderspy-market-briefing/SKILL.md +132 -0
- package/bundled-skills/traderspy-market-screener/SKILL.md +182 -0
- package/bundled-skills/traderspy-market-screener/references/condition-cookbook.md +70 -0
- package/bundled-skills/traderspy-position-check/SKILL.md +130 -0
- package/bundled-skills/traderspy-position-check/references/risk-math.md +60 -0
- package/bundled-skills/traderspy-smart-money/SKILL.md +151 -0
- package/bundled-skills/traderspy-smart-money/references/exchange-notes.md +40 -0
- package/bundled-skills/traderspy-technical-analysis/SKILL.md +162 -0
- package/bundled-skills/traderspy-technical-analysis/references/derivatives-guide.md +57 -0
- package/bundled-skills/traderspy-technical-analysis/references/indicator-guide.md +47 -0
- package/bundled-skills/traderspy-trading-signals/SKILL.md +156 -0
- package/bundled-skills/traderspy-trading-signals/references/signal-fields.md +64 -0
- package/bundled-skills/unified-ai-gateway/SKILL.md +3 -3
- package/package.json +1 -1
- package/skills_index.json +499 -1
|
@@ -0,0 +1,162 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: traderspy-technical-analysis
|
|
3
|
+
description: "Read one crypto futures pair with TraderSpy: 19 indicators on up to 3 timeframes in one call, key levels, funding, open interest and positioning. Use for \"analyse BTC\" or \"is SOL oversold\"."
|
|
4
|
+
category: finance
|
|
5
|
+
risk: safe
|
|
6
|
+
source: "https://github.com/target1m/traderspy-mcp/tree/069aae5a84640d671f92705a2e3bc0b62efca1e0/skills/technical-analysis"
|
|
7
|
+
source_repo: target1m/traderspy-mcp
|
|
8
|
+
source_type: official
|
|
9
|
+
date_added: "2026-09-25"
|
|
10
|
+
author: target1m
|
|
11
|
+
tags: [traderspy, crypto, technical-analysis, indicators, mcp]
|
|
12
|
+
tools: [claude, cursor, gemini]
|
|
13
|
+
license: MIT
|
|
14
|
+
license_source: "https://github.com/target1m/traderspy-mcp/blob/069aae5a84640d671f92705a2e3bc0b62efca1e0/LICENSE"
|
|
15
|
+
---
|
|
16
|
+
|
|
17
|
+
# TraderSpy Technical Analysis
|
|
18
|
+
|
|
19
|
+
One good read of a chart is three things in order: where price is in its structure (trend and
|
|
20
|
+
levels), what momentum and volatility are doing, and how the derivatives market is positioned
|
|
21
|
+
around it. TraderSpy gives all three in at most two calls. Spend the calls well — the user's quota
|
|
22
|
+
is finite — and quote the numbers, not adjectives.
|
|
23
|
+
|
|
24
|
+
## When to Use
|
|
25
|
+
|
|
26
|
+
- Use when the user asks about a coin's chart, trend, momentum, support and resistance, or where a level such as the 200 EMA sits.
|
|
27
|
+
- Use for "analyse BTC", "how does SOL look", "is X overbought / oversold", "what do the indicators say" or "is this a good entry", even when the user only names a coin.
|
|
28
|
+
- Use when the question is whether funding is high or open interest is building, or when the user wants price or candle data.
|
|
29
|
+
- For scanning many coins by conditions use `@traderspy-market-screener`; for whale positions use `@traderspy-smart-money`.
|
|
30
|
+
|
|
31
|
+
## Tools
|
|
32
|
+
|
|
33
|
+
| Tool | Use it for | Key arguments |
|
|
34
|
+
| --- | --- | --- |
|
|
35
|
+
| `get_technical_indicators` | The chart read | `symbol`, `intervals` (≤ 3) or `interval`, `indicators` (≤ 19), `periods`, `history` 0–20 |
|
|
36
|
+
| `get_derivatives` | Funding, open interest, positioning | `symbols` (≤ 5 Binance USDⓈ-M perps; bare `BTC` is fine) |
|
|
37
|
+
| `get_price` | Live price, 24h high/low/volume/change | `symbols` (≤ 20) |
|
|
38
|
+
| `get_candles` | Raw OHLCV | `symbol`, `interval` 1m/5m/15m/1h/4h/1d, `limit` ≤ 500 |
|
|
39
|
+
| `get_tracked_symbols` | Coverage check | none — only when a symbol returns no data |
|
|
40
|
+
|
|
41
|
+
Symbols are Binance Futures names: `BTCUSDT`, `SOLUSDT`, `1000PEPEUSDT` (1000x-prefixed small
|
|
42
|
+
caps), and tokenized equities/ETFs such as `AAPLUSDT` or `SPYUSDT`. Append `USDT` to a bare coin.
|
|
43
|
+
Hyperliquid-only perps (e.g. HYPE) are tracked under the same naming.
|
|
44
|
+
|
|
45
|
+
## Making the call count
|
|
46
|
+
|
|
47
|
+
- **Multi-timeframe is one quota unit.** For any "how does X look" question pass
|
|
48
|
+
`intervals: ["1h","4h","1d"]` (or `["15m","1h","4h"]` for an intraday user) and get a
|
|
49
|
+
`confluence` verdict — never three separate calls.
|
|
50
|
+
- **Pick indicators for the question.** Default `rsi, macd, ema, bollinger` covers momentum and
|
|
51
|
+
trend. Add `levels` + `pivots` whenever the user cares about entries, targets or "where is
|
|
52
|
+
support"; `atr` for stop distance and volatility; `adx` for trend strength; `supertrend` for a
|
|
53
|
+
clean trend state; `obv` / `mfi` when volume confirmation matters; `ichimoku` / `keltner` only
|
|
54
|
+
when asked. Eight to ten well-chosen indicators is a full read; all 19 is noise.
|
|
55
|
+
- **`periods`** lets you honour the user's settings (`{"ema":[9,21,55,200],"rsi":7}`); an unknown
|
|
56
|
+
key is rejected, so use the documented names only.
|
|
57
|
+
- **Add `get_derivatives`** when the question involves "why is it moving", crowding, funding,
|
|
58
|
+
open interest, leverage, liquidations, or when the user is about to lean on a directional call —
|
|
59
|
+
candles cannot see positioning.
|
|
60
|
+
- `get_candles` is for when the user wants the data itself (to chart, export or compute something
|
|
61
|
+
custom). Do not fetch candles to eyeball indicators the technicals tool already computes.
|
|
62
|
+
|
|
63
|
+
## Reading the response
|
|
64
|
+
|
|
65
|
+
**Shape.** One timeframe → top-level `indicators` + `summary`. Several → `timeframes[]` (each
|
|
66
|
+
with `interval`, `price`, `candles`, `indicators`, `summary`) plus `confluence` `{ aligned, bias,
|
|
67
|
+
byInterval }`; the top-level `interval`/`price` then name the first timeframe only. `settings`
|
|
68
|
+
echoes what was computed; `warnings[]` lists anything that was thinned or missing.
|
|
69
|
+
|
|
70
|
+
**Every indicator** carries `value`, `previous`, `direction` (rising / falling / flat) and a short
|
|
71
|
+
`series` (oldest → newest), plus its own fields — `zone` on RSI/Stochastic/CCI/MFI/Williams,
|
|
72
|
+
`crossover` on MACD/Stochastic, `stack`/`pricePosition` on EMA, `±DI` and `strength` on ADX,
|
|
73
|
+
`trend`/`flipped`/`barsSinceFlip` on SuperTrend, `divergence` on RSI/MACD/OBV. `{ value: null,
|
|
74
|
+
reason: "insufficient_data" }` means the tape is too short for that period — say so, do not
|
|
75
|
+
substitute.
|
|
76
|
+
|
|
77
|
+
**`summary` is the spine of the read.** `bias` (bullish / bearish / neutral) is computed from a
|
|
78
|
+
FIXED set (RSI 14, MACD, EMA 20/50/200, ADX 14, ATR 14, BB 20/2, volume 20) regardless of what
|
|
79
|
+
you requested, so it is comparable between calls; `score` is its internal vote (|score| ≥ 30 sets
|
|
80
|
+
a bias). `trend` (direction, strength, emaStack, priceVsEma200), `momentum` (rsiZone, macdState),
|
|
81
|
+
`volatility` (atrPct, atrPercentile 0–100, squeeze, state), `volume.ratioVsAverage`, `patterns[]`
|
|
82
|
+
(candlestick finders on the last two bars) and `notes[]` — plain-language sentences written to be
|
|
83
|
+
quoted. Build the answer from the notes, then add the numbers.
|
|
84
|
+
|
|
85
|
+
**`levels`** (nearest three per side from swing highs/lows over 300 bars): `price`, `touches`,
|
|
86
|
+
`distancePct`; `range.positionPct` (0 = at the low of the lookback, 100 = at the high);
|
|
87
|
+
`fibonacci` (the dominant leg with `retracedPct` and the nearest level above/below);
|
|
88
|
+
`volumeProfile` (`poc`, value area, `pricePosition`). **`pivots`** are classic floor pivots from
|
|
89
|
+
the previous DAILY candle whatever the timeframe. Together they give you a levels table; distance
|
|
90
|
+
in % is what a user can act on.
|
|
91
|
+
|
|
92
|
+
**`confluence.aligned`** is true only when every timeframe with data agrees on a non-neutral bias.
|
|
93
|
+
"Aligned bearish on 1h/4h/1d" is a strong statement; "4h bullish, 1d neutral" is a pullback
|
|
94
|
+
question. Say which.
|
|
95
|
+
|
|
96
|
+
**Derivatives** (`get_derivatives`): `funding.label` — `extreme_longs_paying` / `longs_paying` /
|
|
97
|
+
`neutral` / `shorts_paying` / `extreme_shorts_paying` (longs pay at ≥ +0.03% per 8h, extreme at
|
|
98
|
+
≥ +0.10%; shorts pay at ≤ −0.01%, extreme at ≤ −0.05%; Binance's baseline is +0.01%; quote
|
|
99
|
+
`annualizedPct`); `openInterest.regime` — `new_longs` / `short_covering` / `new_shorts` /
|
|
100
|
+
`long_liquidation` / `flat` (needs ≥ 1% OI and ≥ 0.5% price change over 24h);
|
|
101
|
+
`positioning.label` — `long_heavy` (long/short ratio ≥ 1.5, i.e. ≥ 60% long) / `balanced` /
|
|
102
|
+
`short_heavy` (≤ 0.67, i.e. ≤ 40% long), read from the top-trader POSITION ratio first;
|
|
103
|
+
`takerBuySellRatio` is the last hour's aggressor flow. Data is at most 60 s old. `notes[]` are
|
|
104
|
+
quotable. Details in `references/derivatives-guide.md`.
|
|
105
|
+
|
|
106
|
+
## Presenting
|
|
107
|
+
|
|
108
|
+
For a single-coin read ALWAYS use this order, and keep it to what the user asked:
|
|
109
|
+
|
|
110
|
+
1. **Price line** — symbol, price, time of the read, 24h change if you fetched it.
|
|
111
|
+
2. **Per timeframe, one line each** — bias, trend (EMA stack and ADX), momentum (RSI zone, MACD
|
|
112
|
+
state), volatility (ATR %, squeeze), with the key number after each label.
|
|
113
|
+
3. **Confluence** — aligned or not, and what the disagreement means.
|
|
114
|
+
4. **Levels table** — nearest support and resistance with distance %, the pivot, the nearest
|
|
115
|
+
Fibonacci level, the value-area edge if price is near it.
|
|
116
|
+
5. **Derivatives line** (if fetched) — funding label + annualized, OI regime, top-trader long %.
|
|
117
|
+
6. **What would change the read** — the one or two levels or readings that flip the picture
|
|
118
|
+
(e.g. "a 4h close above 79,325 resistance with OI rising would turn the 4h bias bullish").
|
|
119
|
+
7. One plain sentence: crypto derivatives are high-risk; this is market information, not advice.
|
|
120
|
+
|
|
121
|
+
Use `RSI(14) 41.3 — neutral, falling` style labelling so the period and the direction are always
|
|
122
|
+
visible. Percentages to one decimal; prices to the precision the tool returned.
|
|
123
|
+
|
|
124
|
+
## Conduct
|
|
125
|
+
|
|
126
|
+
- Describe the chart; do not prescribe the trade. If the user asks "is this a good entry", answer
|
|
127
|
+
with what supports the entry, what argues against it, where the invalidation sits, and hand the
|
|
128
|
+
decision back. Never tell the user to buy, sell, size or leverage.
|
|
129
|
+
- Indicators describe the past bars they were computed on; do not present a bias as a forecast or
|
|
130
|
+
imply any outcome is assured.
|
|
131
|
+
- Nothing in this connector trades — no order, close, transfer or withdrawal tool exists, by
|
|
132
|
+
design. If asked to execute, say so plainly; the decision and the trade stay with the user.
|
|
133
|
+
- Quote only what the tools returned. If an indicator is `insufficient_data` or a symbol is not
|
|
134
|
+
tracked, say so instead of estimating.
|
|
135
|
+
- When the answer is about a specific trade idea, end with one plain sentence that crypto
|
|
136
|
+
derivatives are high-risk and this is market information, not financial advice — once per
|
|
137
|
+
answer.
|
|
138
|
+
|
|
139
|
+
Per-indicator fields and conventional readings: `references/indicator-guide.md`.
|
|
140
|
+
|
|
141
|
+
## Examples
|
|
142
|
+
|
|
143
|
+
```text
|
|
144
|
+
Analyse BTC on the 1h, 4h and 1d with funding and open interest.
|
|
145
|
+
Is SOL overbought? Where are the nearest support and resistance levels?
|
|
146
|
+
Where is the 200 EMA on ETH, and is funding stretched?
|
|
147
|
+
```
|
|
148
|
+
|
|
149
|
+
## Limitations
|
|
150
|
+
|
|
151
|
+
- Needs the hosted TraderSpy MCP server connected in the client (`https://mcp.traderspy.app/mcp`, Streamable HTTP), authorized with OAuth or a personal key from https://traderspy.app/mcp. A free TraderSpy account is enough. Without the server the skill has no data to work from.
|
|
152
|
+
- Tool calls are metered per day: 300 on the free tier, 5,000 on premium.
|
|
153
|
+
- Every tool is read-only. Nothing here places, closes or modifies an order, and there is no withdrawal or transfer tool.
|
|
154
|
+
- The output is market data and analysis for the user's own research, not investment advice.
|
|
155
|
+
- A multi-timeframe read is one tool call; adding derivatives makes it two.
|
|
156
|
+
- Symbols use Binance Futures naming (`BTCUSDT`, `1000PEPEUSDT`). `get_derivatives` covers Binance USDⓈ-M perpetuals, up to five per call.
|
|
157
|
+
|
|
158
|
+
## Related Skills
|
|
159
|
+
|
|
160
|
+
- `@traderspy-market-screener` - many coins at once, and backtests of a condition
|
|
161
|
+
- `@traderspy-smart-money` - what tracked top traders hold
|
|
162
|
+
- `@traderspy-position-check` - the same read applied to an open position
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
# Derivatives guide — `get_derivatives`
|
|
2
|
+
|
|
3
|
+
Source: Binance USDⓈ-M perpetual futures public endpoints, snapshot cached 60 s. One entry per
|
|
4
|
+
symbol; an unknown or non-Binance symbol comes back as `{ symbol, error, message }`.
|
|
5
|
+
|
|
6
|
+
## Fields
|
|
7
|
+
|
|
8
|
+
- `markPrice`, `indexPrice`, `premiumPct` — mark vs index; a persistent positive premium is
|
|
9
|
+
another face of long crowding.
|
|
10
|
+
- `funding`: `rate` (raw, per 8h), `ratePct`, `annualizedPct`, `nextFundingTime`,
|
|
11
|
+
`minutesToNextFunding`, `avg24hPct`, `avg3dPct`, `label`.
|
|
12
|
+
- `openInterest`: `contracts`, `valueUsd`, `change4hPct`, `change24hPct`, `priceChange24hPct`,
|
|
13
|
+
`regime`.
|
|
14
|
+
- `positioning`: `globalLongShortRatio`, `globalLongPct` (all accounts), `topTraderLongShortRatio`,
|
|
15
|
+
`topTraderLongPct` (top traders, by position size), `takerBuySellRatio` (last hour),
|
|
16
|
+
`label`.
|
|
17
|
+
- `notes[]` — the interpretation in sentences; quote them.
|
|
18
|
+
|
|
19
|
+
## Labels
|
|
20
|
+
|
|
21
|
+
| `funding.label` | Rule (per 8h) | Reading |
|
|
22
|
+
| --- | --- | --- |
|
|
23
|
+
| `extreme_shorts_paying` | ≤ −0.05% | Shorts crowded and paying heavily; squeeze risk |
|
|
24
|
+
| `shorts_paying` | ≤ −0.01% | Shorts paying longs |
|
|
25
|
+
| `neutral` | between −0.01% and +0.03% (Binance's baseline is +0.01%) | No crowding signal |
|
|
26
|
+
| `longs_paying` | ≥ +0.03% | Longs paying shorts — leverage leaning long |
|
|
27
|
+
| `extreme_longs_paying` | ≥ +0.10% | Longs crowded and paying heavily; long-squeeze / flush risk |
|
|
28
|
+
|
|
29
|
+
Quote `annualizedPct` alongside — "0.05%/8h" means little to most readers, "≈ 55% APR" does.
|
|
30
|
+
|
|
31
|
+
| `openInterest.regime` | OI 24h | Price 24h | Reading |
|
|
32
|
+
| --- | --- | --- | --- |
|
|
33
|
+
| `new_longs` | up | up | Fresh money buying; trend being funded |
|
|
34
|
+
| `short_covering` | down | up | Rally driven by shorts closing — less durable |
|
|
35
|
+
| `new_shorts` | up | down | Fresh shorts pressing; trend being funded to the downside |
|
|
36
|
+
| `long_liquidation` | down | down | Longs being flushed — capitulation-type move |
|
|
37
|
+
| `flat` | < 1% OI or < 0.5% price | No meaningful OI story |
|
|
38
|
+
|
|
39
|
+
| `positioning.label` | Rule | Reading |
|
|
40
|
+
| --- | --- | --- |
|
|
41
|
+
| `long_heavy` | long/short ratio ≥ 1.5 (≈ 60%+ long) | Leaders leaning long |
|
|
42
|
+
| `balanced` | between | No lean |
|
|
43
|
+
| `short_heavy` | ratio ≤ 0.67 (≈ 40% or less long) | Leaders leaning short |
|
|
44
|
+
|
|
45
|
+
Top-trader positioning (by position size) is read first because it is the informed cohort; the
|
|
46
|
+
all-account ratio shows the crowd. When they disagree ("top traders 69% long, all accounts 45%
|
|
47
|
+
long"), that disagreement is the interesting sentence.
|
|
48
|
+
|
|
49
|
+
## Combining with the chart
|
|
50
|
+
|
|
51
|
+
- Chart bullish + `new_longs` + `neutral` funding: a trend with fuel and no crowding.
|
|
52
|
+
- Chart bullish + `extreme_longs_paying`: extended; flush risk is the caveat to state.
|
|
53
|
+
- Chart bearish + `short_covering` bounce: a relief rally, not a reversal, until OI rebuilds.
|
|
54
|
+
- `long_liquidation` with `extreme_shorts_paying` afterwards: the flush may be done; watch whether
|
|
55
|
+
OI rebuilds.
|
|
56
|
+
|
|
57
|
+
These are conventional readings to explain the data, not predictions.
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
# Indicator guide — fields and conventional readings
|
|
2
|
+
|
|
3
|
+
Every indicator object carries `value`, `previous`, `direction` (rising / falling / flat) and
|
|
4
|
+
`series` (history + 1 values, oldest → newest). Extra fields per indicator below. "Reading" is
|
|
5
|
+
the conventional interpretation, not a prediction.
|
|
6
|
+
|
|
7
|
+
| Key | Extra fields | Reading |
|
|
8
|
+
| --- | --- | --- |
|
|
9
|
+
| `rsi` | `period`, `zone` (oversold < 30, neutral, overbought > 70), `divergence` `{type, barsAgo, priceFrom, priceTo, oscillatorFrom, oscillatorTo}` or null | 40–60 is neutral; a rising RSI from 30 is recovering momentum, not "still oversold". A bearish divergence (price higher high, RSI lower high) within the last ~60 bars is worth one sentence |
|
|
10
|
+
| `macd` | `periods {fast, slow, signal}`, `macd`, `signal`, `histogram`, `previous {…}`, `crossover` (bullish / bearish / null — on the latest bar only), `divergence` | Histogram sign + direction is the state (`summary.momentum.macdState`: positive_rising, positive_falling, negative_rising, negative_falling). A cross on the latest bar is an event; report it as such |
|
|
11
|
+
| `ema` / `sma` | `values[] {period, value, previous, direction, priceAbove, distancePct, series}`, `stack` (bullish = fast > mid > slow, bearish, mixed), `pricePosition` (above_all / between / below_all) | Stack + price position is the trend structure. `distancePct` from the 200 is the "how extended" number |
|
|
12
|
+
| `bollinger` | `upper`, `middle`, `lower`, `bandwidthPct`, `percentB`, `position` (above_upper / upper_half / lower_half / below_lower), `squeeze` | %B > 1 or < 0 = outside the bands; `squeeze` true = bands inside the Keltner channel (TTM) — expect expansion, direction unknown |
|
|
13
|
+
| `atr` | `period`, `atrPct` | Volatility in price units and as % of price. A stop tighter than ~1 ATR is inside noise on that timeframe |
|
|
14
|
+
| `adx` | `plusDI`, `minusDI`, `strength` (absent / weak / strong / very_strong), `diBias` (bullish when +DI > −DI) | ADX measures strength, not direction; the DI bias gives the direction |
|
|
15
|
+
| `stochastic` | `k`, `d`, `zone`, `crossover` | < 20 oversold, > 80 overbought; a %K/%D cross inside a zone is the classic trigger |
|
|
16
|
+
| `obv` | `average`, `slopePct`, `divergence` (bullish / bearish / none) | Volume confirmation. `divergence: bullish` = price fell but OBV rose (accumulation). Use the direction and the divergence, not the raw level, which depends on where the window starts |
|
|
17
|
+
| `vwap` | `period`, `priceAbove`, `distancePct` | Rolling VWAP over `period` bars (default 48); above = buyers in control over that window |
|
|
18
|
+
| `cci` | `zone` | > 100 / < −100 = extended |
|
|
19
|
+
| `mfi` | `zone` | Volume-weighted RSI; < 20 / > 80 |
|
|
20
|
+
| `williamsR` | `zone` | −100…0; < −80 oversold, > −20 overbought |
|
|
21
|
+
| `roc` | `period` | % change over the period; sign and direction |
|
|
22
|
+
| `supertrend` | `trend` (up / down), `previousTrend`, `flipped`, `barsSinceFlip`, `distancePct` | A clean trend state with a trailing level; `flipped: true` is an event, `barsSinceFlip` says how mature the trend is |
|
|
23
|
+
| `ichimoku` | `tenkan`, `kijun`, `tkCross`, `tkAboveKijun`, `cloud {spanA, spanB, top, bottom, color}`, `futureCloud {spanA, spanB, color}`, `pricePosition` (above_cloud / in_cloud / below_cloud), `chikouAbovePrice`, `signal` (bullish / bearish / neutral) | Price vs cloud is the trend, `futureCloud.color` is where the cloud is heading, TK cross is the trigger; `signal` is bullish only when all three agree |
|
|
24
|
+
| `keltner` | `periods {ema, atr, multiplier}`, `upper`, `middle`, `lower` | Volatility channel (EMA ± ATR × multiplier); Bollinger inside it is the TTM squeeze |
|
|
25
|
+
| `pivots` | `basis: previous_day`, `source {openTime, high, low, close}`, `pivot`, `r1…r3`, `s1…s3`, `priceAbovePivot`, `nearestResistance`, `nearestSupport` | Classic floor pivots from yesterday's daily candle regardless of the requested timeframe |
|
|
26
|
+
| `levels` | `resistance[]` / `support[]` `{price, touches, swingHighs, swingLows, barsSinceLastTouch, distancePct}`, `range {high, low, positionPct}`, `fibonacci {leg, legStart, legEnd, retracedPct, levels[], nearestAbove, nearestBelow}`, `volumeProfile {poc, pocVolumePct, valueAreaHigh, valueAreaLow, pricePosition, nodes[]}` | More `touches` = more respected level. `range.positionPct` says where price sits in its 300-bar range. The Fibonacci leg is the dominant swing of the lookback; `retracedPct` is how much of it has been given back |
|
|
27
|
+
|
|
28
|
+
## `summary` fields
|
|
29
|
+
|
|
30
|
+
- `bias`: bullish / bearish / neutral; `score`: signed vote sum (|score| ≥ 30 sets a bias).
|
|
31
|
+
- `trend`: `direction` (up / down / sideways), `strength` (absent / weak / moderate / strong),
|
|
32
|
+
`adx`, `emaStack`, `priceVsEma200`.
|
|
33
|
+
- `momentum`: `rsi`, `rsiZone`, `macdHistogram`, `macdState`.
|
|
34
|
+
- `volatility`: `atrPct`, `atrPercentile` (rank of today's ATR% in the last 100 bars — 90 means
|
|
35
|
+
unusually volatile), `bollingerBandwidthPct`, `state` (compressed / normal / expanded),
|
|
36
|
+
`squeeze`, `squeezeBars`.
|
|
37
|
+
- `volume.ratioVsAverage`: current bar ÷ 20-bar average (the current bar is partial on the live
|
|
38
|
+
candle — a ratio of 0.2 early in a 4h bar is normal).
|
|
39
|
+
- `patterns[]`: `{name, bias, barsAgo}` from 18 candlestick finders (engulfing, hammer, doji
|
|
40
|
+
variants, morning/evening star…). Patterns add notes, not score.
|
|
41
|
+
- `notes[]`: quotable sentences; use them.
|
|
42
|
+
|
|
43
|
+
## Timeframe defaults that read well
|
|
44
|
+
|
|
45
|
+
- Intraday question → `["15m","1h","4h"]`
|
|
46
|
+
- "How does X look" with no horizon → `["1h","4h","1d"]`
|
|
47
|
+
- Position / investor framing → `["4h","1d"]` plus `levels` and `pivots`
|
|
@@ -0,0 +1,156 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: traderspy-trading-signals
|
|
3
|
+
description: "Fetch and explain TraderSpy's AI crypto futures signals: entry, take-profit ladder, stop, triggers, status against the live price, and how recent signals resolved. Use for \"latest signals\"."
|
|
4
|
+
category: finance
|
|
5
|
+
risk: safe
|
|
6
|
+
source: "https://github.com/target1m/traderspy-mcp/tree/069aae5a84640d671f92705a2e3bc0b62efca1e0/skills/trading-signals"
|
|
7
|
+
source_repo: target1m/traderspy-mcp
|
|
8
|
+
source_type: official
|
|
9
|
+
date_added: "2026-09-25"
|
|
10
|
+
author: target1m
|
|
11
|
+
tags: [traderspy, crypto, trading-signals, futures, mcp]
|
|
12
|
+
tools: [claude, cursor, gemini]
|
|
13
|
+
license: MIT
|
|
14
|
+
license_source: "https://github.com/target1m/traderspy-mcp/blob/069aae5a84640d671f92705a2e3bc0b62efca1e0/LICENSE"
|
|
15
|
+
---
|
|
16
|
+
|
|
17
|
+
# TraderSpy Trading Signals
|
|
18
|
+
|
|
19
|
+
TraderSpy's AI signals are automated reads of the market: a named preset fires when several
|
|
20
|
+
technical conditions line up on one crypto futures pair, a validator scores the alignment, and
|
|
21
|
+
the published signal carries an entry, a take-profit ladder, a stop and — later — what actually
|
|
22
|
+
happened. The signals feed at https://traderspy.app/signals publishes every one with its resolved
|
|
23
|
+
outcome. Your job is to fetch,
|
|
24
|
+
translate and contextualise them; the decision stays with the user.
|
|
25
|
+
|
|
26
|
+
## When to Use
|
|
27
|
+
|
|
28
|
+
- Use when the user mentions crypto signals, AI alerts, "any setups", "what is the AI seeing", long or short ideas, or TraderSpy alerts, even without the word "signal".
|
|
29
|
+
- Use to explain one signal's entry, take-profit and stop levels and the conditions that triggered it, or whether it still stands at the current price.
|
|
30
|
+
- Use when the user asks how signals have resolved (hits vs stops) over the last 4h to 7d.
|
|
31
|
+
- Not for placing trades (no tool can), not for top-trader positioning (`@traderspy-smart-money`), not for indicator reads on a coin (`@traderspy-technical-analysis`).
|
|
32
|
+
|
|
33
|
+
## Tools
|
|
34
|
+
|
|
35
|
+
| Tool | Use it for | Key arguments |
|
|
36
|
+
| --- | --- | --- |
|
|
37
|
+
| `get_signals` | The list: newest first | `limit` 1–50 (default 20), `skip`, `importance` high / medium / low / all, `coin` |
|
|
38
|
+
| `get_signal_details` | One signal in full, plus the live price | `signalId` (the `id` from the list) |
|
|
39
|
+
| `get_signal_stats` | Aggregate hit rate over a window | `period` 4h / 8h / 24h / 7d |
|
|
40
|
+
|
|
41
|
+
Three argument behaviours that are easy to get wrong:
|
|
42
|
+
|
|
43
|
+
- **`importance` is inclusive downward.** `high` returns high only, `medium` returns high AND
|
|
44
|
+
medium, `low` returns everything. To show "medium and above" pass `medium`, not `low`.
|
|
45
|
+
- **`coin` is a prefix match** on the pair name. `BTC` matches `BTCUSDT` and also `BTCDOMUSDT`;
|
|
46
|
+
check the `coin` field of each row before presenting "BTC signals".
|
|
47
|
+
- **`limit` is what gets rendered.** In hosts that draw signal cards, every fetched row becomes a
|
|
48
|
+
card. If the user asks for "the last 5", pass `limit: 5` — do not fetch 20 and show 5.
|
|
49
|
+
|
|
50
|
+
## What a signal row contains
|
|
51
|
+
|
|
52
|
+
`strategyName` (the preset, e.g. "OBV Divergence Buy (4H)") · `action` buy / sell · `timeframe`
|
|
53
|
+
1h / 4h / 1d · `price` at trigger · `targets[]` as `{label, type, pct}` where `pct` is measured from
|
|
54
|
+
`price` · `triggeredConditions[]` in plain language · `importance` · `signalStrength` weak /
|
|
55
|
+
moderate / strong / very_strong · `resolutionStatus` · `createdAt`.
|
|
56
|
+
|
|
57
|
+
Convert target percentages to prices before showing them — users think in prices:
|
|
58
|
+
|
|
59
|
+
- buy: TP = price × (1 + pct/100), SL = price × (1 − pct/100)
|
|
60
|
+
- sell: TP = price × (1 − pct/100), SL = price × (1 + pct/100)
|
|
61
|
+
- reward-to-risk at TP1 = TP1 pct ÷ SL pct (a 0.7 R:R is normal for this system, whose first target
|
|
62
|
+
sits close to entry; read it together with the hit rate from `get_signal_stats`, and do not call a
|
|
63
|
+
sub-1 R:R "bad" on its own).
|
|
64
|
+
|
|
65
|
+
`resolutionStatus` is the outcome so far:
|
|
66
|
+
|
|
67
|
+
| Status | Meaning |
|
|
68
|
+
| --- | --- |
|
|
69
|
+
| `pending` | Still inside its tracking window, nothing hit yet |
|
|
70
|
+
| `tp1_hit` / `tp2_hit` / `tp3_hit` | Highest take-profit reached (a later stop touch does not downgrade it) |
|
|
71
|
+
| `profit_locked` | Trend exhaustion detected before TP1; a partial gain was locked |
|
|
72
|
+
| `stop` | Stop level touched before any take-profit |
|
|
73
|
+
| `expired` | Window ended with neither side touched |
|
|
74
|
+
|
|
75
|
+
Outcomes are judged on 1-minute wicks, so "TP1 hit" means price actually traded there. The
|
|
76
|
+
tracking window is 24 × the signal timeframe (24h for a 1h signal, 4 days for a 4h signal); a 1h
|
|
77
|
+
signal that is still `pending` two days later is stale rather than alive.
|
|
78
|
+
|
|
79
|
+
## Workflows
|
|
80
|
+
|
|
81
|
+
**"Latest signals" / "any setups?"** → `get_signals` with the limit the user implies (default 10 if
|
|
82
|
+
they gave no number). Lead with the newest, group by side if several, and make the resolved ones
|
|
83
|
+
visible — a list that mixes three winners, two stops and five pending rows should say so.
|
|
84
|
+
|
|
85
|
+
**"Signals for SOL"** → `get_signals` with `coin`. If the result is empty, say there is no recent
|
|
86
|
+
signal on that pair rather than offering a different pair as if it were the same thing.
|
|
87
|
+
|
|
88
|
+
**"Is this signal still valid?" / "Should I still care about it?"** → `get_signal_details`, then
|
|
89
|
+
compare `livePrice` with the entry, TP1 and SL in the same units:
|
|
90
|
+
|
|
91
|
+
- distance from entry in % (signed the way the trade wants it: for a buy, positive = in profit)
|
|
92
|
+
- whether a level has already been crossed (a `pending` buy with `livePrice` below the SL price
|
|
93
|
+
is finished in everything but paperwork — say so)
|
|
94
|
+
- `history.highestPrice` / `lowestPrice` show the best and worst it has seen since entry
|
|
95
|
+
- `indicatorValues` are the readings at trigger time, not now; if the user wants the current
|
|
96
|
+
picture, hand off to technical-analysis rather than re-reading stale values as if they were live
|
|
97
|
+
|
|
98
|
+
**"How are the signals doing?"** → `get_signal_stats`. Explain the number honestly: `winRate` is
|
|
99
|
+
hits ÷ (hits + stops) over signals CREATED in the window, so it ignores `pending` rows, and a 4h
|
|
100
|
+
window is a handful of signals. Prefer `7d` for a track-record question and say how many signals
|
|
101
|
+
it rests on (`total`, `pending`).
|
|
102
|
+
|
|
103
|
+
## Presenting
|
|
104
|
+
|
|
105
|
+
For a list, ALWAYS use a compact table and keep one signal per row:
|
|
106
|
+
|
|
107
|
+
| Coin | Side | TF | Entry | TP1 | SL | Preset | Status | Age |
|
|
108
|
+
|
|
109
|
+
For one signal, use this order: headline (coin, side, timeframe, preset, importance) → the levels
|
|
110
|
+
as prices with the % in brackets → what triggered it (the `triggeredConditions`, lightly
|
|
111
|
+
rephrased) → where price is now versus entry / TP1 / SL → the outcome so far → the one-line risk
|
|
112
|
+
note. Quote `livePrice` with its timestamp when the answer depends on it.
|
|
113
|
+
|
|
114
|
+
Do not invent an "AI review" if `aiReview` is null — most signals do not carry one. When it exists,
|
|
115
|
+
report `score` and `decision` as the reviewer's opinion, not as a verdict.
|
|
116
|
+
|
|
117
|
+
## Conduct
|
|
118
|
+
|
|
119
|
+
- These are indicator alignments with published outcomes, not instructions. Report what the
|
|
120
|
+
signal says, what has happened to it and what has happened to signals like it; if the user asks
|
|
121
|
+
whether to take it, lay out what supports and what undercuts it and hand the decision back. Never
|
|
122
|
+
tell the user to buy, sell, size or leverage.
|
|
123
|
+
- Historical hit rates describe the sample they were computed on. Never present a win rate as a
|
|
124
|
+
forecast or imply any outcome is assured.
|
|
125
|
+
- Nothing in this connector trades. There is no order, close, transfer or withdrawal tool, by
|
|
126
|
+
design. If asked to execute, say so plainly; the decision and the trade stay with the user.
|
|
127
|
+
- Every number comes from a tool result; if a field is null, say it is unavailable rather than
|
|
128
|
+
estimating it.
|
|
129
|
+
- When the answer is about a specific trade idea, end with one plain sentence that crypto
|
|
130
|
+
derivatives are high-risk and this is market information, not financial advice. Once per answer
|
|
131
|
+
is enough.
|
|
132
|
+
|
|
133
|
+
For the full field glossary, including the `indicatorValues` keys, read
|
|
134
|
+
`references/signal-fields.md`.
|
|
135
|
+
|
|
136
|
+
## Examples
|
|
137
|
+
|
|
138
|
+
```text
|
|
139
|
+
Show me the latest AI signals.
|
|
140
|
+
Any signals on SOL right now?
|
|
141
|
+
Is the latest BTC signal still valid? Show me where price is against its entry, targets and stop.
|
|
142
|
+
How have the signals resolved over the last 7 days?
|
|
143
|
+
```
|
|
144
|
+
|
|
145
|
+
## Limitations
|
|
146
|
+
|
|
147
|
+
- Needs the hosted TraderSpy MCP server connected in the client (`https://mcp.traderspy.app/mcp`, Streamable HTTP), authorized with OAuth or a personal key from https://traderspy.app/mcp. A free TraderSpy account is enough. Without the server the skill has no data to work from.
|
|
148
|
+
- Tool calls are metered per day: 300 on the free tier, 5,000 on premium.
|
|
149
|
+
- Every tool is read-only. Nothing here places, closes or modifies an order, and there is no withdrawal or transfer tool.
|
|
150
|
+
- The output is market data and analysis for the user's own research, not investment advice.
|
|
151
|
+
- Covers TraderSpy's own AI signals only. Signal statistics describe signals that already resolved; they are not a forecast.
|
|
152
|
+
|
|
153
|
+
## Related Skills
|
|
154
|
+
|
|
155
|
+
- `@traderspy-technical-analysis` (called `technical-analysis` in the text above, its upstream ID) - the current chart read on the signal's coin
|
|
156
|
+
- `@traderspy-market-briefing` - the freshest signals inside a market overview
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
# Signal field glossary
|
|
2
|
+
|
|
3
|
+
## `get_signals` → `data[]`
|
|
4
|
+
|
|
5
|
+
| Field | Type | Notes |
|
|
6
|
+
| --- | --- | --- |
|
|
7
|
+
| `id` | string | Pass to `get_signal_details` |
|
|
8
|
+
| `strategyName` | string | Preset display name. The timeframe is usually in the name, e.g. "(4H)" |
|
|
9
|
+
| `importance` | high / medium / low | Preset tier, not a per-signal confidence |
|
|
10
|
+
| `action` | buy / sell | Direction |
|
|
11
|
+
| `signalStrength` | weak / moderate / strong / very_strong | How many optional conditions matched; capped at `strong` unless the entry was fresh |
|
|
12
|
+
| `coin` | string | Binance Futures pair, e.g. `WCTUSDT` |
|
|
13
|
+
| `timeframe` | 1h / 4h / 1d | Chart timeframe the preset evaluated |
|
|
14
|
+
| `price` | number | Price when the signal was published; targets are measured from it |
|
|
15
|
+
| `targets[]` | `{label, type, pct}` | `type` is `tp1` / `tp2` / `tp3` / `sl`; `pct` is unsigned distance from `price` |
|
|
16
|
+
| `triggeredConditions[]` | string | Plain-language conditions that fired, e.g. "Volume 2.2x average" |
|
|
17
|
+
| `resolutionStatus` | see table in SKILL.md | `pending` when nothing has resolved yet |
|
|
18
|
+
| `createdAt` | ISO date | Publication time |
|
|
19
|
+
|
|
20
|
+
`pagination` = `{ limit, skip, total, hasMore }`. `total` is the count matching the filter — it is
|
|
21
|
+
the size of the whole public archive when no filter is given, not "signals today".
|
|
22
|
+
|
|
23
|
+
## `get_signal_details` adds
|
|
24
|
+
|
|
25
|
+
| Field | Notes |
|
|
26
|
+
| --- | --- |
|
|
27
|
+
| `livePrice` | Current price of the pair at call time — the number that decides whether the idea still stands |
|
|
28
|
+
| `indicatorValues` | Readings captured at trigger time. Common keys: `rsi`, `macd_histogram`, `adx`, `obv_slope`, `obv_flow_pct`, `volume_ratio`, `williams_r`, plus `validation_*` keys written by the publisher's scoring pass (`validation_score` 0–100, `validation_confidence`, `validation_rsi`, `validation_atr_pct`, `validation_btc_trend_1d`, `validation_btc_rsi_4h`, `validation_directional_move_pct` = how far price had already moved in the trade's direction when it was published) |
|
|
29
|
+
| `aiReview` | `{ score, decision, analysis }` or null. Null is the normal case |
|
|
30
|
+
| `history.entryPrice` | Price at entry (equals `price` unless recalibrated) |
|
|
31
|
+
| `history.currentPrice` | Last tracked price; may be null on a fresh signal |
|
|
32
|
+
| `history.highestPrice` / `lowestPrice` | Extremes seen since entry on 1-minute data |
|
|
33
|
+
| `history.resolution` | `{ status, price, time }` once resolved; `price` is the level that was hit, so realised move = (resolution.price − entryPrice) / entryPrice, sign-flipped for sells |
|
|
34
|
+
|
|
35
|
+
Interpretation notes:
|
|
36
|
+
|
|
37
|
+
- `validation_score` around 70–80 has historically been the sweet spot; the very highest scores
|
|
38
|
+
tended to be late entries. Do not rank signals by score alone.
|
|
39
|
+
- `validation_directional_move_pct` above ~1.5% means the move was already under way at
|
|
40
|
+
publication — worth mentioning as "the entry chased the move".
|
|
41
|
+
- The published TP2/TP3 are a ladder (≈1.7× and 2.4× TP1); they exist so a winner can be
|
|
42
|
+
graded beyond TP1, not as three independent forecasts.
|
|
43
|
+
|
|
44
|
+
## `get_signal_stats`
|
|
45
|
+
|
|
46
|
+
`{ total, targetHits, stopped, pending, highCount, winRate }` over signals created in the period.
|
|
47
|
+
|
|
48
|
+
- `targetHits` counts `tp1_hit`, `tp2_hit`, `tp3_hit` and `profit_locked`.
|
|
49
|
+
- `pending` = total − hits − stops (so it also contains `expired` rows).
|
|
50
|
+
- `winRate` = round(hits ÷ (hits + stops) × 100), null when nothing has resolved.
|
|
51
|
+
- `highCount` = how many were high importance.
|
|
52
|
+
|
|
53
|
+
The 4h and 8h windows are small samples; treat single-digit `total` as noise.
|
|
54
|
+
|
|
55
|
+
## Resolution mechanics worth knowing
|
|
56
|
+
|
|
57
|
+
- Tracking window = 1×, 4× and 24× the signal timeframe (1h → 1h/4h/1d; 4h → 4h/16h/4d).
|
|
58
|
+
- TP and SL are judged on 1-minute highs/lows starting the minute after entry; on a same-minute
|
|
59
|
+
ambiguity the stop is recorded first (conservative).
|
|
60
|
+
- TP2 and TP3 count only after TP1; after TP1 a later stop touch does not downgrade the result.
|
|
61
|
+
- `profit_locked` is set when a trend-exhaustion check fires before TP1 and locks a partial gain.
|
|
62
|
+
- Only a subset of signals is ever marked `expired`; a signal that finishes its window untouched
|
|
63
|
+
can stay `pending` indefinitely. Treat old `pending` rows as roughly flat outcomes, not as open
|
|
64
|
+
ideas.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: unified-ai-gateway
|
|
3
|
-
description: Operate and evaluate Unified AI System through
|
|
3
|
+
description: Operate and evaluate Unified AI System through fifteen governed MCP tools, including provider-free prompt enhancement, while preserving fake-provider, authorization, and evidence boundaries.
|
|
4
4
|
category: ai-ml
|
|
5
5
|
risk: critical
|
|
6
6
|
source: https://github.com/happy520ai/unified-ai-system/tree/master/skills/unified-ai-gateway
|
|
@@ -35,7 +35,7 @@ review is required before changing this pinned procedure.
|
|
|
35
35
|
## Prerequisites And Setup
|
|
36
36
|
|
|
37
37
|
1. Confirm that Codex CLI and Docker are installed and Docker is running.
|
|
38
|
-
2. If the
|
|
38
|
+
2. If the 15 tools are already visible, skip setup and do not register a
|
|
39
39
|
duplicate server.
|
|
40
40
|
3. Explain the first stage: it downloads one reviewed platform from the
|
|
41
41
|
immutable `0.4.9` multi-platform index into Docker's cache, inspects its
|
|
@@ -133,7 +133,7 @@ codex mcp get unified-ai-system --json
|
|
|
133
133
|
```
|
|
134
134
|
|
|
135
135
|
8. Restart Codex or open a new task, then use `/mcp verbose` to confirm that all
|
|
136
|
-
|
|
136
|
+
15 tools are available. Remove the registration when it is no longer
|
|
137
137
|
wanted:
|
|
138
138
|
|
|
139
139
|
```bash
|
package/package.json
CHANGED