AIでプログラミングChatGPTFX自動売買(EA)の作り方MQL4MQL5

コードも書けると噂のChatGPTに、MT4やMT5のEA(FX自動売買ツール)を作成してもらってみた。

※アフィリエイト広告を利用しています

広告

ChatGPTは、OpenAIによって訓練された大規模な言語モデルです。

どんな質問にもそれなりに回答してくれるとのことで、以下、ChatGPTとの対話形式も取り入れて話を進めます。

Q:ChatGPTは何が出来ますか?
A:ChatGPTは、自然言語生成、文書生成、文書の要約、翻訳、Q&Aなどのタスクに利用できます。
Q:MQL4のコードも書けますか?
A:はい、MQL4のコードも書けます。
ということで、ChatGPTにEAを作成してもらうことにしましょう。
広告

ひとまず適当にEAを作成してもらう

ある程度細かく条件を与えてあげた方がより優れたEAが作成出来そうな気がしますが、ひとまずふんわりとしたお願いをしてみます。

Q:テクニカル指標を取り入れたMT4のEAのコードを書いてください。
A:残念ながら、私は長いコードを生成することはできませんが、以下が簡単なテクニカル指標を使用したMT4用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);
}

どうやら長いコードを生成することは出来ないようです。しかし、サンプルコードは作成してもらえました。

ついでにどんなロジックなのか説明してもらいます。

Q:このEAのロジックを教えてください。

A:

このEAは、移動平均線(Moving Average)を使ってトレードロジックを実装しています。

・MA_Period変数が移動平均線の期間を設定します。
・Slippage変数がスリッページを設定します。
・start()関数は実際にトレードロジックを実行します。
・Bid価格が移動平均線より高い場合、買い注文を発行します。
・Bid価格が移動平均線より低い場合、売り注文を発行します。

このEAは単純なトレードロジックであり、実際のトレードではより複雑なロジックが必要になる場合があります。

噂通りの実力です。MQL4のコードも書いてもらうことが出来るし、それの概要を説明してもらうことも出来ました。

ちなみにそのままコンパイルしてみても、エラーは出ませんでした。そのまま動くようです。非常に単純なロジックですが、EA作成の補完には役立ちそうです。

RSIを使ったEAを作成してもらう

続けて、今度はテクニカル指標をRSIに指定してお願いしてみます。

Q:RSIを使ったEAのコードを書いてください。
A:以下がRSI(Relative Strength Index)を使ったMT4用EAのサンプルコードです。
// 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);
}

ロジックも聞いておきます。

Q:このEAのロジックを教えてください。

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で書けないかお願いしてみます。

Q:同じロジックで、MT5用のEAのコードを書けますか?
A:はい、以下が同じロジックでMT5用のEAのサンプルコードです。
// 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」とエラーが出てしまいました。

コンパイルエラーの原因を聞いてみる

Q:コンパイルしてみたら、”‘iRSI’ – wrong parameters count”というエラーが出ました。原因を教えてください。

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()に修正されてきました。

しかし、コンパイルしてみても全く同じエラーが出ます。さらに続けます。

修正後のエラー原因を聞いてみる

Q:まだ同じエラーが出るのですが、わかりますか?

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);
}

今度はさらに引数が変わってきました。再びコンパイルしてみます。すると、今度は異なるエラーが。

さらにエラー原因を聞いてみる

Q:今度は、”‘MODE_MAIN’ – undeclared identifier”というエラーが出たのですが、わかりますか?

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も上手く取り扱える可能性はあるのかなと思っています。

最後に、こんな質問をしてみました。

Q:もしかして、MQL4は得意だけど、MQL5は苦手だったりしますか?
A:いいえ、OpenAIのモデルは言語やプログラミング言語に偏りがないです。MQL4とMQL5は同様に扱うことができます。 ただし、私の教育データは2021年までなので、それ以降の変更や改良があった場合は、不正確な回答をする可能性があります。
なるほど。MQL4はある程度進化が止まっていて、MQL5は進化し続けて改良が進んでいるという背景があるのかも知れません。その結果、MQL4の方が正確な回答ができる可能性があると理解しました。

MT4であれば、より具体的な条件を与えてみたら、素晴らしいEAを開発してくれるかも知れません。

また、EA開発の際の辞書代わりとか、変数名を適当に決める際に利用するとか、サポート的に使うのも効果的かもしれません。

より進化したChatGPT(GPT-4)

この記事で紹介したChatGPT(GPT-3.5)よりも進化したChatGPT(GPT-4)に関する記事もございます。

ChatGPT(GPT-3.5)で他にも試してみた

BingAIでMT5用EAを作成してみた

BingAIというチャット型AIもご紹介しています。

キャッシュバック口座の開設

作成したEAを利用して実際に運用する際は、通常の口座開設ではなく、キャッシュバック口座を開設するのがおすすめです。以下の記事で、キャッシュバックサイト経由で海外FX口座を開設する際のメリットとデメリットをまとめていますのでご覧ください。

利用者の特性に応じて、リアル口座をどのように開設するのが最適かを考える参考になると思います。

タイトルとURLをコピーしました