ChatGPTは、OpenAIによって訓練された大規模な言語モデルです。
どんな質問にもそれなりに回答してくれるとのことで、以下、ChatGPTとの対話形式も取り入れて話を進めます。
ひとまず適当にEAを作成してもらう
ある程度細かく条件を与えてあげた方がより優れたEAが作成出来そうな気がしますが、ひとまずふんわりとしたお願いをしてみます。
// Moving Average EA
#property copyright "Copyright 2023, OpenAI"
#property link "https://www.OpenAI.com"
extern int MA_Period = 14;
extern int Slippage = 3;
int init()
{
return(0);
}
int deinit()
{
return(0);
}
int start()
{
double MA = iMA(NULL,0,MA_Period,0,MODE_SMA,PRICE_CLOSE,0);
if (Bid > MA)
OrderSend(Symbol(),OP_BUY,0.1,Bid,Slippage,0,0,"My EA",16384,0,clrGreen);
else if (Bid < MA)
OrderSend(Symbol(),OP_SELL,0.1,Bid,Slippage,0,0,"My EA",16384,0,clrRed);
return(0);
}
どうやら長いコードを生成することは出来ないようです。しかし、サンプルコードは作成してもらえました。
ついでにどんなロジックなのか説明してもらいます。
A:
このEAは、移動平均線(Moving Average)を使ってトレードロジックを実装しています。
・MA_Period変数が移動平均線の期間を設定します。
・Slippage変数がスリッページを設定します。
・start()関数は実際にトレードロジックを実行します。
・Bid価格が移動平均線より高い場合、買い注文を発行します。
・Bid価格が移動平均線より低い場合、売り注文を発行します。
このEAは単純なトレードロジックであり、実際のトレードではより複雑なロジックが必要になる場合があります。
噂通りの実力です。MQL4のコードも書いてもらうことが出来るし、それの概要を説明してもらうことも出来ました。
ちなみにそのままコンパイルしてみても、エラーは出ませんでした。そのまま動くようです。非常に単純なロジックですが、EA作成の補完には役立ちそうです。
RSIを使ったEAを作成してもらう
続けて、今度はテクニカル指標をRSIに指定してお願いしてみます。
// RSI EA
#property copyright "Copyright 2023, OpenAI"
#property link "https://www.OpenAI.com"
extern int RSI_Period = 14;
extern int Slippage = 3;
extern int Overbought = 70;
extern int Oversold = 30;
int init()
{
return(0);
}
int deinit()
{
return(0);
}
int start()
{
double RSI = iRSI(NULL,0,RSI_Period,PRICE_CLOSE,0);
if (RSI > Overbought)
OrderSend(Symbol(),OP_SELL,0.1,Bid,Slippage,0,0,"My EA",16384,0,clrRed);
else if (RSI < Oversold)
OrderSend(Symbol(),OP_BUY,0.1,Bid,Slippage,0,0,"My EA",16384,0,clrGreen);
return(0);
}
ロジックも聞いておきます。
A:
このEAは、RSI(Relative Strength Index)を使ってトレードロジックを実装しています。
・RSI_Period変数がRSIの計算期間を設定します。
・Slippage変数がスリッページを設定します。
・Overbought変数が買いポジションをクローズするRSIのレベルを設定します。
・Oversold変数が売りポジションをクローズするRSIのレベルを設定します。
・start()関数は実際にトレードロジックを実行します。
・RSIがOverboughtレベルを超えた場合、売り注文を発行します。
・RSIがOversoldレベルを下回った場合、買い注文を発行します。
このEAは単純なトレードロジックであり、実際のトレードではより複雑なロジックが必要になる場合があります。
EAのロジックを体系的に解説してくれるので、この機能だけでも便利ですね。
こちらもコピー&ペーストだけで、問題なくコンパイル出来ました。
MQL5でも書けないかお願いしてみる。
さて、続けて、MT5用のEAもMQL5で書けないかお願いしてみます。
// RSI EA for MT5
#property copyright "Copyright 2023, OpenAI"
#property link "https://www.OpenAI.com"
input int RSI_Period = 14;
input int Slippage = 3;
input int Overbought = 70;
input int Oversold = 30;
int OnInit()
{
return(INIT_SUCCEEDED);
}
void OnDeinit(const int reason)
{
}
void OnTick()
{
double RSI = iRSI(NULL,0,RSI_Period,MODE_CLOSE,0);
if (RSI > Overbought)
OrderSend(Symbol(),OP_SELL,0.1,Ask,Slippage,0,0,"My EA",16384,0,clrRed);
else if (RSI < Oversold)
OrderSend(Symbol(),OP_BUY,0.1,Ask,Slippage,0,0,"My EA",16384,0,clrGreen);
}
素晴らしい、即答でした。なお、MT4とほとんど変わらなそうでしたので、試しにMT4でコンパイルしてみたら、エラーなしでした。
一方、肝心のMT5でコンパイルしてみたところ、「7 errors, 0 warnings」とエラーが出てしまいました。
コンパイルエラーの原因を聞いてみる
A:このエラーは、iRSI関数に適切な引数が渡されていないことを示しています。
MT5でiRSI関数を使用するには、以下のように引数を渡す必要があります。
iRSI(string symbol, int timeframe, int period, int applied_price, int shift)
// RSI EA for MT5
#property copyright "Copyright 2023, OpenAI"
#property link "https://www.OpenAI.com"
input int RSI_Period = 14;
input int Slippage = 3;
input int Overbought = 70;
input int Oversold = 30;
int OnInit()
{
return(INIT_SUCCEEDED);
}
void OnDeinit(const int reason)
{
}
void OnTick()
{
double RSI = iRSI(Symbol(),0,RSI_Period,MODE_CLOSE,0);
if (RSI > Overbought)
OrderSend(Symbol(),OP_SELL,0.1,Ask,Slippage,0,0,"My EA",16384,0,clrRed);
else if (RSI < Oversold)
OrderSend(Symbol(),OP_BUY,0.1,Ask,Slippage,0,0,"My EA",16384,0,clrGreen);
}
iRSI関数の最初の引数が、NULLからSymbol()に修正されてきました。
しかし、コンパイルしてみても全く同じエラーが出ます。さらに続けます。
修正後のエラー原因を聞いてみる
A:このエラーは、iRSI関数に適切な引数が渡されていないことを示しています。
以下が修正後のサンプルコードです。
// RSI EA for MT5
#property copyright "Copyright 2023, OpenAI"
#property link "https://www.OpenAI.com"
input int RSI_Period = 14;
input int Slippage = 3;
input int Overbought = 70;
input int Oversold = 30;
int OnInit()
{
return(INIT_SUCCEEDED);
}
void OnDeinit(const int reason)
{
}
void OnTick()
{
double RSI = iRSI(Symbol(), PERIOD_CURRENT, RSI_Period, PRICE_CLOSE, MODE_MAIN, 0);
if (RSI > Overbought)
OrderSend(Symbol(),OP_SELL,0.1,Ask,Slippage,0,0,"My EA",16384,0,clrRed);
else if (RSI < Oversold)
OrderSend(Symbol(),OP_BUY,0.1,Ask,Slippage,0,0,"My EA",16384,0,clrGreen);
}
今度はさらに引数が変わってきました。再びコンパイルしてみます。すると、今度は異なるエラーが。
さらにエラー原因を聞いてみる
A:このエラーは、MODE_MAINが定義されていないことを示しています。
このエラーは、MT5のバージョンによって発生するかどうか異なりますが、一般的には以下のように修正することができます。
double RSI = iRSI(Symbol(), PERIOD_CURRENT, RSI_Period, PRICE_CLOSE, MODE_RSI, 0);
指示通り修正みても、コンパイルエラー。
ひとまずこれに関しては、以下が正解っぽいですが、なかなか辿り着けず。
ひとまず、諦める
double RSI = iRSI(Symbol(), PERIOD_CURRENT, RSI_Period, PRICE_CLOSE);
ここ以外にもOrderSend関数でエラーが出ているようで、どうやらほとんどMQL4のコードになってしまっているようです。
MQL5で書けます、といいつつ、中の人はMQL4とMQL5がはっきり区別出来ていないのかもしれません。また、MQL5にもバージョンや進化があったりするので、そこが上手く吸収出来ていない可能性もありそうです。
まとめ
少し触ってみた感じ、chatGPTさんは、MQL4の方が得意で、MQL5の方は苦手なような印象でした。まさに、ずっとMQL4ばかり扱っていてMQL5への変化に対応出来ないEA開発者のように。
ただし、質問の仕方によってはMQL5も上手く取り扱える可能性はあるのかなと思っています。
最後に、こんな質問をしてみました。
MT4であれば、より具体的な条件を与えてみたら、素晴らしいEAを開発してくれるかも知れません。
また、EA開発の際の辞書代わりとか、変数名を適当に決める際に利用するとか、サポート的に使うのも効果的かもしれません。
より進化したChatGPT(GPT-4)
この記事で紹介したChatGPT(GPT-3.5)よりも進化したChatGPT(GPT-4)に関する記事もございます。
ChatGPT(GPT-3.5)で他にも試してみた



BingAIでMT5用EAを作成してみた
BingAIというチャット型AIもご紹介しています。
キャッシュバック口座の開設
作成したEAを利用して実際に運用する際は、通常の口座開設ではなく、キャッシュバック口座を開設するのがおすすめです。以下の記事で、キャッシュバックサイト経由で海外FX口座を開設する際のメリットとデメリットをまとめていますのでご覧ください。
利用者の特性に応じて、リアル口座をどのように開設するのが最適かを考える参考になると思います。