TradingView × AI Claude Code 実践編【自動売買+LINE通知 2026年版】
Part1ではClaude Code × TradingView MCPのセットアップとRSIスクリプトの自動生成を解説しました。
Part2ではいよいよ「実際に動く仕組み」を作ります。複合ロジックの実装・スマホへのLINE通知・Bitgetへの自動注文まで、Claude Codeを使って一気に構築します。
Google ColaboratoryやPythonでBotを作った経験がある方なら、今回の構成は馴染みやすいはずです。ただしコードを書く量は大幅に少なくなります。Claude Codeへの日本語指示が中心です。
📘 この記事でできるようになること
- MA・RSI・出来高を組み合わせた複合シグナルを実装する
- シグナル発火時にLINEへリアルタイム通知を送る
- TradingViewのアラートからBitgetへ自動注文を連携する
- Claude Codeの反復プロンプトでバックテスト精度を改善する
⚠️ 前提条件
本記事はPart1のセットアップ(Node.js・Claude Code・TradingView MCP)が完了していることを前提としています。未完了の方はPart1から始めてください。
複数インジケーターを組み合わせた複合ロジックの実装
なぜ単一インジケーターでは不十分か
RSI単体でバックテストすると「だまし」が多発します。RSIが30を下回っても、そのまま20・10と下落し続けるケースは珍しくありません。複数の条件をANDで組み合わせることで、不要なシグナルを大幅に削減できます。
| 戦略 | シグナル数 | 勝率目安 | 欠点 |
|---|---|---|---|
| RSI単体 | 多い | 45〜52% | だましが多い |
| MA+RSI | 中程度 | 50〜58% | 横ばい相場に弱い |
| MA+RSI+出来高 | 絞られる | 55〜65% | チャンスが減る |
Claude Codeへの複合条件プロンプト例
💬 Claude Codeへの日本語プロンプト例
「TradingViewのPINEスクリプト(v5)を作成してください。
以下の3条件がすべて揃ったときだけ買いサインを表示してください:
① RSI(14)が40以下である
② 短期EMA(20)が長期EMA(50)を上抜けたばかり(ゴールデンクロス)
③ 直近5本の平均出来高より現在の出来高が1.5倍以上
売りサインは:RSI(14)が65以上になったとき
MAの2本もチャートに表示してください
アラート条件も設定してください(メッセージに銘柄・価格・時刻を含める)
コメントはすべて日本語で記述してください」
生成される複合スクリプト(実物コード)
MA + RSI + 出来高 複合シグナル(Claude Code生成)
//@version=5
indicator("MA+RSI+出来高 複合シグナル", overlay=true)
// ── 設定パラメーター ────────────────────────
rsiLen = input.int(14, title="RSI期間", minval=1)
rsiOversold = input.int(40, title="RSI買い基準(以下)", minval=1, maxval=100)
rsiOverbought = input.int(65, title="RSI売り基準(以上)", minval=1, maxval=100)
maShort = input.int(20, title="短期EMA期間", minval=1)
maLong = input.int(50, title="長期EMA期間", minval=1)
volMulti = input.float(1.5, title="出来高倍率フィルター", minval=1.0, step=0.1)
// ── 各インジケーター計算 ──────────────────────
rsi = ta.rsi(close, rsiLen) // RSI計算
maS = ta.ema(close, maShort) // 短期EMA
maL = ta.ema(close, maLong) // 長期EMA
volAvg = ta.sma(volume, 5) // 直近5本の平均出来高
// ── 条件判定 ──────────────────────────────────
// ゴールデンクロス:短期MAが長期MAを上抜けた瞬間
goldenCross = ta.crossover(maS, maL)
// 買いシグナル:3条件すべて満たす場合のみ
buySignal = rsi <= rsiOversold
and goldenCross
and volume > volAvg * volMulti
// 売りシグナル:RSIが過熱水準に達したとき
sellSignal = rsi >= rsiOverbought
// ── チャート表示 ──────────────────────────────
plot(maS, title="短期EMA", color=color.new(color.blue, 0), linewidth=2)
plot(maL, title="長期EMA", color=color.new(color.orange, 0), linewidth=2)
plotshape(buySignal,
title="買いシグナル", style=shape.arrowup,
location=location.belowbar, color=color.green, size=size.normal)
plotshape(sellSignal,
title="売りシグナル", style=shape.arrowdown,
location=location.abovebar, color=color.red, size=size.normal)
// ── アラートメッセージ設定 ────────────────────
alertcondition(buySignal,
title="買いアラート",
message="【買いシグナル】{{ticker}} 価格:{{close}} 時刻:{{time}}\nMA・RSI・出来高の3条件が揃いました")
alertcondition(sellSignal,
title="売りアラート",
message="【売りシグナル】{{ticker}} 価格:{{close}} 時刻:{{time}}\nRSIが売られすぎ水準に達しました")
✅ ポイント
alertcondition()を設定しておくことで、次のH2②で解説するLINE通知・Bitget自動注文の「引き金」として使えます。アラートメッセージの形式がそのままWebhookに飛びます。
バックテスト版への変換プロンプト
💬 バックテスト変換プロンプト
「先ほどの複合シグナルをstrategy形式に変換してください。
設定:初期資金100,000円・1回10%・手数料0.1%・ロングのみ
バックテスト結果のスクリーンショットを確認後、改善提案もお願いします」
✦ TradingView 公式パートナーリンク ✦
複合ストラテジーにはEssentials以上を推奨
アラート20件以上・バックテスト期間延長・紹介リンクで15ドル割引適用
LINE通知の実装【シグナル発火でスマホに即時通知】
チャートを常に監視するのは現実的ではありません。シグナルが出た瞬間にLINEへ通知が来れば、外出中でもチャンスを逃しません。TradingViewのWebhookとLINE Messaging APIを連携させます。
必要なもの(すべて無料)
- LINEアカウント(個人用・受信側)
- LINE Developersアカウント(無料登録)
- Googleアカウント(Google Apps Script用)
- TradingViewアカウント(Essentials以上推奨・アラートWebhook機能が必要)
⚠️ LINE Notifyはサービス終了済み
2024年にLINE Notifyが終了したため、本記事ではLINE Messaging APIを使います。古い記事の手順は使えませんのでご注意ください。
ステップ①|LINE Messaging APIのセットアップ
- LINE Developersにアクセスし、LINEアカウントでログイン
- 「プロバイダー」を作成(名前は任意:例「TradingView通知」)
- チャンネル作成 → 「Messaging API」を選択
- チャンネル基本設定の「チャンネルアクセストークン(長期)」を発行してコピー
- 作成したBotを自分のLINEに友達追加(QRコードで追加)
💡 ユーザーIDの取得
自分にメッセージを送るには「ユーザーID」が必要です。LINE DevelopersのWebhookにメッセージを送ると、コンソールに自分のuserIdが表示されます。またはhttps://api.line.me/v2/profileをcurlで叩いて確認できます。
ステップ②|Google Apps Scriptで中継サーバーを作成
TradingViewはWebhook(HTTPSのPOSTリクエスト)でアラートを送信します。LINE Messaging APIへの変換にGoogle Apps Script(GAS)を中継として使います。Claude Codeに以下のプロンプトを渡せばGASコードが生成されます。
💬 GASコード生成プロンプト
「Google Apps ScriptでTradingViewのWebhookを受け取り、LINE Messaging APIで自分にメッセージを送るdoPost関数を作成してください。
・チャンネルアクセストークンは変数に格納する
・ユーザーIDも変数に格納する
・受け取ったWebhookのmessageフィールドをそのままLINEに転送する
・エラー時はコンソールにログを出力する」
Google Apps Script(Claude Code生成例)
// LINE Messaging API 設定
const LINE_TOKEN = 'YOUR_CHANNEL_ACCESS_TOKEN'; // チャンネルアクセストークン
const LINE_USER_ID = 'YOUR_USER_ID'; // 自分のLINEユーザーID
function doPost(e) {
try {
// TradingViewから受け取ったJSONを解析
const body = JSON.parse(e.postData.contents);
const message = body.message || 'TradingViewからアラートが届きました';
// LINE Messaging APIにPUSHメッセージを送信
const url = 'https://api.line.me/v2/bot/message/push';
const payload = {
to: LINE_USER_ID,
messages: [{ type: 'text', text: message }]
};
const options = {
method : 'post',
contentType : 'application/json',
headers : { 'Authorization': 'Bearer ' + LINE_TOKEN },
payload : JSON.stringify(payload),
muteHttpExceptions: true
};
const response = UrlFetchApp.fetch(url, options);
console.log('LINE送信結果: ' + response.getContentText());
} catch (err) {
console.error('エラー: ' + err.toString());
}
// TradingViewへの応答
return ContentService.createTextOutput('OK');
}
ステップ③|GASをデプロイしてWebhook URLを取得
- Google Apps Scriptを開き、新しいプロジェクトを作成
- 上記コードを貼り付け、トークン・ユーザーIDを書き換える
- 「デプロイ」→「新しいデプロイ」→「ウェブアプリ」を選択
- アクセスできるユーザー:「全員」に設定してデプロイ
- 表示されるWebhookのURLをコピーしておく
ステップ④|TradingViewでアラートを設定
- 複合スクリプトを適用したチャートで時計マーク(アラート)をクリック
- 条件:「買いアラート」を選択
- 「通知」タブ → Webhook URLにGASのURLを貼り付け
- メッセージ欄に以下を入力:
TradingViewアラートメッセージ(JSON形式)
{"message": "【買いシグナル】{{ticker}} 価格:{{close}} 時刻:{{timenow}}\nMA・RSI・出来高の3条件が揃いました"}
✅ 動作確認の方法
アラートを保存後、テスト用にRSI・MAの閾値を一時的に緩めてシグナルを発生させ、LINEに通知が届くか確認してください。届いたら元の閾値に戻します。
Bitget Webhook連携【アラートから自動注文まで】
LINE通知の次は「通知を受け取ったら自分で注文」ではなく、シグナルと同時にBitgetへ自動注文が入る仕組みを構築します。
自動注文の全体フロー
📊 TradingViewアラート発火
↓(Webhook JSON送信)
⚙️ Google Apps Script(中継)
↓(Bitget REST API呼び出し)
💹 Bitgetに成行注文
ステップ①|Bitget APIキーの取得
- Bitgetにログイン → 右上のアイコン →「APIマネジメント」
- 「APIキーを作成」をクリック
- 権限:「読み取り」+「スポット取引」のみにチェック(先物を使う場合は先物取引も追加)
- パスフレーズを設定してAPIキー・シークレットキーをコピー・保管
🔐 セキュリティ必須事項
- APIキーには出金権限を絶対に付与しない
- GASのスクリプトプロパティ(環境変数)にキーを保管する(コードに直接書かない)
- 初回は必ず少額(0.001BTC相当以下)でテストする
- 稼働前にBitgetのテストネット環境で動作確認する
ステップ②|GASにBitget注文処理を追加
先ほど作ったLINE通知のGASに、Bitget注文処理を追加します。Claude Codeへの指示例です。
💬 Bitget注文連携プロンプト
「先ほどのGASにBitget APIのスポット成行注文処理を追加してください。
・APIキー・シークレット・パスフレーズはスクリプトプロパティから取得する
・Bitget REST APIのHMAC-SHA256署名を実装する
・Webhookのsideフィールドが”buy”なら買い、”sell”なら売りを実行
・注文サイズはsizeフィールドから取得する
・注文結果をLINEにも通知する」
Bitget注文連携GAS(Claude Code生成例)
// スクリプトプロパティからAPIキーを取得(コードに直接書かない)
const props = PropertiesService.getScriptProperties();
const API_KEY = props.getProperty('BITGET_API_KEY');
const API_SECRET = props.getProperty('BITGET_SECRET');
const PASSPHRASE = props.getProperty('BITGET_PASSPHRASE');
const BASE_URL = 'https://api.bitget.com';
// HMAC-SHA256署名を生成
function sign(timestamp, method, path, body) {
const message = timestamp + method + path + (body || '');
const sig = Utilities.computeHmacSha256Signature(message, API_SECRET);
return Utilities.base64Encode(sig);
}
// Bitgetにスポット成行注文を送る
function placeOrder(symbol, side, size) {
const path = '/api/v2/spot/trade/place-order';
const timestamp = Date.now().toString();
const body = JSON.stringify({
symbol : symbol, // 例:"BTCUSDT"
side : side, // "buy" or "sell"
orderType: 'market',
force : 'gtc',
size : size // 例:"0.001"
});
const options = {
method : 'post',
headers: {
'ACCESS-KEY' : API_KEY,
'ACCESS-SIGN' : sign(timestamp, 'POST', path, body),
'ACCESS-TIMESTAMP' : timestamp,
'ACCESS-PASSPHRASE' : PASSPHRASE,
'Content-Type' : 'application/json'
},
payload : body,
muteHttpExceptions : true
};
return UrlFetchApp.fetch(BASE_URL + path, options).getContentText();
}
function doPost(e) {
try {
const body = JSON.parse(e.postData.contents);
const message = body.message || 'アラート受信';
const side = body.side; // "buy" or "sell"
const symbol = body.symbol || 'BTCUSDT';
const size = body.size || '0.001';
// Bitgetに注文(sideが指定されている場合のみ)
let orderResult = '';
if (side === 'buy' || side === 'sell') {
orderResult = placeOrder(symbol, side, size);
}
// LINEに通知(注文結果も含める)
const lineMsg = message + '\n注文結果: ' + (orderResult || '注文なし');
sendLine(lineMsg); // 前のステップで作成したsendLine関数を呼ぶ
} catch (err) {
console.error('エラー: ' + err.toString());
}
return ContentService.createTextOutput('OK');
}
ステップ③|TradingViewのWebhookメッセージを更新
アラートのWebhookメッセージにBitget注文情報を追加します。
買いアラート用Webhookメッセージ
{"message":"【買いシグナル】{{ticker}} 価格:{{close}}","side":"buy","symbol":"BTCUSDT","size":"0.001"}
💡 スクリプトプロパティへのキー登録方法
GASのメニュー「プロジェクトの設定」→「スクリプトプロパティ」からBITGET_API_KEY・BITGET_SECRET・BITGET_PASSPHRASEを登録してください。コードに直接書くとGitHubなどに漏洩するリスクがあります。
バックテスト精度をClaude Codeで反復改善する
最初に生成したスクリプトがベストとは限りません。Claude Codeの強みは「バックテスト結果を見せて改善してもらう」サイクルを高速で回せることです。
反復プロンプトの使い方
💬 バックテスト結果を渡して改善させるプロンプト例
「バックテスト結果:純利益+8.2%・勝率47%・最大DD18%・PF1.12
目標:勝率55%以上・最大DD15%以下に改善してください。
以下を試してください:
① RSIの買い基準を40→35に引き下げ
② 出来高フィルターを1.5倍→2.0倍に強化
③ 改善後の結果も報告してから次の改善案を提案してください」
改善サイクルの実例
| サイクル | 純利益 | 勝率 | 最大DD | PF |
|---|---|---|---|---|
| 初回生成 | +8.2% | 47% | 18% | 1.12 |
| RSI閾値調整 | +11.4% | 52% | 15% | 1.24 |
| 出来高フィルター強化 | +14.7% | 57% | 12% | 1.38 |
時間足別の特性と使い分け
| 時間足 | 特性 | おすすめ対象 |
|---|---|---|
| 1分・5分足 | ノイズが多く誤シグナル多発 | 上級者以外は非推奨 |
| 1時間・4時間足 | バランスが良くシグナル精度が高い | 中級者に最適 ⭐ |
| 日足 | 長期・スイングトレード向け | Part3で詳解予定 |
⚠️ 改善しすぎの罠(過最適化)
バックテストの勝率が80%を超えてきたら要注意です。過去データに過剰適合(カーブフィッティング)している可能性が高く、リアル相場では全く機能しないケースがあります。
目安として勝率55〜65%・PF1.2〜1.5あたりで止めておくのが実運用向きです。過最適化の見分け方・対策はPart3で詳しく解説します。
まとめ
✅ この記事でできたこと
- MA・RSI・出来高の3条件を組み合わせた複合シグナルを実装した
- LINE Messaging APIとGASでスマホへのリアルタイム通知を設定した
- TradingViewのWebhookアラートからBitgetへの自動注文を連携した
- Claude Codeの反復プロンプトでバックテスト精度を段階的に改善した
📘 次のステップ(Part3で学ぶこと)
- AI自動売買は短期・長期どちらに向いているか?特性の徹底比較
- 「なんとなくの感覚」「経験則」をロジックに言語化する手順
- 自己流の複雑なロジックをClaude Codeで実装する方法
- カーブフィッティングを回避しながらロバストな戦略を作る方法
✦ STEP 1 ✦
TradingViewで今すぐ始める
WebhookアラートにはEssentials以上が必要です
紹介リンクからの登録で15ドル割引が適用されます
