📊 TradingView → EA作成 #Pine Script #ガウシアンバンド #MQL4変換 #EA #ChatGPT #Claude Code #中級

【中級編】説明できないインジでもEA化できる — Pine ScriptをAIに丸投げする方法

(更新: 2026年1月7日) 読了 約15分

初級編(bb-ma-ea-beginner)では、ボリンジャーバンドと移動平均線という「自分で仕組みを説明できるインジ」を使いました。売買条件を日本語で書いて、AIに渡す——そのプロセスを体験できました。

今回は一段上のことをやります。

「仕組みがよくわからないインジケーター」でも、EA化できる。

そのことを、Volatility Gaussian Bandsという実例を使って示します。


「このインジ、よさそうだけど仕組みがわからない」問題

TradingViewでいろんなインジケーターを試していると、「あ、これしっくりくる」というものが見つかります。

でも説明画面を開いてみると、こんな言葉が並んでいる。

「ガウスフィルター」「動的ボラティリティ」「標準偏差の多項式近似」——しかも英語で。自力で読み解くのはなかなか厳しい。

3年前なら、ここで諦めていました。「仕組みがわからないから、EA化はできない」——そう結論を出して、次のインジを探し始めていた。

でも今はAIがある。問題ありません。

「自分で説明できない」ことは、もはや障壁ではありません。Pine Scriptのソースコードをそのままコピペして渡すだけで、AIがロジックを読んで、日本語で解説して、MQL4に変換してくれます。

「言語化不要」。これが中級編の核心です。


実例:Volatility Gaussian Bands とは

今回使うのは、TradingViewで公開されているオープンソースのインジケーター「Volatility Gaussian Bands [BigBeluga]」です。

Volatility Gaussian Bandsをチャートに表示した様子

見た目はボリンジャーバンドやケルトナーチャネルに似ています。中央線と上下バンドがある構造は同じですが、中央線の計算にガウスフィルターという手法を使っていて、通常の移動平均線より滑らかでノイズに強い動きをします。

使い方は直感的です。

  • 価格がバンド上限を超えた後、バンド内に戻ってくる → 売りの候補
  • 価格がバンド下限を下回った後、バンド内に戻ってくる → 買いの候補
  • 中央線の向きでトレンド方向を判断する

このインジケーターの詳しい概要は「Volatility Gaussian Bands インジケーター解説」で読めます。

💡 INFO

重要なのは計算ロジックを理解する必要がないということです。見た目で「このバンドの使い方ならわかる」と思えれば十分です。内部の数学はAIに任せます。


Pine Scriptのソースコードを手に入れる

チャートにセットしているインジケーターの「ソースを表示」からPine Scriptのソースコードを丸ごとコピーして、AIとの会話に貼り付けましょう。

⚠️ WARNING

「ソースを表示」が出ないインジケーターはクローズドソース(非公開)なので、この方法は使えません。TradingViewのコミュニティスクリプト検索で「オープンソース」フィルターをかけると対応インジだけを絞り込めます。


AIに丸投げする — 2つの聞き方

ここが記事の核心です。コピーしたPine Scriptをどう使うかを具体的に説明します。

基本的な考え方: コードをそのままAIに渡す。自分で言語化する必要はない。AIがコードを読んで理解して、翻訳してくれる。

聞き方は2段階に分けると結果が安定します。


聞き方①:まずロジックを解説してもらう

最初から「MQL4に変換して」と頼む前に、AIに内容を解説させます。「AIが何を理解したか」を自分の目で確認できるので、変換後のコードが意図通りかどうかを判断できます。

以下はTradingViewのインジケーター「Volatility Gaussian Bands [BigBeluga]」のPine Scriptソースコードです。

[ここにコピーしたPine Scriptのソースコードを全文ペースト]

このインジケーターの主要なバンド部分の計算方法を、日本語でわかりやすく解説してください。
特に以下の点を教えてください:
- 中央線(ガウスフィルター部分)はどう計算されているか
- 上限バンドと下限バンドはどう計算されているか
- バンドの幅(ボラティリティ)はどう決まっているか
- ボリンジャーバンドとの主な違いは何か

このプロンプトに対して、AIはおおむね以下のような解説を返してきます。

