
バイナリーオプションでも利益が狙えるドル円とユーロドルに対応したFXマルチロジックMT4インジケーターとEAの無料配布
こんにちは、ChatGPT担当のナナミです。
本日は、FXとバイナリーオプションで使用できる『マルチロジックMT4インジケーター』と『バックテスト用に付属するEA自動売買』をご紹介します。
このインジケーターとEAをセットで使えば、過去の相場検証を容易に行うことができます。
また、FXだけでなく、バイナリーオプションでも利益が狙えるので戦略の幅が広がります。
今回ご紹介するインジケーターとEAはこのページの後半にダウンロードリンクを掲載しましたので、ご利用いただければと思います。
GPTsのリンクはこちら(GPT Store)
■Masayan EA Generator for MT4
https://chatgpt.com/g/g-VYNEupgws-masayan-ea-generator-for-mt4-ver1-01
■Masayan Indicator Generator for MT4
https://chatgpt.com/g/g-t1m5iewUY-masayan-indicator-generator-for-mt4
■ゴゴジャンでEA・インジケーター販売中!
https://www.gogojungle.co.jp/users/626040/products
■ブログURL(MT4初心者向け!GPTsのMasayan EA Generatorを使った自動売買講座)
https://fx.reform-network.net/2024/10/16/mt4初心者向け!gptsのmasayan-ea-generatorを使った自動売買講座/
■ブログURL【無料】MT4対応の新ツール登場!ノーコードでインジケーター作成!
https://fx.reform-network.net/2024/10/30/【無料】mt4対応の新ツール登場!ノーコードでイ/
まず、『マルチロジックMT4インジケーター』の開発にあたり、ロジックの優位性を検証します。
バイナリーオプションで使用することを考慮すると、高い勝率が必要となります。
FXの場合、コツコツ負けてドカンと勝つ、いわゆる損小利大のやり方であれば、勝率は40%でもトータルで勝つことは可能です。
ですがこのやり方だと、バイナリーオプションでは勝つことが出来ません。
指定したレートより上か下かを当てるバイナリーオプションでは、勝率が重要となります。
バイナリーオプションを提供している国内のFX会社は、GMO外貨の「オプトレ!」や楽天証券の「らくオプ」が有名です。
海外ではHighLowが有名ですね。
国内のバイナリーオプション業者は、金融庁の認可を受けており、税金制度や信頼性の面で有利です。
一方、海外業者は日本の金融庁の監督下にないため、トラブルが発生した際の対応に注意が必要です。
今回私が選んだロジックは、過去の動画でもご紹介したグリッドラッシュとフィボナッチです。

グリッドラッシュはユーロドルに対応した逆張りのEAです。

