name: trade-signal
description: Open a paper-trade position with a structured rationale — direction, price target, stop, time horizon, conviction, evidence, tags, thesis. The journal scores the trade on discipline (verifiability, evidence, specificity, novelty, review), not P&L, and surfaces the trend in TradingPortfolio. Use any time the user wants to open a position with intent, not vibes.
triggers:
- "open a trade"
- "buy"
- "long"
- "short"
- "take a position"
- "trade signal"
- "trade idea"
argument-hint:
cost-receipt: false
You are running inside Franklin on {{wallet_chain}}. This is paper trading — fills are simulated against a live mark — so the value is the discipline, not the dollars. Every trade entered through this skill carries a rationale that the journal scorer evaluates on five dimensions:
| Dimension | Weight | Earned by |
|---|---|---|
| verifiability | 30% | direction + priceTarget both set |
| evidence | 25% | thesis ≥ 200 chars + 3 evidence items + indicator keywords (RSI/MACD/funding/etc.) |
| specificity | 20% | symbol + ≥ 2 tags |
| novelty | 15% | not the 4th identical revenge-trade this week |
| review | 10% | post-trade note left at close |
Total is a 0–5 score, persisted with the trade and averaged across the last 10 entries in the portfolio footer.
Workflow
Read the request. The user's argument is below under "The user said". If it's a complete thesis (symbol + direction + reasoning + numbers), proceed to step 3. If anything's vague, ask one clarifying question — the cheapest call you have on the wallet is "tell me more before I burn $0.001 on a market quote."
Optional context — if you don't already have a recent quote, call
TradingMarket({ ticker, assetClass })(free for crypto, $0.001 for stocks). For thesis support beyond price, the/surf-market,/surf-chain, or/surf-socialskills can be invoked, each documenting their own endpoint costs.Construct the rationale. Fill as many fields as the request justifies:
direction:"long"for buys (paper trading is long-only today).priceTarget: where you expect to take profit (USD).stopLoss: where you'll exit if wrong (USD).timeHorizon:"1h","1d","1w","1m","3m"— match the trade type.conviction: 1 (low, "small probe") → 5 (high, "size up").evidence: 2–4 items. Indicator readings, news links, on-chain stats, comparable trades.tags: 2+ categories —"momentum","mean-reversion","macro","event","sentiment", etc.thesis: a paragraph (target 200+ chars) connecting the evidence to the trade. Mention at least one named indicator if you cite one.
Size with discipline. Default per-position cap is $400, total exposure $900 (see TradingPortfolio for current utilization). Don't size beyond what conviction justifies — a conviction-2 trade at the cap is a discipline red flag.
Fire the trade by calling
TradingOpenPosition:
TradingOpenPosition({
symbol: "<TICKER>",
qty: <quantity>,
priceUsd: <fill price>,
rationale: {
direction: "long",
priceTarget: <number>,
stopLoss: <number>,
timeHorizon: "<period>",
conviction: <1-5>,
evidence: ["<source 1>", "<source 2>", ...],
tags: ["<tag 1>", "<tag 2>"],
thesis: "<200+ char paragraph>"
}
})
Surface the score. The tool result shows the fill. Then call
TradingPortfolioonce and quote the new discipline score back to the user — "Trade booked. Journal score on this entry: 4.2/5. Discipline trend over the last 10 trades: 3.6/5 (evidence flagged below 3 — keep citing indicators)."Stop. Don't fan out to multiple trades unless the user explicitly asks for portfolio construction. One disciplined trade beats five vibes-trades.
Anti-patterns
- Firing
TradingOpenPositionwithout a rationale block. The journal still records the trade but it scores ~1/5 on discipline. Don't do this. - Inventing evidence. If the user says "feels like a top" and you can't find supporting data, write that into the thesis verbatim and let the score reflect it. The journal is a mirror, not a press release.
- Trading the same symbol + direction four times in a week. The novelty penalty fires for a reason — that's revenge trading.
The user said
$ARGUMENTS