「このインジケーターの中央線は、ガウス分布の重みを使った加重移動平均(ガウスフィルター)で計算されています。通常の単純移動平均(SMA)は各バーを同じ重みで平均しますが、ガウスフィルターは中心(直近バー)により大きな重みを与え、端(過去のバー)に向かって重みがなだらかに小さくなる構造です。この結果、ボリンジャーバンドの中心線(SMA)より滑らかなラインが描かれます。バンドの幅は価格のボラティリティ(標準偏差)に基づいており、相場が荒れると自動的に広がります」

「ああ、そういう仕組みか」と理解できれば十分です。数式を暗記する必要も、自分で再現できる必要もありません。

💡 INFO

AIの解説が長くなった場合、「上記の解説を、以下の形式でまとめてください:①中央線の計算(3行以内)②バンドの計算(3行以内)③ボリバンとの違い(2行以内)」と続けて聞くと整理できます。


聞き方②:そのままMQL4に変換してもらう

ロジックを確認できたら、次は変換です。同じコードをもう一度渡しながら、MQL4での再実装を依頼します。

以下はTradingViewのインジケーター「Volatility Gaussian Bands [BigBeluga]」のPine Scriptソースコードです。

[ここにコピーしたPine Scriptのソースコードを全文ペースト]

このインジケーターのバンドの計算ロジックをMQL4で再現してください。以下の仕様に従ってください:

- ガウスフィルター(中央線)の計算をMQL4のカスタム関数として実装すること(関数名: GaussianFilter)
- 上限バンド・下限バンドの計算も含めること
- Pine ScriptとMQL4は別の言語なので、直接変換ではなく「ロジックをMQL4で再実装する」アプローチで作成してください
- 全行に日本語コメントを付けること
- 単体で動作するインジケーター(.mq4)ではなく、EA(OnTick関数を持つ.mq4ファイル)の計算部分として使えるコードにすること

このプロンプトでAIがガウスフィルターのMQL4実装を生成してくれます。次のセクションでは、この変換結果を使って実際のEAを完成させます。

✅ TIP

①と②を1回のプロンプトにまとめることもできます。ただし最初のうちは2段階に分ける方が、AIが間違った理解をしていないかを確認できるのでおすすめです。慣れてきたら1回で依頼する方が効率的です。


売買条件を設計してEAにする

バンドの計算が再現できる見通しが立ったので、次は売買条件を設計してEAにまとめます。

今回の売買ロジック

Volatility Gaussian Bandsの使い方に従って、以下の条件を設定します。

買いエントリー条件(バンド下限からの回帰)

  • 2本前の確定バー(shift=2)の終値がバンド下限を下回っていた
  • かつ、1本前の確定バー(shift=1)の終値がバンド内(下限より上)に戻っている
  • かつ、中央線(ガウスフィルター値)が上向き(shift=1の中央線 > shift=2の中央線)

売りエントリー条件(バンド上限からの回帰)

  • 2本前の確定バー(shift=2)の終値がバンド上限を上回っていた
  • かつ、1本前の確定バー(shift=1)の終値がバンド内(上限より下)に戻っている
  • かつ、中央線(ガウスフィルター値)が下向き(shift=1の中央線 < shift=2の中央線)

決済条件

  • 損切り: エントリー価格から 50pips
  • 利確: エントリー価格から 100pips

ポジション管理

  • ロット: 0.1(外部変数で変更可能)
  • 同時保有ポジション: 最大1件

💡 INFO

「バンド外→バンド内に戻る」という条件が初級編との大きな違いです。初級編では「バンドから出た瞬間」にエントリーしていましたが、今回は「バンドに戻ってきたタイミング」でエントリーします。この条件を追加することで、バンドブレイクがさらに進んでいく局面(ダマシ)を一定程度フィルターできます。

AIへの最終プロンプト(コピペ可)

ソースコードの読み込みと売買条件の指示を1つのプロンプトにまとめます。

以下はTradingViewのインジケーター「Volatility Gaussian Bands [BigBeluga]」のPine Scriptソースコードです。

[ここにコピーしたPine Scriptのソースコードを全文ペースト]

このインジケーターのロジックを使って、MT4で動作するEA(MQL4)を作成してください。

【EA名】GaussianBands_EA

【バンドの計算について】
- Pine Scriptのガウスフィルター計算をMQL4で再実装すること
- ガウスフィルターはカスタム関数 GaussianFilter(period, sigma, shift) として実装すること
- 上限バンド・下限バンドもカスタム関数で実装すること
- Pine ScriptとMQL4は別の言語なので、直接変換ではなく「ロジックをMQL4で再実装する」アプローチで作成してください