フィボナッチはドル円に対応したインジケーターです。
両方とも勝率は6割を超えており、バイナリーオプションのルールでトレードしてもプラスの収支が狙えるロジックとなります。
今回この2つのロジックを搭載したEAとインジケーターを作成することにします。
まず初めに、バイナリーオプションのトレードのルールの確認です。
FXのスプレッドにあたる取引コストが高いのが国内のバイナリーオプションの特徴です。
ペイアウト率(取引コスト)だけで言えばHighLowなどの海外業者の方が条件は良いのですが、出金拒否などのリスクも高いので、出金をこまめに行うなどの対策が必要です。
国内のバイナリーオプションは規制により、現在では日経平均オプションのようなルールが採用されています。
バイナリーオプションでは、FXで言うロングはコールと呼び「買い」を意味します。
つまり、円安(ドル円レート上昇)を予想する場合はコールオプションを選びます。
反対にショートはプットと呼び「売り」を意味します。
つまり、円高(ドル円レート下落)を予想する場合はプットオプションを選びます。
簡単に言えば、コール は 上昇を予想、プット は 下落を予想ということです。
途中売却も出来ますが、基本的には決められた時間に、レートが基準価格より上にあるか下にあるかを予想する投機ということです。
コールかプットの予測が的中した場合、1枚あたり1,000円のペイアウト(配当)を受け取ることができます。
負けた場合は全額没収になります。
国内のバイナリーオプションの会社はペイアウト率が悪く、単純に売買を繰り返しても負けるように出来ています。
FXと損益通算できるので、税金の面では良いのですが、取引コストが高すぎてトレードする気にはなりません。
国内のスプレッドの狭いFX会社でスキャルピングした方が勝負になるので、FXの方が人気があるのも納得ですね。
ここで、気になるペイアウト率と勝率の関係性について、ChatGPTに聞いてみました。
勝率が60%以上の手法であればペイアウト率は1.67倍以上でプラスに。
勝率55%以上の手法であれば、ペイアウト率は1.82倍以上であればバイナリーオプションではプラスにすることが可能となります。
なるほど、勝率が60%近い手法なら勝負になりそうですね。
もちろん、FXでコツコツとスキャルピングで稼ぐといったやり方も有効です。
今回はロジックがとても複雑なので、ChatGPTで作成することはできません。
EAのソースコードに関しては、すべてのコードをこのページの最後に公開していますので、カスタマイズするなどしてご利用いただければと思います。
EAに関してはバックテストだけでなく、リアルトレードでも動く仕様となっておりますので、EA自動売買をご希望の方はEA版を使用して自動売買を行うことも可能です。
EAのソースコードについて少し説明をします。
今回EA開発するにあたり、勝率の高いスキャルピング系のEAのロジックを採用しました。
クロス円通貨(通貨名にJ P Yを含む)場合と、ドルストレート(通貨名にJ P Yを含まない)場合でロジックを切り換えるプログラムとなります。
string value = Symbol();
string target = "JPY";
int pos = StringFind(value, target);
上記のコードをEAに組み込むことで、以下のif文で処理を振り分けすることができます。
if (pos > 0){//JPYを含む=USDJPY
/ドル円に対応したフィボナッチのロジック/
if ( pos <= 0 ) {// JPYを含まないドルストレート=EURUSD
/ユーロドルに対応した逆張りスキャルのグリッドラッシュのロジック/
変数posには、EAをセットしたチャートのシンボルにJPYを含む場合は3が入り、JPYを含まないドルストレートなどの通貨では-1が入ります。
注意点として、JP225やXAUUSDなども、JPYを含まないドルストレートのロジックとして動きます。
今回、バイナリーオプションにも対応する目的で、ポジションを保有してから何分後に決済するか指定できるロジックを追加しました。
EAのバックテスト機能を使い、強力な過去検証とフォワードテストを行うことが可能となります。
デフォルトではドル円とユーロドルの5分足チャートに最適化しており、EA版はポジションを保有してから45分後に決済する仕組みにしました。
45分以内に反対の売買サインが出た時は、決済します。
インジケーター版に関してはインジケーターをチャートにセットすると、このように矢印とアラートで売買タイミングをお知らせします。

インジケーターとEAを同じ設定にすることで、同じタイミングで売買を行うことができるので、EAのバックテストの再現が裁量トレードでは可能となります。
ここまで高性能なEAとインジケーターを無料で配布している人はあまりいないと思います。
完成したEAのバックテスト結果はこちらです。


スプレッドは0.5pips固定としました。
デフォルトでは45分後にポジションを決済する設定になっています。
EAであれば、きれいな右肩上がりの資産チャートが理想となりますが、バイナリーオプションでは勝率が重要です。
2007年からの長期のバックテストでは、ドル円が勝率55%、ユーロドルで勝率57%となっております。
マルチロジック化にともない、ロジックはクロス円とドルストレートで自動で切り替わります。
ドル円では17年でトレード回数7079回と決して多いとは言えません。
ユーロドルではスキャルピング系EAのグリッドラッシュのロジックをそのまま採用している関係で、トレード回数は63846回と、ドル円の9倍のトレード頻度となります。
このインジケーターをMT4のドル円とユーロドルの5分足チャートにセットすることで、スキャルのトレードを行うことも可能です。

EAとインジケーターは下記のリンクより無料でダウンロードしてご利用いただけます。
EAのダウンロード(ソースコード付き)
https://fx.reform-network.net/wp-content/uploads/2024/11/BinaryOption_USDJPY_EURUSD_M5.zip
インジケーターのダウンロード(ex4ファイルのみ)
https://fx.reform-network.net/wp-content/uploads/2024/11/BinaryOption-Indicator-M5.zip
EAに関しては、以前の動画でChatGPTを使用して開発したロジックをそのまま使用していることから、ソースコードをすべて公開となります。
//+------------------------------------------------------------------+
//| BinaryOption_USDJPY_EURUSD_M5.mq4 |
//| ポジションを保有してから何分後に決済するか指定できるロジックを追加 |
//+------------------------------------------------------------------+
#property copyright "Copyright 2024, Masayan."
#property version "1.01"
#property strict
#property description "https://fx.reform-network.net"
extern int Magic = 20241126;// Magic number
extern double Lots = 0.1;//1.0=100000 0.1=10000 0.01=1000
extern double StopLossRequest = 1.0;// StopLoss 0.1=10pips 0.5=50pips 1=100pips
extern double TakeProfitRequest = 1.0;// TakeProfit 0.1=10pips 0.5=50pips 1=100pips
extern int PositionHoldMinutes = 45; // ポジション保有後の決済時間(分)
//ここからFibonacci Retracement USDJPY
extern int BollingerBandsPeriod = 30; // ボリンジャーバンドの期間「USDJPY」
extern int BollingerBandsDeviation = 2; // ボリンジャーバンドのシグマ値「USDJPY」
extern int FibonacciLookBack = 500; // フィボナッチリトレースメント計算のための過去の期間500か1000「USDJPY」
extern double FibonacciLevel = 0.5; // フィボナッチリトレースメントのレベル (例: 0.5 = 50%)「USDJPY」
int RsiPeriod = 14; // RSIの期間
//ここからGrid Rash EURUSD
extern double GridSize = 0.05; // カギ足のサイズ(最小値0.01=1pips 推奨値0.05=5pips 最大値0.5=50pips)「EURUSD」
extern int ADXPeriod = 40;// ADXの計算期間(範囲10~150)「EURUSD」
extern double ADXThreshold = 15.0;// トレンドの強さを判断するための基準値(範囲5~50)(数字が小さいほどトレード回数が増える)「EURUSD」
double lastBrickHigh = 0; // 前回のカギ足高値「EURUSD」
double lastBrickLow = 0; // 前回のカギ足安値「EURUSD」
//ここまでGrid Rash EURUSD
extern int MaxSpread = 50;// Max spread (50=5pips)
extern int MaxError = 100;// Continuous order count limit (Max=100)
extern string CommentPositions = "BinaryOption";
string tmpstr;
string error_msg;
string spread_msg;
string position_msg;
bool LongSign = false;
bool ShortSign = false;
double Pips = 0.01;
int e = 0;
int Adjusted_Slippage = 0;
datetime LongPositionOpenTime = 0; // ロングポジションのオープン時刻
datetime ShortPositionOpenTime = 0; // ショートポジションのオープン時刻
// フィボナッチリトレースメントを計算する関数
double CalculateFibonacciLevel(double high, double low, double level)
{
return high - (high - low) * level;
}
// グリッドラッシュで使用
double currentPrice = iClose(NULL, 0, 0);
// ティックが動くごとに処理
void OnTick()
{
if (Bars < FibonacciLookBack)
{
return;
}
if (StopLossRequest <= 0.01)
{
StopLossRequest = 0.01;
}
if (TakeProfitRequest <= 0.01)
{
TakeProfitRequest = 0.01;
}
if (MaxError >= 100)
{
MaxError = 100;
}
double Info_Spread = MarketInfo(Symbol(), MODE_SPREAD);
string value = Symbol();
string target = "JPY";
int pos = StringFind(value, target);
double Symbol_RATE = Close[1];
if (pos > 0)
{
Pips = 1.00;// ドルストレートは0.010(100pips)、クロス円は1.0(100pips)で判定
}
else if (Symbol_RATE > 10 && Symbol_RATE <= 100)
{
Pips = 0.1;
}
else if (Symbol_RATE > 100 && Symbol_RATE <= 1000)
{
Pips = 1.0;
}
else if (Symbol_RATE > 1000 && Symbol_RATE <= 10000)
{
Pips = 10.0;
}
else if (Symbol_RATE > 10000 && Symbol_RATE <= 100000)
{
Pips = 100.0;
}
else if (Symbol_RATE > 100000 && Symbol_RATE <= 1000000)
{
Pips = 1000.0;
}
else if (Symbol_RATE > 1000000 && Symbol_RATE <= 10000000)
{
Pips = 10000.0;
}
else if (Symbol_RATE > 10000000 && Symbol_RATE <= 100000000)
{
Pips = 100000.0;
}
else if (Symbol_RATE > 100000000)
{
Pips = 1000000.0;
}
//■□■□■□■□■ 以下フィボナッチのロジック ■□■□■□■□■
// 過去の高値と安値を取得
double highestHigh = iHigh(NULL, 0, iHighest(NULL, 0, MODE_HIGH, FibonacciLookBack, 0));
double lowestLow = iLow(NULL, 0, iLowest(NULL, 0, MODE_LOW, FibonacciLookBack, 0));
// フィボナッチレベルを計算
double fibonacciLevel = CalculateFibonacciLevel(highestHigh, lowestLow, FibonacciLevel);
// RSIとボリンジャーバンドを計算
double rsi = iRSI(NULL, 0, RsiPeriod, PRICE_CLOSE, 1);
double upperBand = iBands(NULL, 0, BollingerBandsPeriod, BollingerBandsDeviation, 0, PRICE_CLOSE, MODE_UPPER, 1);
double lowerBand = iBands(NULL, 0, BollingerBandsPeriod, BollingerBandsDeviation, 0, PRICE_CLOSE, MODE_LOWER, 1);
currentPrice = Close[0];
if (pos > 0){//JPYを含む=USDJPY
LongSign = false;
ShortSign = false;
// ロングサインの条件
if (rsi <= 30 && currentPrice <= lowerBand && currentPrice >= fibonacciLevel)
{
LongSign = true;
ShortSign = false;
}
// ショートサインの条件
else if (rsi >= 70 && currentPrice >= upperBand && currentPrice <= fibonacciLevel)
{
ShortSign = true;
LongSign = false;
}
else
{
LongSign = false;
ShortSign = false;
}
//決済ロジックを有効
if (CalculateCurrentOrders() == 1) { // ロングポジション保有
if (TimeCurrent() - LongPositionOpenTime >= PositionHoldMinutes * 60) {
CloseLongPosition(); // ロングポジションを決済
}
} else if (CalculateCurrentOrders() == -1) { // ショートポジション保有
if (TimeCurrent() - ShortPositionOpenTime >= PositionHoldMinutes * 60) {
CloseShortPosition(); // ショートポジションを決済
}
}
}
//■□■□■□■□■ 以下グリッドラッシュのロジック ■□■□■□■□■
bool FilterCondition = true; // フィルター条件の初期値をtrueに設定
double adx = iADX(NULL, 0, ADXPeriod, PRICE_CLOSE, MODE_MAIN, 1);
if (adx > ADXThreshold) {
FilterCondition = true; // 強いトレンド
} else {
FilterCondition = false; // トレンドが弱い
}
// カギ足ロジックを生成する
// 初回は基準の高値・安値を設定
if (lastBrickHigh == 0 && lastBrickLow == 0) {
lastBrickHigh = currentPrice;
lastBrickLow = currentPrice;
return; // 計算済みのバー数が0の場合に0を返す
}
//■□■□■□■□■ サイン点灯レート判定 ■□■□■□■□■
if ( pos <= 0 ) {// JPYを含まないドルストレート=EURUSD
LongSign = false;
ShortSign = false;
// カギ足の生成条件チェック
if (currentPrice >= lastBrickHigh + (GridSize * Pips) && Seconds() < 3 && FilterCondition == true) {
ShortSign = true;
LongSign = false;
lastBrickHigh = currentPrice;
lastBrickLow = currentPrice - (GridSize * Pips);
} else if (currentPrice <= lastBrickLow - (GridSize * Pips) && Seconds() < 3 && FilterCondition == true) {
LongSign = true;
ShortSign = false;
lastBrickLow = currentPrice;
lastBrickHigh = currentPrice + (GridSize * Pips);
} else {
LongSign = false;
ShortSign = false;
}
//決済ロジックを有効
if (CalculateCurrentOrders() == 1) { // ロングポジション保有
if (TimeCurrent() - LongPositionOpenTime >= PositionHoldMinutes * 60) {
CloseLongPosition(); // ロングポジションを決済
}
} else if (CalculateCurrentOrders() == -1) { // ショートポジション保有
if (TimeCurrent() - ShortPositionOpenTime >= PositionHoldMinutes * 60) {
CloseShortPosition(); // ショートポジションを決済
}
}
}
if (MaxSpread < Info_Spread)
{
LongSign = false;
ShortSign = false;
spread_msg = "Max spread Orber\n";
}
else
{
spread_msg = "";
}
if (Hour() == 4 && Minute() == 0 && Seconds() < 6)
{
e = 0;
}
if (Hour() == 11 && Minute() == 0 && Seconds() < 6)
{
e = 0;
}
if (Hour() == 18 && Minute() == 0 && Seconds() < 6)
{
e = 0;
}
if (e > MaxError)
{
LongSign = false;
ShortSign = false;
error_msg = "Continuous order count limit\n";
}
else
{
error_msg = "";
}
if (LongSign == true)
{
position_msg = "LongSign = true\n";
}
else if (ShortSign == true)
{
position_msg = "ShortSign = true\n";
}
else if (LongSign == false && ShortSign == false)
{
position_msg = "No Sign\n";
}
// 売買指示
if (LongSign == true)
{
if (CalculateCurrentOrders() == 0)
{
// ポジション保有していない場合
CheckForOpenLong();// 新規ロングオーダー処理を行う
LongPositionOpenTime = TimeCurrent(); // オープン時間を記録
e++;
}
else
{
// ポジション保有している場合
CloseShortPosition();// ショートポジションがある場合のみ決済ロング処理
}
}
if (ShortSign == true)
{
if (CalculateCurrentOrders() == 0)
{
// ポジション保有していない場合
CheckForOpenShort();// 新規ショートオーダー処理を行う
ShortPositionOpenTime = TimeCurrent(); // オープン時間を記録
e++;
}
else
{
// ポジション保有している場合
CloseLongPosition();// ロングポジションがある場合のみ決済ショート処理
}
}
if(pos>0){
tmpstr = StringConcatenate("クロス円で判定\n",error_msg, spread_msg, position_msg);
}else{
tmpstr = StringConcatenate("ドルストレートで判定\n",error_msg, spread_msg, position_msg);
}
Comment(tmpstr);
}
// 保有中のポジションを計算
int CalculateCurrentOrders(void)
{
int buys = 0;
int sells = 0;
int icount;
for (icount = 0; icount < OrdersTotal(); icount++)
{
if (OrderSelect(icount, SELECT_BY_POS, MODE_TRADES) == false)
{
break;
}
if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic)
{
if (OrderType() == OP_BUY)
{
buys++;
}
if (OrderType() == OP_SELL)
{
sells++;
}
}
}
if (buys > 0)
{
return (buys);
}
else
{
return (-sells);
}
}
// ショートポジション⇒ロングクローズ処理
void CloseShortPosition()
{
int icount;
bool ret;
for (icount = 0; icount < OrdersTotal(); icount++)
{
if (OrderSelect(icount, SELECT_BY_POS, MODE_TRADES) == false)
{
break;
}
if (OrderMagicNumber() != Magic || OrderSymbol() != Symbol())
{
continue;
}
// ショートポジションの場合⇒ロングエントリー
if (OrderType() == OP_SELL)
{
ret = OrderClose(
OrderTicket(),
OrderLots(),
Ask,
Adjusted_Slippage,
clrBlue);
if (ret == false)
{
Print("オーダークローズエラー:エラーコード=", GetLastError());
}
break;
}
}
}
// ロングポジション⇒ショートクローズ処理
void CloseLongPosition()
{
int icount;
bool ret;
for (icount = 0; icount < OrdersTotal(); icount++)
{
if (OrderSelect(icount, SELECT_BY_POS, MODE_TRADES) == false)
{
break;
}
if (OrderMagicNumber() != Magic || OrderSymbol() != Symbol())
{
continue;
}
// ロングポジションの場合⇒ショートエントリー
if (OrderType() == OP_BUY)
{
ret = OrderClose(
OrderTicket(),
OrderLots(),
Bid,
Adjusted_Slippage,
clrRed);
if (ret == false)
{
Print("オーダークローズエラー:エラーコード=", GetLastError());
}
break;
}
}
}
// ロングオーダー処理
void CheckForOpenLong()
{
int res;
double entrylot;
entrylot = NormalizeDouble(Lots, 2);
res = OrderSend(
Symbol(),
OP_BUY,
entrylot,
Ask,
Adjusted_Slippage,
Ask - (Pips * StopLossRequest),
Ask + (Pips * TakeProfitRequest),
CommentPositions,
Magic,
0,
clrRed);
return;
}
// ショートオーダー処理
void CheckForOpenShort()
{
int res;
double entrylot;
entrylot = NormalizeDouble(Lots, 2);
res = OrderSend(
Symbol(),
OP_SELL,
entrylot,
Bid,
Adjusted_Slippage,
Bid + (Pips * StopLossRequest),
Bid - (Pips * TakeProfitRequest),
CommentPositions,
Magic,
0,
clrBlue);
return;
}
インジケーターに関しては、ビジネスパートナー様を募集して有料で販売する可能性がありますので、今回は無料お試し版として2024年12月まで動作します。
2025年になりますと、売買サインは出なくなるので、無料でご利用希望の方はお早めにダウンロードして頂ければと思います。
使用しての感想や要望などございましたら、お気軽にコメントお願いします。
私が開発したEAやインジケーターを活用し、ともにプロモーションを展開していただけるビジネスパートナー様を募集
また、次回の動画で詳細をご案内いたしますが、この度わたくし、まさやんはビジネスパートナーを募集することとなりました。
私が開発したEAやインジケーターを活用し、ともにプロモーションを展開していただけるビジネスパートナー様を募集しております。
私が提供するものは、EAおよびインジケーターの開発と、それに関連するスキル全般です。
このような募集を行う理由は、売上の向上を目指しているためです。
私はEAクリエイターとして、2021年より活動を続けてまいりました。
2024年11月現在、YouTubeではチャンネル登録者数495人、noteではフォロワー数175人、X(旧Twitter)ではフォロワー1296人、さらにGogoJungleでは50名のフォロワーを獲得しており、EAインジケーター開発者として中堅の立ち位置に至ったと感じています。
これまでEA開発を活動の軸として取り組んできた結果、ゴゴジャンのEA部門において、月間売れ筋ランキングTOP20に私のEAが3本ランクインするなど、一定の販売収益を上げることができるようになりました。
FX業界において、MT4のEAとインジケーターの販売数量や売上規模には大きな差があります。具体的には、インジケーターやサインツールを活用する裁量トレーダーの人口は、自動売買を行うトレーダーの約10倍に上るとのデータがあります。
例えば、ゴゴジャンのインジケーターや電子書籍のランキング上位に位置するクリエイターの売上収益は、EAクリエイターの約10倍にも達するとの報告があります。
このような市場動向を踏まえ、EA開発者としての活動に加え、インジケーターやサインツールの開発・提供に注力したいと考えています。
しかし、現時点では私のインジケーターの販売実績は厳しい状況にあります。

たとえば、「パーフェクトオーダーポンド円」のインジケーター版も販売本数0本という厳しい結果に終わっています。
私に不足しているのは販売プロモーション力であると感じており、私のスキルを提供する代わりに、プロモーターやインフルエンサーの方々と協業できればと考えています。
そのような思いから、今回この募集を行うことにいたしました。
「結局はお金のためか」とのお叱りを受けるかもしれませんが、私もボランティアでEAやインジケーターを配布しているわけではありません。
私自身の知名度向上と、EAの普及を目的として活動しております。
また、私事ではありますが、2025年を目標に法人化を目指し、現在準備を進めている段階です。
本業は住宅関連の仕事ですが、会社を立ち上げた後も引き続きFXで収益を上げていきたいと考えています。
多くの方との協業は考えておらず、1名か2名の方とのタイアップを検討しております。
詳しくは、YouTubeの概要欄にあります お問い合わせフォーム、またはXよりお気軽にご連絡ください。
【免責事項】
・本GPTsについて、正当性を保証するものではありません。
・本GPTsを利用して損失を被った場合でも一切の責任を負いません。
・投資の決定は、自己判断 自己責任でお願いします。