charting について
chartingは、価格推移、テクニカル指標、資産比較を確認するための市場データ可視化スキルです。単体で実行できるPythonスクリプトとテンプレートを使い、暗号資産、株式、為替、コモディティのデータを取得してチャートを作成します。
主な機能
- 01単体実行できるPythonチャートスクリプト
- 02ローソク足と指標のテンプレート
- 03資産比較チャート
- 04期間に応じた間隔選択
- 05ダークテーマのPNG出力
活用シーン
- 01暗号資産の価格推移を確認
- 02トレンドとモメンタム指標を分析
- 03複数資産のパフォーマンスを比較
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ starchild-ai-agent/ official-skills --skill chartingインストール後、Claude Code で/chartingを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
scripts/chart_comparison_template.pychart_stock_template.pychart_template.pychart_with_indicators.py詳細
チャート作成
⚠️ 重要: データツールを呼び出さないでください
チャートを作成する際は、price_chart、get_coin_ohlc_range_by_id、twelvedata_time_series、またはその他の市場データツールを絶対に呼び出さないでください。チャートスクリプトは内部的にデータを取得します。これらのツールを呼び出すと、78KB 以上の不要なデータでコンテキストが溢れてしまいます。
ワークフロー (4 ステップ):
skills/charting/scripts/からテンプレートを読み込む- スクリプトを
scripts/に書き込む bashでスクリプトを実行する- 出力された PNG に対して
read_fileを呼び出し、Markdown の画像構文を使って表示する:
TradingView 品質のローソク足チャートを生成します。ダークテーマ、クリーンなレイアウト、プロフェッショナルな配色です。すべてのチャートはスタンドアロンの Python スクリプトであり、内部インポートはありません。
追加ルール:
- チャートスクリプトはワークスペースで実行され、
coreからインポートすることはできません。proxied_get()ではなく、requestsライブラリを直接使用してください。 - テンプレートにはプロキシの自動設定が含まれています。
PROXY_HOST環境変数が存在する場合、スクリプトはHTTP_PROXY/HTTPS_PROXYを自動的に設定します。
ツール: write_file、bash、read_file
どのチャートをいつ使うか
シンプルな価格推移 → インジケーターなしのローソク足。「BTC の今月の値動きを見せて」に適しています。 トレンド分析 → EMA/SMA オーバーレイを追加。「ETH は上昇トレンドにある?」に適しています。 モメンタムの確認 → RSI または MACD をサブプロットとして追加。「SOL は買われすぎ?」に適しています。 完全なテクニカルビュー → ローソク足 + ボリンジャーバンド + RSI + MACD。「BTC の全体像を見せて」に適しています。 出来高分析 → market_chart エンドポイントからの別途取得が必要です (OHLC エンドポイントには出来高がありません)。 資産比較 → 2 つの資産を比較する折れ線グラフ (BTC 対 Gold、ETH 対 S&P500 など)。正規化またはパーセンテージベースの比較には比較テンプレートを使用してください。
チャートの作成方法
skills/charting/scripts/ 内のテンプレートスクリプトを読み込んでカスタマイズします:
chart_template.py— TradingView スタイルのベースラインローソク足チャート (CoinGecko 経由の暗号資産)chart_with_indicators.py— RSI、MACD、ボリンジャーバンド、EMA/SMA の例 (CoinGecko 経由の暗号資産)chart_stock_template.py— Twelve Data API を使用した株式/為替チャートchart_comparison_template.py— 2 つの資産を比較 (暗号資産対コモディティ、株式対暗号資産など)
該当するテンプレートを scripts/ にコピーし、設定セクション (コイン、日数、インジケーター) をカスタマイズして実行します。
テンプレートは、リトライロジックとエラー処理を備えたすべてのデータ取得を内部的に処理します。
注: これらのテンプレートは市場データの可視化 (価格チャート、インジケーター) 用です。バックテスト結果のチャート (エクイティカーブ、ドローダウン、パフォーマンスダッシュボード) については、バックテストスクリプトに直接 matplotlib のチャート作成を追加してください。データはすでに存在するため、再取得したり別ファイルを作成したりする必要はありません。
TradingView カラーパレット
| 要素 | 色 | Hex |
|---|---|---|
| 上昇ローソク足 | ティール | #26a69a |
| 下降ローソク足 | 赤 | #ef5350 |
| 背景 | ダーク | #131722 |
| グリッド | 控えめな点線 | #1e222d |
| テキスト / 軸 | ライトグレー | #d1d4dc |
| MA ライン | 青 / オレンジ | #2196f3 / #ff9800 |
| RSI ライン | 紫 | #b39ddb |
| MACD ライン | 青 | #2196f3 |
| シグナルライン | オレンジ | #ff9800 |
ユーザーが要求しない限り、このパレットから逸脱しないでください。
データソース API
CoinGecko (暗号資産のみ)
エンドポイント: https://pro-api.coingecko.com/api/v3/coins/{coin_id}/ohlc/range
認証: ヘッダー x-cg-pro-api-key: {COINGECKO_API_KEY}
用途: BTC、ETH、SOL、およびすべての暗号資産
例:
url = f"https://pro-api.coingecko.com/api/v3/coins/{COIN_ID}/ohlc/range"
params = {"vs_currency": "usd", "from": from_ts, "to": now, "interval": "daily"}
headers = {"x-cg-pro-api-key": os.getenv("COINGECKO_API_KEY")}
resp = requests.get(url, params=params, headers=headers)
raw = resp.json() # [[timestamp_ms, open, high, low, close], ...]
Twelve Data(株式、為替、コモディティ)
エンドポイント: https://api.twelvedata.com/time_series
認証: クエリパラメータ apikey={TWELVEDATA_API_KEY}
用途: 株式(AAPL、MSFT)、為替(EUR/USD)、コモディティ(金は XAU/USD)
一般的なシンボル:
- 株式:
AAPL、MSFT、GOOGL、TSLA、SPY - 為替:
EUR/USD、GBP/JPY、USD/CHF - コモディティ:
XAU/USD(金)、XAG/USD(銀)、CL/USD(原油)
インターバル: 1min、5min、15min、30min、1h、4h、1day、1week、1month
例:
url = "https://api.twelvedata.com/time_series"
params = {
"symbol": "XAU/USD", # Gold spot price
"interval": "1day",
"outputsize": 90, # Number of candles
"apikey": os.getenv("TWELVEDATA_API_KEY")
}
resp = requests.get(url, params=params)
data = resp.json()
# data["values"] = [{"datetime": "2024-01-01", "open": "2050.00", "high": "2060.00", ...}, ...]
重要: Twelve Data はデータを逆時系列順(新しい順)で返します。DataFrame を作成する前に必ずリストを反転してください:
values = data["values"][::-1] # Reverse to oldest-first
インターバル選択戦略
テンプレートは、視覚的な品質を維持しながらデータ量を最小限に抑えるために、最適なインターバルを自動選択するようになりました:
| 期間範囲 | 自動選択されるインターバル | 理由 |
|---|---|---|
| 31日以下 | 時間足 | 短期分析向けの高い粒度 |
| 32~365日 | 日足 | 十分な詳細と、より少ないデータ量 |
| 365日超 | 日足 | 長期トレンドには日足が最適 |
オーバーライド: 自動選択を上書きするには、設定で INTERVAL = "daily" または INTERVAL = "hourly" を設定します。
主な注意点
savefigの facecolor:savefigでfacecolor='#131722'とedgecolor='#131722'を必ず設定してください。設定しないと、保存された PNG は白背景に戻ってしまいます。- タイトルの余白: タイトルの先頭に
\nを付けて、上端からの余白を追加します。 returnfig=True: プロット後のカスタマイズ(価格のフォーマット、注釈)が必要な場合に使用します。これを使用する場合は、fig.savefig()を手動で呼び出してください —savefigをmpf.plot()に渡さないでください。- OHLC に出来高はない: CoinGecko の OHLC エンドポイントは
[timestamp_ms, open, high, low, close]のみを返します。volume=Falseを使用するか、出来高はcoin_chartエンドポイントから別途取得してください。 - パネル比率: インジケーターのサブプロットを追加する際は
panel_ratiosを設定します。例えば、ローソク足 + 出来高 + インジケーター1つの場合は(4, 1, 2)、インジケーター2つの場合は(5, 1, 2, 2)です。 - 図のサイズ: デフォルトは
(14, 8)です。サブプロットを追加する際は(14, 10)または(14, 12)に増やしてください。
ルール
- パスはワークスペースからの相対パスです。
workspace/scripts/foo.pyではなく、scripts/foo.pyに書き込んでください。bash の CWD はすでにワークスペースです。 - 常に
output/ディレクトリに保存してください。os.makedirs("output", exist_ok=True)を使用します。 - 常に
bash("python3 scripts/<name>.py")でスクリプトを実行し、動作を確認してください。 - 常に生成された PNG に対して
read_fileを呼び出し、その後 Markdown の画像構文で表示してください: - スクリプトはスタンドアロンでなければなりません。
requests+os.getenv()を使用してください。内部インポートや dotenv は使用しないでください。 - 重要: チャートスクリプトでは proxied_get() を使用しないでください。 チャートスクリプトはスタンドアロンでワークスペース内で実行されるため、
core.http_clientからインポートできません。常にrequests.get()とrequests.post()を直接使用してください。これは、これらのスクリプトがメインの Star Child プロセスの外部で実行されるため、PLATFORM.md のプロキシルールの例外となります。テンプレートは正しいパターンを示しています。 - 環境変数は継承されます。
os.getenv("COINGECKO_API_KEY")は直接動作します。 - ユーザーがライトテーマを要求しない限り、デフォルトはダークテーマです。
- ファイル名はチャートを説明するものにしてください。 例:
btc_30d_candles.png、eth_7d_rsi_macd.png。 - データソース: 暗号資産(BTC、ETH など)には CoinGecko API を使用してください。株式、為替、コモディティ(AAPL、EUR/USD、金は XAU/USD)には Twelve Data API を使用してください。API を混在させないでください — スクリプトは1つのデータソースに集中させてください。
- 何を測定しているかを考えてください: チャートを作成する前に、自問してください:「ユーザーはどのような問いに答えようとしているのか?」正規化されたチャート(すべて100から開始)は相対的なトレンドを示しますが、実際の上昇幅を隠してしまいます。ユーザーが「どちらがより上昇したか」を知りたい場合や投資パフォーマンスを比較している場合は、見た目が似た線ではなく、実際の倍率(例: 50倍 vs 10倍)が必要です。
トラブルシューティング
401 Unauthorized エラー
テンプレートは PROXY_HOST/PROXY_PORT 環境変数からプロキシを自動構成します。401 エラーが発生する場合:
環境を確認:
bash("env | grep -E 'PROXY|REQUESTS_CA'")
想定される変数:
PROXY_HOST/PROXY_PORT- プロキシアドレス (テンプレートはこれらを使用して HTTP_PROXY/HTTPS_PROXY を設定します)REQUESTS_CA_BUNDLE- SSL 用のプロキシ CA 証明書COINGECKO_API_KEY/TWELVEDATA_API_KEY- プロキシ環境では偽の値でも構いません
変数が存在しない場合、これはスクリプトの問題ではなく環境構成の問題です。