【エントリー条件】
- 買い: shift=2の終値がバンド下限を下回り、かつshift=1の終値がバンド下限より上(バンド内に戻った)、かつshift=1のガウス中央線 > shift=2のガウス中央線(上向き)
- 売り: shift=2の終値がバンド上限を上回り、かつshift=1の終値がバンド上限より下(バンド内に戻った)、かつshift=1のガウス中央線 < shift=2のガウス中央線(下向き)

【決済条件】
- 損切り: エントリー価格から 50pips(外部変数 StopLossPips)
- 利確: エントリー価格から 100pips(外部変数 TakeProfitPips)

【ポジション管理】
- ロット: 0.1(外部変数 LotSize)
- 同時保有ポジションは最大1件(買いまたは売りどちらか1件のみ)

【必須要件】
- extern変数でパラメータをMT4のEA設定画面から変更できるようにする
- マジックナンバーを使用(外部変数 MagicNumber = 30001)
- 5桁業者(Digits==5 or Digits==3)と4桁業者の両方に対応したpips計算
- 全ての変数・関数・処理ブロックに日本語コメントを付ける
- コードは省略せず全文を出力すること

AIが生成したMQL4コード

上記プロンプトに対してAIが生成するコードは、以下のような構造になります。

//+------------------------------------------------------------------+
//| GaussianBands_EA.mq4                                             |
//| Volatility Gaussian BandsのロジックをMQL4で再実装したEA           |
//| ガウスフィルターでバンドを計算し、バンド回帰でエントリーする        |
//+------------------------------------------------------------------+
#property strict

//--- 外部パラメーター(MT4のEA設定画面から変更可能)
extern int    GaussPeriod    = 20;    // ガウスフィルターの計算期間
extern double GaussSigma     = 2.0;  // ガウスフィルターのシグマ(滑らかさ)
extern double BandMultiplier = 2.0;  // バンド幅の倍率(標準偏差にかける係数)
extern double LotSize        = 0.1;  // ロットサイズ
extern int    StopLossPips   = 50;   // 損切りpips数
extern int    TakeProfitPips = 100;  // 利確pips数
extern int    MagicNumber    = 30001; // このEA専用のマジックナンバー
extern int    Slippage       = 3;    // 許容スリッページ(pips)

//--- 内部変数
double PipValue; // 1pipあたりの価格(5桁業者対応)

//+------------------------------------------------------------------+
//| ガウスフィルターを計算するカスタム関数                              |
//| 引数:                                                            |
//|   period  - 計算する期間(バー数)                                |
//|   sigma   - ガウス分布の標準偏差(値が大きいほど滑らか)           |
//|   shift   - 何本前の確定バーを使うか(0=現在、1=1本前)            |
//| 戻り値: 指定した shift 位置のガウス加重移動平均                    |
//+------------------------------------------------------------------+
double GaussianFilter(int period, double sigma, int shift)
{
    double weightSum    = 0.0; // 重みの合計
    double weightedSum  = 0.0; // 重み × 価格の合計
    int    halfPeriod   = period / 2; // 期間の中心位置

    // 各バーにガウス分布の重みを割り当てて加重平均を計算する
    for(int i = 0; i < period; i++)
    {
        // ガウス分布の重み: exp(-0.5 × ((中心からの距離) / sigma)^2)
        // 中心(i = halfPeriod)が最も重みが大きく、端に向かって小さくなる
        double distance = (double)(i - halfPeriod);
        double weight   = MathExp(-0.5 * (distance / sigma) * (distance / sigma));

        // shift位置から過去に向かってバーの価格を取得して加重する
        weightedSum += Close[shift + i] * weight;
        weightSum   += weight;
    }

    // 重み付き平均を返す(重みの合計で割って正規化)
    if(weightSum == 0.0) return(Close[shift]); // ゼロ除算を防ぐ
    return(weightedSum / weightSum);
}

