プログラミング初心者でもAIを使って簡単にエキスパートアドバイザー(EA)を作成できる方法をご紹介します。
今回は、短期移動平均線と中期移動平均線のクロスを利用して売買を行うシンプルなEAを作成します。
この方法なら、プログラミングの知識がなくても基本的な設定だけでEAを運用することができますよ。
今回はコンパイルが通り、EAとしてMT4でバックテストが動くまでを目的としています。
このEAで利益が出るとは考えていません。利益を出すためには詳細なロジックが必要ですからね。
単純な条件で自動売買することができる。そしてそれがMQL4の知識がゼロでもAI(ChatGPT)に任せれば出来てしまうということを体感してもらえれば幸いです。
EAとは何か?
EA(エキスパートアドバイザー)とは、外国為替証拠金取引(FX)などで使用される自動売買プログラムのことです。
MetaTraderという取引プラットフォーム上で動作し、事前に設定したルールに基づいて自動的に売買を行います。
EAを使えば、トレーダーが常にチャートを監視する必要がなくなり、効率的に取引を行うことができます。
これにより、感情に左右されずに一貫した取引が可能となり、時間を節約することができますね。
EAのメリットとデメリット
EAの大きなメリットは、24時間365日、人間の感情に左右されずに取引を続けられることです。
また、過去のデータを使ったバックテストができるため、戦略の有効性を確認することができます。
しかし、EAにはデメリットもあります。例えば、相場の急変に対応しきれないことや、システムの不具合が生じることがあります。
そのため、定期的なメンテナンスと監視が必要です。
それでも、多くのトレーダーにとってEAは強力なツールとなっています。
リスク管理をしっかり行い、適切に運用することが重要です。
EAの作成方法
EAを作成するためには、MetaTraderとその内蔵エディタであるMetaEditorを使用します。
まず、MetaTraderをダウンロードしてインストールします。
インストールが完了したら、MetaEditorを立ち上げ、新しいエキスパートアドバイザーのテンプレートを作成します。
基本的なプログラムの構造は、OnInit
、OnDeinit
、OnTick
という3つの関数で構成されます。
これらの関数を用いて、EAの初期化処理、終了処理、ティックごとの処理を記述します。
以下は簡単なEAの例です。
int OnInit() {
// 初期化処理
return(INIT_SUCCEEDED);
}
void OnDeinit(const int reason) {
// 終了処理
}
void OnTick() {
// 毎ティックごとの処理
}
EAのカスタマイズ
EAはプログラムなので、自分の取引スタイルに合わせてカスタマイズが可能です。
例えば、異なるインジケーターを使ったり、特定の時間帯にのみ取引を行うように設定したりできます。
また、リスク管理のためにロットサイズや損切り・利確ポイントを調整することも重要です。
カスタマイズする際には、MetaEditorを使用してコードを編集します。
編集が完了したら、MetaTrader上でEAをテストし、問題がないか確認します。
必要に応じて修正を加えながら、最適な設定を見つけましょう。
移動平均線とは?
移動平均線は、一定期間の価格の平均を算出したもので、トレンドを視覚的に捉えやすくするためのインジケーターです。
短期移動平均線(例:25期間)と中期移動平均線(例:50期間)を組み合わせることで、ゴールデンクロスやデッドクロスといった売買シグナルを見つけることができます。
移動平均線は、トレンドの方向を把握し、エントリーやエグジットのタイミングを決定するのに役立ちます。
また、異なる期間の移動平均線を組み合わせることで、相場の転換点を見極めることが可能です。
ゴールデンクロスとデッドクロス
ゴールデンクロスとは、短期移動平均線が中期移動平均線を下から上に突き抜ける現象を指します。
これは買いシグナルとされ、多くのトレーダーが注目するポイントです。
逆に、デッドクロスとは、短期移動平均線が中期移動平均線を上から下に突き抜ける現象を指します。
これは売りシグナルとされ、こちらも重要なポイントです。
これらのクロスを見逃さないようにすることが、成功するトレードの鍵となります。
EAを使用することで、これらのシグナルを自動的に検出し、適切なタイミングで売買を行うことができます。
移動平均線の計算方法
移動平均線には、単純移動平均(SMA)や指数平滑移動平均(EMA)など、いくつかの種類があります。
単純移動平均は、指定期間内の価格の平均を取る方法です。
指数平滑移動平均は、より新しいデータに重みを置く計算方法で、直近の価格変動に敏感に反応します。
どちらの方法を選ぶかは、トレードスタイルや目標によって異なります。
一般的には、短期の動きを捉えたい場合はEMA、長期的なトレンドを見たい場合はSMAが適しています。
MetaTraderでは、これらの移動平均線を簡単に計算し、チャート上に表示することができます。
移動平均線を使ったトレード戦略
移動平均線を使ったトレード戦略には、クロスオーバー戦略、移動平均線と価格の乖離を利用した戦略などがあります。
クロスオーバー戦略は、短期移動平均線が中期移動平均線をクロスするタイミングで売買を行います。
これは、トレンドの転換点を捉えるためのシンプルで効果的な方法です。
移動平均線と価格の乖離を利用した戦略は、価格が移動平均線から大きく乖離したときに逆張りを行う方法です。
この戦略は、相場の過熱感を判断するのに役立ちます。
どの戦略を採用するかは、個々のトレーダーの目標やリスク許容度によります。
AIにMQL4のプログラミングをお願いする。
それでは早速AIにMQL4のプログラミングをお願いしましょう。
今回はChatGPTに頑張ってもらいます。
AIにお願いするにはプロンプトと呼ばれる命令文が必要です。
そのプロンプトをまず作成しましょう。
EAの取引戦略
AIにプログラムを作成するプロンプトには、EAが行う取引戦略を詳しく書かなければなりません。
今回の例としてこちらを使用します。
FX取引戦略:
- 目的:中期移動平均線と短期移動平均線のクロスを売買のエントリーシグナルとして自動売買する。
- 売買条件:中期移動平均線と短期移動平均線のゴールデンクロスで買い、デッドクロスで売りとする。
- 決済条件:takeprofit:50pips、stoploss:30pipsとして利確ラインと損切りラインに到達したらOrderCloseするようにします。
- 出力形式:MQL4
これで、AIに指示を与える準備が整いましたね。
EAのコード例
では、具体的にAIにどのようなプロンプトを与えるかを見てみましょう。
以下のプロンプトを使って、AIにMQL4のコードを生成してもらいます。
生成されたプロンプト:
「
中期移動平均線と短期移動平均線のクロスを売買のエントリーシグナルとして、決済はtakeprofit:50pips、stoploss:30pipsとして利確ラインと損切りラインに到達したらOrderCloseするEAをMQL4で作成してください。
」
次に、生成されたMQL4のコード例を示します。
input int ShortMAPeriod = 25; // 短期移動平均線の期間
input int LongMAPeriod = 50; // 中期移動平均線の期間
input double LotSize = 0.1; // 取引量
input double TakeProfit = 50; // 利確ポイント
input double StopLoss = 30; // 損切りポイント
double ShortMA, LongMA, prevShortMA, prevLongMA;
int OnInit() {
// 初期化処理
return(INIT_SUCCEEDED);
}
void OnTick() {
// 移動平均線の計算
ShortMA = iMA(NULL, 0, ShortMAPeriod, 0, MODE_SMA, PRICE_CLOSE, 0);
LongMA = iMA(NULL, 0, LongMAPeriod, 0, MODE_SMA, PRICE_CLOSE, 0);
prevShortMA = iMA(NULL, 0, ShortMAPeriod, 0, MODE_SMA, PRICE_CLOSE, 1);
prevLongMA = iMA(NULL, 0, LongMAPeriod, 0, MODE_SMA, PRICE_CLOSE, 1);
// ゴールデンクロスのチェック
if (prevShortMA <= prevLongMA && ShortMA > LongMA) {
OrderSend(Symbol(), OP_BUY, LotSize, Ask, 3, Ask - StopLoss * Point, Ask + TakeProfit * Point, "BuyOrder", MAGIC_NUMBER, 0, clrGreen);
}
// デッドクロスのチェック
else if (prevShortMA >= prevLongMA && ShortMA < LongMA) {
OrderSend(Symbol(), OP_SELL, LotSize, Bid, 3, Bid + StopLoss * Point, Bid - TakeProfit * Point, "SellOrder", MAGIC_NUMBER, 0, clrRed);
}
}
このプロンプトで有料版のChatGPT4oを使用するとどうなるでしょうか?
ChatGPT4oでMQL4コードを作成
早速試しましたよ。
どのようなプログラムが出てくるでしょう?
ChatGPT4oで作成
ChatGPT4oの返答は次の通りです。
以下は、MetaTrader 4 (MT4)用のMQL4で作成されたエキスパートアドバイザー(EA)のサンプルコードです。このEAは、中期移動平均線と短期移動平均線のクロスを売買のエントリーシグナルとして利用し、決済は利確50ピップス、損切り30ピップスで行います。
//+------------------------------------------------------------------+
//| MA_Cross_EA.mq4 |
//| Copyright 2024, MetaQuotes Software Corp. |
//| http://www.metaquotes.net/ |
//+------------------------------------------------------------------+
#property strict
// パラメータ設定
input int ShortMAPeriod = 10; // 短期移動平均線の期間
input int LongMAPeriod = 30; // 中期移動平均線の期間
input double TakeProfitPips = 50.0; // 利確ピップス
input double StopLossPips = 30.0; // 損切りピップス
input double Lots = 0.1; // ロットサイズ
//+------------------------------------------------------------------+
//| Expert initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
// インジケーターのバッファを初期化
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Expert deinitialization function |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
}
//+------------------------------------------------------------------+
//| Expert tick function |
//+------------------------------------------------------------------+
void OnTick()
{
double shortMA = iMA(NULL, 0, ShortMAPeriod, 0, MODE_SMA, PRICE_CLOSE, 1);
double longMA = iMA(NULL, 0, LongMAPeriod, 0, MODE_SMA, PRICE_CLOSE, 1);
double shortMA_previous = iMA(NULL, 0, ShortMAPeriod, 0, MODE_SMA, PRICE_CLOSE, 2);
double longMA_previous = iMA(NULL, 0, LongMAPeriod, 0, MODE_SMA, PRICE_CLOSE, 2);
double point = MarketInfo(Symbol(), MODE_POINT);
double takeProfit = TakeProfitPips * point;
double stopLoss = StopLossPips * point;
if(shortMA > longMA && shortMA_previous <= longMA_previous)
{
// 買いシグナル
if(CheckForOpenOrders(OP_BUY) == false)
{
OrderSend(Symbol(), OP_BUY, Lots, Ask, 3, Ask - stopLoss, Ask + takeProfit, "Buy Order", 0, 0, Blue);
}
}
if(shortMA < longMA && shortMA_previous >= longMA_previous)
{
// 売りシグナル
if(CheckForOpenOrders(OP_SELL) == false)
{
OrderSend(Symbol(), OP_SELL, Lots, Bid, 3, Bid + stopLoss, Bid - takeProfit, "Sell Order", 0, 0, Red);
}
}
}
//+------------------------------------------------------------------+
//| 現在のポジションをチェックする関数 |
//+------------------------------------------------------------------+
bool CheckForOpenOrders(int orderType)
{
for(int i = 0; i < OrdersTotal(); i++)
{
if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
{
if(OrderSymbol() == Symbol() && OrderType() == orderType)
{
return(true);
}
}
}
return(false);
}
//+------------------------------------------------------------------+
パラメータ設定:
ShortMAPeriod: 短期移動平均線の期間。
LongMAPeriod: 中期移動平均線の期間。
TakeProfitPips: 利確ピップス。
StopLossPips: 損切りピップス。
Lots: ロットサイズ。
OnTick関数:
毎ティック呼び出され、短期および中期移動平均線を計算し、クロスをチェックします。
移動平均線のクロスに基づいて、買いまたは売りの注文を送信します。
利確と損切りを設定します。
CheckForOpenOrders関数:
指定したタイプの現在のポジションが開かれているかどうかをチェックします。
このEAをMetaEditorに貼り付けてコンパイルし、MT4のチャートに適用することで、指定された条件での自動売買を実現できます。
中期移動平均線と短期移動平均線の期間パラメーターは指定しなかったので適当にAIが決めています。
この数字が正しいわけでは無いですのでバックテストをしながら調整をする必要がありますね。
メタエディターへ入力とコンパイル
このコードをメタエディターへ入力し、コンパイルをします。
メタエディターを開いたら(MT4の[ツール]>[メタエディター])、左の一覧から[Experts]の中の[MACD Sample]をダブルクリックで開きます。
[MACD Sample]にかかれていたものは【すべて選択】>[削除]で全部消してしまって良いです。
これに先程ChatGPT4oで出力されたプログラムすべてをそのままコピペするだけです。
[ファイル]>[名前をつけて保存]で新しいファイル名をつけてから[コンパイル]を押してください。
コンパイルするとウィンドウ下側に詳細としてエラーが表示されます。
今回はエラーではなく警告だけですのでとりあえずはコンパイルが通りバックテストすることが出来ます。
エラーや警告を修正する場合はこの詳細の項目を[Shift]を推しながら選択するとコピーすることが出来ますので、先程のChatGPT4oに、
エラーを修正してください
return value of 'OrderSend' should be checked Blog test.mq4 48 10
return value of 'OrderSend' should be checked Blog test.mq4 57 10
0 errors, 2 warnings, 171 msec elapsed 1 3
と送信すると修正したコードを書いてくれます。
デバックも簡単ですよ!
ChatGPTで作成したEAをバックテスト
作成したEAをテストしてみましょう!
コンパイルが通ればすぐにMT4でバックテストすることが出来ますね。
MT4で[表示]>[ストラテジーテスター]を選択するとウインドウ下にストラテジーテスターが表示されます。
ストラテジーテスターの設定
ストラテジーテスターの設定でエキスパートアドバイザー(EA)を先程作成したEAを選択し、通貨ペアと時間足(期間)、検証する期間を設定してスタートを押すと検証が始まります。
モデルの「始値のみ」のほうが検証が早く終る(データが軽い)ですがEAのロジックによっては始値だけでは反応しなくなりますので、「全ティック」にしたほうがよいですね。
「ビジュアルモード」にチェックをいれるとチャートを表示しながら早送りでEAのエントリーと決済が見られます。しかしその分処理が遅くなりますので、チャートを見る必要がない時はチェックを外すと良いです。
チェックを外して検証しても、検証終了後に右の「チャートを開く」をクリックするとチャートが表示されますので安心してください。
バックテストの結果
今回作成したEAのバックテストの結果ですが・・・
見事なまでの右肩下がりです(笑)
最後0まで言っていますね(笑)
パラメータの調整
そこでパラメータの調整をします。
チャートを見るとどうも損切りが30ですとチャートが逆方向に動くことが多くすぐに損切りになっているようでした。
ここで思い切って損切りを1000にして、利確を2000にしてみます。
1000にすると100pipsということになるようですね。設定値の100分の1がpips数になるようです。
結果や如何に???
チャートを見ると移動平均線のゴールデンクロスで買い、デッドクロスで売りとしっかりと予定通りに動いているようです。
黄色が短期移動平均(10)で赤色が中期移動平均(30)です。
チャート中央のちょっとだけ黄色が赤色を下回ったところでしっかりと【売りエントリー】が入っており右上の方で損切り(100pips)されていますね。(笑)
そして気になる結果ですが・・・こちらです。
かなりジグザグとしています。
勝って負けての繰り返しですね。スコーし右肩上がりに見えなくも無いですが・・・最後の数字は・・・[+187.95]です!単位はドルですよ!
ええ~~!
プラスになっちゃった!
レポートを見るとプロフィットファクタが1.07とそうでもないですが、時期が良ければプラスになるのかもしれませんね。
まとめ
今回は、AIを活用して簡単なエキスパートアドバイザー(EA)を作成する方法を紹介しました。
短期移動平均線と中期移動平均線のクロスを利用した売買ロジックは、シンプルで初心者にも理解しやすい手法です。
MetaTraderを使えば、プログラミングの知識がなくてもEAを作成し、自動売買を始めることができるのが魅力ですね。
最初はAI任せのパラメータ設定ではうまく行かないことが多いです。
例えば、今回はtakeprofitとstoplossの設定値が低すぎてすぐに損切りとなってしまいました。
しかし、設定値を調整したら、まさかのバックテストで残高がプラスになるという驚きの結果に!
トレードを最適化するための調整が重要であり、それを見つけるプロセス自体もトレードスキルの向上に繋がるのです。
ぜひ、この記事を参考にEA作成に挑戦してみてくださいね。
これからも新しい知識と技術を学び、トレードを楽しんでください。
コメント