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ドル割引適用

今すぐTradingViewを始める →


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のセットアップ

  1. LINE Developersにアクセスし、LINEアカウントでログイン
  2. 「プロバイダー」を作成(名前は任意:例「TradingView通知」)
  3. チャンネル作成 → 「Messaging API」を選択
  4. チャンネル基本設定の「チャンネルアクセストークン(長期)」を発行してコピー
  5. 作成した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を取得

  1. Google Apps Scriptを開き、新しいプロジェクトを作成
  2. 上記コードを貼り付け、トークン・ユーザーIDを書き換える
  3. 「デプロイ」→「新しいデプロイ」→「ウェブアプリ」を選択
  4. アクセスできるユーザー:「全員」に設定してデプロイ
  5. 表示されるWebhookのURLをコピーしておく

ステップ④|TradingViewでアラートを設定

  1. 複合スクリプトを適用したチャートで時計マーク(アラート)をクリック
  2. 条件:「買いアラート」を選択
  3. 「通知」タブ → Webhook URLにGASのURLを貼り付け
  4. メッセージ欄に以下を入力:

TradingViewアラートメッセージ(JSON形式)

{"message": "【買いシグナル】{{ticker}} 価格:{{close}} 時刻:{{timenow}}\nMA・RSI・出来高の3条件が揃いました"}

✅ 動作確認の方法

アラートを保存後、テスト用にRSI・MAの閾値を一時的に緩めてシグナルを発生させ、LINEに通知が届くか確認してください。届いたら元の閾値に戻します。


Bitget Webhook連携【アラートから自動注文まで】

LINE通知の次は「通知を受け取ったら自分で注文」ではなく、シグナルと同時にBitgetへ自動注文が入る仕組みを構築します。

⚡ Bitget APIを使うには口座が必要です

仮想通貨・株式CFD(Apple・Tesla・S&P500)も同一口座で取引可能

Bitgetに無料登録する →

自動注文の全体フロー

📊 TradingViewアラート発火
↓(Webhook JSON送信)
⚙️ Google Apps Script(中継)
↓(Bitget REST API呼び出し)
💹 Bitgetに成行注文

ステップ①|Bitget APIキーの取得

  1. Bitgetにログイン → 右上のアイコン →「APIマネジメント」
  2. 「APIキーを作成」をクリック
  3. 権限:「読み取り」+「スポット取引」のみにチェック(先物を使う場合は先物取引も追加)
  4. パスフレーズを設定して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_KEYBITGET_SECRETBITGET_PASSPHRASEを登録してください。コードに直接書くとGitHubなどに漏洩するリスクがあります。

✦ BITGET ✦

APIキーの取得はBitget口座から

コピートレード・先物・xStocks(Apple・Tesla・S&P500)も同一口座で完結

Bitgetに無料登録する →


バックテスト精度を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ドル割引が適用されます

今すぐTradingViewを始める →

✦ STEP 2 ✦

Bitgetで自動取引を始める

仮想通貨・株式CFD・ゴールド・外貨を1つの口座でまとめて管理

Bitgetに無料登録する →

よくある質問

Q. GASの中継サーバーは常時起動しておく必要がありますか?

GASはWebhookが届いたときだけ起動するサーバーレス方式なので、常時起動は不要です。月の実行回数に上限はありますが(無料枠で6分/日)、自動売買の頻度が高くない限り問題になりません。

Q. TradingViewの無料プランでWebhookは使えますか?

Webhookアラートの送信にはEssentials以上の有料プランが必要です。無料プランではアラート自体が1件のみに制限され、Webhook送信機能も使えません。

Q. 自動注文で大きな損失が出るリスクはありませんか?

あります。自動売買は予想外の動きをすることがあるため、必ずポジションサイズを小さく設定し、損切り条件もスクリプトに組み込んでください。また本番稼働前にBitgetのテストネット環境での動作確認を強く推奨します。

Q. 仮想通貨以外(株式CFDなど)でも同じ手順で自動注文できますか?

BitgetのTradFi・xStocks対応銘柄(Apple・Tesla・S&P500等)であれば、APIのsymbolパラメーターを変更するだけで同じ仕組みが使えます。ただし各銘柄の取引時間・最小注文単位はBitgetの公式ドキュメントでご確認ください。