//+------------------------------------------------------------------+
//| ガウスバンドの上限を計算するカスタム関数                            |
//| 中央線(ガウスフィルター値) + 標準偏差 × BandMultiplier           |
//+------------------------------------------------------------------+
double GaussianUpperBand(int period, double sigma, double multiplier, int shift)
{
    double gaussCenter = GaussianFilter(period, sigma, shift); // ガウス中央線
    double sumSqDiff   = 0.0; // 価格と中央線の差の二乗の合計

    // 標準偏差を計算する(price - ガウス中央線 の散らばり)
    for(int i = 0; i < period; i++)
    {
        double diff = Close[shift + i] - gaussCenter;
        sumSqDiff  += diff * diff;
    }

    double stdDev = MathSqrt(sumSqDiff / period); // 標準偏差
    return(gaussCenter + multiplier * stdDev);    // 上限バンド = 中央線 + 標準偏差 × 倍率
}

//+------------------------------------------------------------------+
//| ガウスバンドの下限を計算するカスタム関数                            |
//| 中央線(ガウスフィルター値) − 標準偏差 × BandMultiplier           |
//+------------------------------------------------------------------+
double GaussianLowerBand(int period, double sigma, double multiplier, int shift)
{
    double gaussCenter = GaussianFilter(period, sigma, shift); // ガウス中央線
    double sumSqDiff   = 0.0; // 価格と中央線の差の二乗の合計

    // 標準偏差を計算する
    for(int i = 0; i < period; i++)
    {
        double diff = Close[shift + i] - gaussCenter;
        sumSqDiff  += diff * diff;
    }

    double stdDev = MathSqrt(sumSqDiff / period); // 標準偏差
    return(gaussCenter - multiplier * stdDev);    // 下限バンド = 中央線 − 標準偏差 × 倍率
}

//+------------------------------------------------------------------+
//| 初期化関数 — EA起動時に1回だけ実行される                          |
//+------------------------------------------------------------------+
int OnInit()
{
    // 5桁業者(Digits==5 or Digits==3)と4桁業者を自動判別してpip値を設定
    if(Digits == 5 || Digits == 3)
        PipValue = Point * 10; // 5桁業者: 1pip = Point × 10
    else
        PipValue = Point;      // 4桁業者: 1pip = Point

    Print("GaussianBands_EA 起動。PipValue=", PipValue);
    return(INIT_SUCCEEDED);
}

