trade-journal
組織的な改善に向けて、構造化された取引記録、実績評価、行動パターンの検出、戦略の貢献度分析を行い、ビジネスにおける意思決定やパフォーマンス向上を支援するSkill。
📜 元の英語説明(参考)
Structured trade logging, performance review, behavioral pattern detection, and strategy attribution for systematic improvement
🇯🇵 日本人クリエイター向け解説
組織的な改善に向けて、構造化された取引記録、実績評価、行動パターンの検出、戦略の貢献度分析を行い、ビジネスにおける意思決定やパフォーマンス向上を支援するSkill。
※ jpskill.com 編集部が日本のビジネス現場向けに補足した解説です。Skill本体の挙動とは独立した参考情報です。
下記のコマンドをコピーしてターミナル(Mac/Linux)または PowerShell(Windows)に貼り付けてください。 ダウンロード → 解凍 → 配置まで全自動。
mkdir -p ~/.claude/skills && cd ~/.claude/skills && curl -L -o trade-journal.zip https://jpskill.com/download/10448.zip && unzip -o trade-journal.zip && rm trade-journal.zip
$d = "$env:USERPROFILE\.claude\skills"; ni -Force -ItemType Directory $d | Out-Null; iwr https://jpskill.com/download/10448.zip -OutFile "$d\trade-journal.zip"; Expand-Archive "$d\trade-journal.zip" -DestinationPath $d -Force; ri "$d\trade-journal.zip"
完了後、Claude Code を再起動 → 普通に「動画プロンプト作って」のように話しかけるだけで自動発動します。
💾 手動でダウンロードしたい(コマンドが難しい人向け)
- 1. 下の青いボタンを押して
trade-journal.zipをダウンロード - 2. ZIPファイルをダブルクリックで解凍 →
trade-journalフォルダができる - 3. そのフォルダを
C:\Users\あなたの名前\.claude\skills\(Win)または~/.claude/skills/(Mac)へ移動 - 4. Claude Code を再起動
⚠️ ダウンロード・利用は自己責任でお願いします。当サイトは内容・動作・安全性について責任を負いません。
🎯 このSkillでできること
下記の説明文を読むと、このSkillがあなたに何をしてくれるかが分かります。Claudeにこの分野の依頼をすると、自動で発動します。
📦 インストール方法 (3ステップ)
- 1. 上の「ダウンロード」ボタンを押して .skill ファイルを取得
- 2. ファイル名の拡張子を .skill から .zip に変えて展開(macは自動展開可)
- 3. 展開してできたフォルダを、ホームフォルダの
.claude/skills/に置く- · macOS / Linux:
~/.claude/skills/ - · Windows:
%USERPROFILE%\.claude\skills\
- · macOS / Linux:
Claude Code を再起動すれば完了。「このSkillを使って…」と話しかけなくても、関連する依頼で自動的に呼び出されます。
詳しい使い方ガイドを見る →- 最終更新
- 2026-05-18
- 取得日時
- 2026-05-18
- 同梱ファイル
- 1
📖 Skill本文(日本語訳)
※ 原文(英語/中国語)を Gemini で日本語化したものです。Claude 自身は原文を読みます。誤訳がある場合は原文をご確認ください。
トレード日誌
体系的な改善のための構造化されたトレード日誌です。すべてのトレードを状況とともに記録し、複数の頻度でパフォーマンスをレビューし、エッジを破壊する行動パターンを検出し、特定の戦略にリターンを帰属させます。
なぜ日誌が重要なのか
ほとんどのトレーダーは、悪い戦略ではなく、悪い行動によって失敗します。トレード日誌は、主観的な「感覚」を客観的なデータに変換します。
- 戦略の帰属: 実際に利益を上げているセットアップと、利益が出ているように感じるセットアップを把握する
- 行動の検出: リベンジトレード、FOMOエントリー、時期尚早なエグジットが複合化する前に捕捉する
- パターンの認識: 月曜日の朝のトレードで損失が出ていることや、SOLの勝者を早すぎる段階でカットしていることを発見する
- 説明責任: エントリー前の書面による根拠は、慎重な意思決定を強制する
- 改善の追跡: プロセスへの変更が実際に結果を改善するかどうかを測定する
日誌がなければ、ノイズを最適化することになります。日誌があれば、シグナルを最適化することになります。
トレード記録の構造
すべてのトレード記録は、エントリー時の状況とエグジット時の結果を捉えます。完全な18フィールドのスキーマについては、references/record_format.mdを参照してください。
最小限必要なフィールド
trade = {
"id": "T-20250310-001",
"token": "SOL",
"direction": "long",
"entry_date": "2025-03-10T14:30:00Z",
"entry_price": 142.50,
"size_sol": 5.0,
"strategy": "momentum-breakout",
"rationale": "Breaking above 4h resistance at 141.80 with volume confirmation",
"exit_date": "2025-03-10T16:45:00Z",
"exit_price": 146.20,
"pnl_sol": 0.648,
"outcome": "win",
"lessons": "Held through initial pullback to 143.0, rewarded for patience"
}
戦略のタグ付け
一貫したタグを使用して、パフォーマンスの帰属を可能にします。
| カテゴリ | タグ |
|---|---|
| モメンタム | momentum-breakout, trend-continuation, pullback-entry |
| ミーンリバージョン | range-fade, oversold-bounce, deviation-snap |
| イベントドリブン | listing-play, catalyst-trade, news-reaction |
| オンチェーン | whale-follow, wallet-copy, flow-signal |
| DeFi | lp-entry, yield-farm, arb-capture |
根拠のテンプレート
エントリー前に根拠を記述します。セットアップタイプごとのテンプレート:
Momentum: "[Token] breaking [level] on [timeframe] with [confirmation]. Target [price], stop [price]."
Mean Reversion: "[Token] at [X] std devs from [mean] on [timeframe]. Expecting reversion to [target]."
On-Chain: "[Signal type] detected — [wallet/flow description]. Historical hit rate [X]%."
ストレージ形式
日誌は、構造化されたクエリにはJSONを使用し、スプレッドシートの互換性にはCSVを使用します。
JSON形式 (プライマリ)
{
"journal_version": "1.0",
"trader_id": "anon",
"trades": [
{
"id": "T-20250310-001",
"token": "SOL",
"direction": "long",
"entry_date": "2025-03-10T14:30:00Z",
"entry_price": 142.50,
"size_sol": 5.0,
"size_usd": 712.50,
"strategy": "momentum-breakout",
"setup_quality": 8,
"rationale": "Breaking above 4h resistance with volume",
"exit_date": "2025-03-10T16:45:00Z",
"exit_price": 146.20,
"pnl_sol": 0.648,
"pnl_pct": 2.60,
"outcome": "win",
"hold_time_minutes": 135,
"emotional_state": "calm",
"lessons": "Patience through pullback paid off",
"tags": ["high-conviction", "clean-setup"]
}
]
}
CSV形式 (エクスポート)
id,token,direction,entry_date,entry_price,size_sol,strategy,exit_date,exit_price,pnl_sol,pnl_pct,outcome,lessons
T-20250310-001,SOL,long,2025-03-10T14:30:00Z,142.50,5.0,momentum-breakout,2025-03-10T16:45:00Z,146.20,0.648,2.60,win,"Patience paid off"
日誌データからの分析
戦略別の勝率
from collections import Counter
def win_rate_by_strategy(trades: list[dict]) -> dict[str, float]:
"""Compute win rate grouped by strategy tag."""
strategy_outcomes: dict[str, list[str]] = {}
for t in trades:
strat = t["strategy"]
strategy_outcomes.setdefault(strat, []).append(t["outcome"])
return {
strat: outcomes.count("win") / len(outcomes)
for strat, outcomes in strategy_outcomes.items()
if len(outcomes) >= 5 # minimum sample size
}
時間帯別のパフォーマンス
from datetime import datetime
def pnl_by_hour(trades: list[dict]) -> dict[int, float]:
"""Aggregate P&L by entry hour (UTC)."""
hourly: dict[int, float] = {}
for t in trades:
hour = datetime.fromisoformat(t["entry_date"].rstrip("Z")).hour
hourly[hour] = hourly.get(hour, 0.0) + t.get("pnl_sol", 0.0)
return dict(sorted(hourly.items()))
トークンタイプ別のプロフィットファクター
def profit_factor(trades: list[dict], group_key: str = "token") -> dict[str, float]:
"""Compute profit factor (gross wins / gross losses) by grouping key."""
groups: dict[str, dict[str, float]] = {}
for t in trades:
key = t.get(group_key, "unknown")
groups.setdefault(key, {"wins": 0.0, "losses": 0.0})
pnl = t.get("pnl_sol", 0.0)
if pnl > 0:
groups[key]["wins"] += pnl
else:
groups[key]["losses"] += abs(pnl)
return {
k: v["wins"] / v["losses"] if v["losses"] > 0 else float("inf")
for k, v in groups.items()
}
行動パターンの検出
日誌は、破壊的なトレーディングパターンの検出を可能にします。完全なフレームワークについては、references/review_framework.mdを参照してください。
リベンジトレード
損失後の迅速な再エントリー、多くの場合、より大きなサイズで:
def detect_revenge_trades(trades: list[dict], max_gap_minutes: int = 15) -> list[dict]:
"""Find trades entered within max_gap_minutes of a losing exit."""
sorted_trades = sorted(trades, key=lambda t: t["entry_date"])
revenge = []
for i in range(1, len(sorted_trades)):
prev, curr = sorted_trades[i - 1], sorted_trades[i]
if prev["outcome"] == "loss":
prev_exit = datetime.fromisoformat(prev["exit_date"].rs
(原文がここで切り詰められています) 📜 原文 SKILL.md(Claudeが読む英語/中国語)を展開
Trade Journal
Structured trade journaling for systematic improvement. Log every trade with context, review performance at multiple cadences, detect behavioral patterns that destroy edge, and attribute returns to specific strategies.
Why Journaling Matters
Most traders fail not from bad strategies but from bad behavior. A trade journal transforms subjective "feel" into objective data:
- Strategy Attribution: Know which setups actually make money vs. which feel profitable
- Behavioral Detection: Catch revenge trading, FOMO entries, and premature exits before they compound
- Pattern Recognition: Discover that your Monday morning trades lose money, or that you cut SOL winners too early
- Accountability: Written rationale before entry forces deliberate decision-making
- Improvement Tracking: Measure whether changes to your process actually improve results
Without a journal, you optimize on noise. With one, you optimize on signal.
Trade Record Structure
Every trade record captures context at entry and outcome at exit. See references/record_format.md for the complete 18-field schema.
Minimum Required Fields
trade = {
"id": "T-20250310-001",
"token": "SOL",
"direction": "long",
"entry_date": "2025-03-10T14:30:00Z",
"entry_price": 142.50,
"size_sol": 5.0,
"strategy": "momentum-breakout",
"rationale": "Breaking above 4h resistance at 141.80 with volume confirmation",
"exit_date": "2025-03-10T16:45:00Z",
"exit_price": 146.20,
"pnl_sol": 0.648,
"outcome": "win",
"lessons": "Held through initial pullback to 143.0, rewarded for patience"
}
Strategy Tagging
Use consistent tags to enable performance attribution:
| Category | Tags |
|---|---|
| Momentum | momentum-breakout, trend-continuation, pullback-entry |
| Mean Reversion | range-fade, oversold-bounce, deviation-snap |
| Event-Driven | listing-play, catalyst-trade, news-reaction |
| On-Chain | whale-follow, wallet-copy, flow-signal |
| DeFi | lp-entry, yield-farm, arb-capture |
Rationale Templates
Write rationale before entering. Templates by setup type:
Momentum: "[Token] breaking [level] on [timeframe] with [confirmation]. Target [price], stop [price]."
Mean Reversion: "[Token] at [X] std devs from [mean] on [timeframe]. Expecting reversion to [target]."
On-Chain: "[Signal type] detected — [wallet/flow description]. Historical hit rate [X]%."
Storage Format
The journal uses JSON for structured querying and CSV for spreadsheet compatibility.
JSON Format (Primary)
{
"journal_version": "1.0",
"trader_id": "anon",
"trades": [
{
"id": "T-20250310-001",
"token": "SOL",
"direction": "long",
"entry_date": "2025-03-10T14:30:00Z",
"entry_price": 142.50,
"size_sol": 5.0,
"size_usd": 712.50,
"strategy": "momentum-breakout",
"setup_quality": 8,
"rationale": "Breaking above 4h resistance with volume",
"exit_date": "2025-03-10T16:45:00Z",
"exit_price": 146.20,
"pnl_sol": 0.648,
"pnl_pct": 2.60,
"outcome": "win",
"hold_time_minutes": 135,
"emotional_state": "calm",
"lessons": "Patience through pullback paid off",
"tags": ["high-conviction", "clean-setup"]
}
]
}
CSV Format (Export)
id,token,direction,entry_date,entry_price,size_sol,strategy,exit_date,exit_price,pnl_sol,pnl_pct,outcome,lessons
T-20250310-001,SOL,long,2025-03-10T14:30:00Z,142.50,5.0,momentum-breakout,2025-03-10T16:45:00Z,146.20,0.648,2.60,win,"Patience paid off"
Analytics from Journal Data
Win Rate by Strategy
from collections import Counter
def win_rate_by_strategy(trades: list[dict]) -> dict[str, float]:
"""Compute win rate grouped by strategy tag."""
strategy_outcomes: dict[str, list[str]] = {}
for t in trades:
strat = t["strategy"]
strategy_outcomes.setdefault(strat, []).append(t["outcome"])
return {
strat: outcomes.count("win") / len(outcomes)
for strat, outcomes in strategy_outcomes.items()
if len(outcomes) >= 5 # minimum sample size
}
Performance by Time of Day
from datetime import datetime
def pnl_by_hour(trades: list[dict]) -> dict[int, float]:
"""Aggregate P&L by entry hour (UTC)."""
hourly: dict[int, float] = {}
for t in trades:
hour = datetime.fromisoformat(t["entry_date"].rstrip("Z")).hour
hourly[hour] = hourly.get(hour, 0.0) + t.get("pnl_sol", 0.0)
return dict(sorted(hourly.items()))
Profit Factor by Token Type
def profit_factor(trades: list[dict], group_key: str = "token") -> dict[str, float]:
"""Compute profit factor (gross wins / gross losses) by grouping key."""
groups: dict[str, dict[str, float]] = {}
for t in trades:
key = t.get(group_key, "unknown")
groups.setdefault(key, {"wins": 0.0, "losses": 0.0})
pnl = t.get("pnl_sol", 0.0)
if pnl > 0:
groups[key]["wins"] += pnl
else:
groups[key]["losses"] += abs(pnl)
return {
k: v["wins"] / v["losses"] if v["losses"] > 0 else float("inf")
for k, v in groups.items()
}
Behavioral Pattern Detection
The journal enables detection of destructive trading patterns. See references/review_framework.md for the full framework.
Revenge Trading
Rapid re-entry after a loss, often with larger size:
def detect_revenge_trades(trades: list[dict], max_gap_minutes: int = 15) -> list[dict]:
"""Find trades entered within max_gap_minutes of a losing exit."""
sorted_trades = sorted(trades, key=lambda t: t["entry_date"])
revenge = []
for i in range(1, len(sorted_trades)):
prev, curr = sorted_trades[i - 1], sorted_trades[i]
if prev["outcome"] == "loss":
prev_exit = datetime.fromisoformat(prev["exit_date"].rstrip("Z"))
curr_entry = datetime.fromisoformat(curr["entry_date"].rstrip("Z"))
gap = (curr_entry - prev_exit).total_seconds() / 60
if gap <= max_gap_minutes:
revenge.append(curr)
return revenge
FOMO Detection
Entering after large moves without proper setup:
- Entry rationale is vague or missing
- Setup quality self-rated below 5/10
- Entry during a move that already exceeded 1 ATR
Cutting Winners / Riding Losers
def winner_loser_hold_times(trades: list[dict]) -> dict[str, float]:
"""Compare average hold time for wins vs losses."""
win_times = [t["hold_time_minutes"] for t in trades if t["outcome"] == "win"]
loss_times = [t["hold_time_minutes"] for t in trades if t["outcome"] == "loss"]
return {
"avg_win_hold_min": sum(win_times) / len(win_times) if win_times else 0,
"avg_loss_hold_min": sum(loss_times) / len(loss_times) if loss_times else 0,
}
# RED FLAG: if avg_loss_hold > avg_win_hold, you're cutting winners and riding losers
Tilt Detection
Size escalation after losses suggests emotional trading:
def detect_tilt(trades: list[dict], threshold: float = 1.5) -> list[dict]:
"""Flag trades where size increased >threshold after a loss."""
tilt_trades = []
for i in range(1, len(trades)):
prev, curr = trades[i - 1], trades[i]
if prev["outcome"] == "loss" and curr["size_sol"] > prev["size_sol"] * threshold:
tilt_trades.append(curr)
return tilt_trades
Review Cadence
Daily Review (5 minutes)
- How many trades today? P&L?
- Did I follow my rules on every trade?
- Any emotional decisions?
- One thing I did well, one thing to improve
Weekly Review (30 minutes)
- Win rate and profit factor by strategy
- Behavioral pattern check (revenge trades, tilt, FOMO)
- Best and worst trade of the week — what made them different?
- Strategy performance vs. expectations
- Adjust position sizing if needed
Monthly Review (2 hours)
- Full strategy attribution analysis
- Equity curve review — drawdown periods and recovery
- Compare actual vs. planned risk per trade
- Performance by token type, time of day, day of week
- Are any strategies consistently losing? Consider dropping them
- Review and update strategy parameters
See references/review_framework.md for detailed review checklists and questions.
Partial Exits and Scaled Entries
Real trading involves scaling in and out. The journal handles this with child records:
# Parent trade with two scale-out exits
parent = {
"id": "T-20250310-001",
"token": "BONK",
"direction": "long",
"entry_date": "2025-03-10T14:30:00Z",
"entry_price": 0.000023,
"size_sol": 10.0,
"strategy": "momentum-breakout",
"exits": [
{"date": "2025-03-10T15:00:00Z", "price": 0.000025, "size_pct": 50, "reason": "first-target"},
{"date": "2025-03-10T16:30:00Z", "price": 0.000028, "size_pct": 50, "reason": "trailing-stop"},
]
}
See references/record_format.md for full documentation of partial exit handling.
Files
References
references/record_format.md— Complete 18-field trade record schema, field descriptions, tagging taxonomy, CSV/JSON examples, partial exit handlingreferences/review_framework.md— Daily/weekly/monthly review checklists, behavioral red flags, performance decay detection
Scripts
scripts/trade_logger.py— CLI trade logger: add, list, update, compute stats, filter, demo mode (stdlib only)scripts/journal_analyzer.py— Journal analysis: strategy performance, behavioral patterns, time-based analysis, demo mode (stdlib only)
Dependencies
Both scripts use Python standard library only (json, datetime, argparse, collections). No external packages required.
# No installation needed — stdlib only
python scripts/trade_logger.py --demo
python scripts/journal_analyzer.py --demo
Disclaimer
This skill provides tools for trade record-keeping and performance analysis. It does not provide financial advice, trading recommendations, or guarantee any trading outcomes. All analysis is informational and for personal review purposes only.