//+------------------------------------------------------------------+
//| メイン処理 — ティックが来るたびに実行される                        |
//+------------------------------------------------------------------+
void OnTick()
{
    //--- 新しい確定バーが生まれたタイミング以外は処理をスキップ
    static datetime lastBarTime = 0;
    if(Time[0] == lastBarTime) return;
    lastBarTime = Time[0];

    //--- バンド値を計算(確定バーshift=1とshift=2の両方が必要)
    // shift=1 の各値(直前の確定バー)
    double gaussCenter1 = GaussianFilter(GaussPeriod, GaussSigma, 1); // ガウス中央線
    double upperBand1   = GaussianUpperBand(GaussPeriod, GaussSigma, BandMultiplier, 1); // 上限バンド
    double lowerBand1   = GaussianLowerBand(GaussPeriod, GaussSigma, BandMultiplier, 1); // 下限バンド

    // shift=2 の各値(2本前の確定バー)
    double gaussCenter2 = GaussianFilter(GaussPeriod, GaussSigma, 2); // ガウス中央線
    double upperBand2   = GaussianUpperBand(GaussPeriod, GaussSigma, BandMultiplier, 2); // 上限バンド
    double lowerBand2   = GaussianLowerBand(GaussPeriod, GaussSigma, BandMultiplier, 2); // 下限バンド

    //--- 終値を取得
    double close1 = Close[1]; // 直前の確定バーの終値
    double close2 = Close[2]; // 2本前の確定バーの終値

    //--- 中央線の向きを判定
    bool gaussUp   = (gaussCenter1 > gaussCenter2); // 中央線が上向き(shift1 > shift2)
    bool gaussDown = (gaussCenter1 < gaussCenter2); // 中央線が下向き(shift1 < shift2)

    //--- バンド回帰の条件を判定
    // 買い回帰: 2本前はバンド下限より下 → 1本前はバンド下限より上(内側に戻った)
    bool buyReturn  = (close2 < lowerBand2) && (close1 > lowerBand1);
    // 売り回帰: 2本前はバンド上限より上 → 1本前はバンド上限より下(内側に戻った)
    bool sellReturn = (close2 > upperBand2) && (close1 < upperBand1);

    //--- 現在のポジション状況を確認
    bool hasBuy  = HasPosition(OP_BUY);  // 買いポジションがあるか
    bool hasSell = HasPosition(OP_SELL); // 売りポジションがあるか

    //--- 買いエントリー判定
    // 条件1: バンド下限からバンド内への回帰が確認できた
    // 条件2: 中央線が上向き(上昇傾向の相場)
    // 条件3: 現在ポジションなし(最大1件制限)
    if(!hasBuy && !hasSell && buyReturn && gaussUp)
    {
        double askPrice = Ask;                                          // 買いはAsk価格で発注
        double sl       = askPrice - StopLossPips   * PipValue;        // 損切り価格
        double tp       = askPrice + TakeProfitPips * PipValue;        // 利確価格

        int ticket = OrderSend(
            Symbol(),              // 現在のチャートの通貨ペア
            OP_BUY,               // 買い注文
            LotSize,              // ロットサイズ
            askPrice,             // 発注価格
            Slippage,             // スリッページ許容幅
            sl,                   // 損切り価格
            tp,                   // 利確価格
            "GB Buy",             // コメント(MT4の取引履歴に表示)
            MagicNumber,          // マジックナンバー
            0,                    // 有効期限なし
            clrBlue               // チャート上の矢印の色
        );

        if(ticket < 0)
            Print("買い注文エラー: ", GetLastError()); // エラー番号をログ出力
    }

    //--- 売りエントリー判定
    // 条件1: バンド上限からバンド内への回帰が確認できた
    // 条件2: 中央線が下向き(下降傾向の相場)
    // 条件3: 現在ポジションなし(最大1件制限)
    if(!hasBuy && !hasSell && sellReturn && gaussDown)
    {
        double bidPrice = Bid;                                          // 売りはBid価格で発注
        double sl       = bidPrice + StopLossPips   * PipValue;        // 損切り価格
        double tp       = bidPrice - TakeProfitPips * PipValue;        // 利確価格

        int ticket = OrderSend(
            Symbol(),
            OP_SELL,              // 売り注文
            LotSize,
            bidPrice,
            Slippage,
            sl,
            tp,
            "GB Sell",
            MagicNumber,
            0,
            clrRed                // チャート上の矢印の色
        );

        if(ticket < 0)
            Print("売り注文エラー: ", GetLastError());
    }
}

//+------------------------------------------------------------------+
//| ポジション有無を確認するヘルパー関数                               |
//| 引数 orderType: OP_BUY または OP_SELL                            |
//| 戻り値: このEAが保有する指定タイプのポジションがあれば true         |
//+------------------------------------------------------------------+
bool HasPosition(int orderType)
{
    for(int i = OrdersTotal() - 1; i >= 0; i--)
    {
        if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
        {
            // マジックナンバーと通貨ペアでこのEA専用のポジションだけを絞り込む
            if(OrderMagicNumber() == MagicNumber &&
               OrderSymbol()      == Symbol()    &&
               OrderType()        == orderType)
            {
                return(true); // 該当するポジションが存在する
            }
        }
    }
    return(false); // ポジションなし
}

⚠️ WARNING

GaussianFilter関数の中で Close[shift + i] として過去のバーを参照しています。GaussPeriod = 20 のとき、shift=2 で計算する場合は Close[2] から Close[21] まで参照します。チャートの表示バー数が少ない環境(デモ口座の起動直後など)では、データが不足してエラーになる場合があります。MT4のチャートを十分に遡って表示してからEAを起動してください。

💡 INFO

このガウスフィルターの実装はPine Scriptのオリジナル実装を完全に再現したものではなく、ガウス分布の重み付き平均という「考え方」をMQL4で再実装したものです。計算結果がTradingViewの表示と完全に一致しない場合がありますが、これはPine ScriptとMQL4の仕様の違いによるものです。「AIがロジックを読んで再実装した」という性質上、実用的に機能するレベルの再現を優先しています。



ソースコード利用時のライセンスについて

Pine ScriptをAIに渡してEAを作るとき、ライセンスについて最低限知っておくべきことがあります。

⚠️ WARNING

TradingViewのオープンソースインジケーターは多くの場合、Mozilla Public License 2.0(MPL 2.0) で公開されています。このライセンスの条件を確認しましょう。

個人利用・学習目的でのEA化は問題ありません。

今回のように「自分のトレードに使うEAを作る」「仕組みを学ぶ」という目的であれば、Pine Scriptのロジックを参考にしてMQL4でEAを作ることに法的な問題はありません。このサイトで紹介している内容はすべてこの範囲内です。

販売・配布を考えている場合は要注意です。

作成したEAを販売・配布する場合は、元のインジケーターのライセンス条件を確認してください。MPL 2.0は商用利用を許可していますが、派生物のソースコード開示を求める条件があります。

元の作者への敬意も忘れずに。

法律的な話とは別に、優秀なインジケーターを公開してくれた作者の仕事に敬意を持つことが大切です。そのロジックで収益を上げた場合は、インジケーターのページに高評価を送るか、コメントで感謝を伝えることをおすすめします。

🚫 DANGER

ソースコードが非公開(クローズドソース)のインジケーターを逆コンパイルして内容を取り出し、EAに使うことは絶対にしないでください。これは利用規約違反であり、場合によっては法的な問題に発展します。「ソースを表示」ボタンが出ないインジケーターには、今回の手法は使えません。


Pine Script → MQL4変換プロンプトのコツ

この手法を知っていれば、Volatility Gaussian Bandsに限らず、TradingViewでソースが公開されているあらゆるインジケーターに応用できます。

うまくいくプロンプトには共通するポイントがあります。

1. 「Pine ScriptをMQL4に変換してください」と明示する

AIはコードの言語を自動判定しますが、何から何に変換するのかを明示した方が精度が上がります。

❌ このコードをEAにしてください
✅ 以下のPine ScriptのロジックをMQL4で再実装して、MT4で動作するEAを作成してください

「再実装」という言葉がポイントです。Pine ScriptとMQL4は構造が全く違うので、1行ずつの直訳ではなく「ロジックを理解してMQL4で書き直す」アプローチの方が良い結果が出ます。

2. ソースコードは省略せず全文貼る

「長すぎるから要点だけ」は逆効果です。AIはコード全体の文脈から各関数の役割を理解します。200行程度のPine Scriptなら全文貼っても問題ありません。

3. カスタム関数に分けるよう指示する

✅ ガウスフィルターの計算はカスタム関数 GaussianFilter() として分離して実装すること

1つの巨大なOnTick()に全部詰め込まれると、後から修正するのが大変です。「計算部分」と「売買判定部分」を分けておくと、パラメータの調整やロジックの差し替えが楽になります。

4. 日本語コメント・エラーハンドリング・pips計算を毎回書く

この3つは「テンプレ」として毎回入れてください。

- 全行に日本語コメントを付けること
- エラーハンドリングを含めること
- 5桁業者(Digits==5 or Digits==3)と4桁業者の両方に対応したpips計算にすること

特にpips計算は忘れるとSL/TPが10倍ズレるので重要です。

5. 出力を省略させない

AIは長いコードを生成するとき「// … 以下同様」と省略することがあります。

✅ コードは省略せず全文を出力すること

この一文を入れるだけで、コピペしてそのままコンパイルできる完全なコードが得られます。


ここまで実践すると、「コード自体は出せるのに、エラー修正と実装反映で時間が溶ける」という壁にぶつかりやすいはずです。
本サイトでは考え方と手順を学べますが、最短で完成まで持っていくなら、作業をテンプレ化したプロンプトを道具として使うのが効率的です。


さらに効率よく、高精度なEAを完成させたい方へ

複数のインジケータを組み合わせた時のロジックの構築方法を含めた、AIによるEA作成の精度を高める専用プロンプトをダウンロードできます。

随時アップデートも行なっています。最速で始めたい方はこちらからプロンプトを受け取ってください。


関連記事


本記事で紹介するEA・手法は教育目的で作成されたものです。実際の取引で利益を保証するものではありません。EAの運用は必ずデモ口座で十分にテストした上で、自己責任で行ってください。FX取引にはリスクが伴います。

次のステップ

まずデモで動作確認 → OKなら本番運用、が安全です。

デモ口座でEAを回す手順
共有:

関連記事

#Pine Script #ガウシアンバンド #MQL4変換 #EA #ChatGPT #Claude Code #中級

🎯 このEAを動かすにはMT4/MT5対応のFX口座が必要です

4つの質問に答えるだけで、あなたに最適な国内FX業者がわかります。

あなたに合った業者を診断する →
目次を表示