English Русский 中文 Español Deutsch Português
preview
初心者からエキスパートへ:MQL5取引のエッセンシャルジャーニー

初心者からエキスパートへ:MQL5取引のエッセンシャルジャーニー

MetaTrader 5テスター | 26 9月 2024, 10:33
185 0
Clemence Benjamin
Clemence Benjamin

主要セクション

  1. はじめにMQL5への旅路を簡単に振り返る
  2. MQL5トレーダーの秘訣を探る
  3. アルゴリズム開発における人工知能の実装
  4. 結論

 

はじめに:MQL5への旅を振り返って

2019年にMQL5コミュニティに参加した当初、私はコンピュータサイエンスの強固なバックグラウンドを持っていたものの、スマホでの手動取引のスキルしかなく、アルゴリズム取引に関してはほとんど知識のない初心者でした。もっと早くアルゴリズム取引の概念に気づいていればよかったと感じています。当時はそれを軽視し、手動取引を続けていましたが、3年後、電子技術者として働きながらも、取引を続けたいという思いから、アルゴリズム取引に興味を持つようになりました。そして、取引を自動化するか、少なくとも信頼できるシグナルを提供できるシステムを開発したいという目標が生まれました。

再びMQL5コミュニティに戻った時、私はまるで可能性の宝庫を見つけたかのような感覚を覚えました。出会った記事は次々と読み進めたくなる内容で、それぞれが新たなスキルを与えてくれました。多くの記事が、基本から複雑なステップへと段階的に進むアルゴリズムプロジェクトを通して読者を導いてくれます。ここ2年間、さまざまなカスタムプロジェクトを通じてMQL5のスキルを高めてきました。技術とリソースの急速な進歩により、学習のスピードは一段と加速しました。重要な情報を見逃さないためにも、この機会にこの記事をしっかりと読み込むことをお勧めします。

 

この記事の対象読者

  1. 始めたばかりの全くの初心者
  2. 新たな可能性を引き出したい中上級開発者

この記事の目的は、読者のニーズに合わせたワーキングプログラムの作成を通じて指導し、アルゴリズム開発に挑戦する意欲をかき立てることです。新興技術を活用することで、複雑に見えるアルゴリズム開発をシンプルにし、MQL5コミュニティをよりユーザーフレンドリーなものにすることを目指しています。

アルゴリズム取引を取り巻く環境は、数年前と比べて格段にフレンドリーになりました。これは、アクセス可能な教育リソースが増えたおかげです。以下は、私が焦点を絞るきっかけとなったいくつかの質問です。

  • 初心者がMQL5の基本を効率よく学び、マスターするにはどうすればよいのか
  • MQL5の学習者が特定のコーディングの課題を迅速に克服するために、どのようなリソースを活用できるのか
  • トレーダーはMQL5を用いて、どのように新しい戦略を考案し、最適化し、自動化できるのか

全くの初心者として、あるいは上級開発者としてスキルを向上させるためのMQL5の旅をスタートさせる際に、3つの重要な分野についてお話しします。ひとつアドバイスしたいことがあります。「文章に恋をしましょう。読書には隠れた宝石が眠っています。」読むことが嫌いなために多くのチャンスを逃している人がいることも事実です。インターネット、特にMQL5コミュニティは、キャリア、著者、開発、フリーランスのための無数の機会を提供しています。私は少なくとも1日に3回はmql5.comを訪れ、MetaQuotes IDという携帯端末IDと統合し、重要な通知を携帯で受け取っています。ウィリアム・シェイクスピアが言ったように、「光り輝くものはすべて金ではない」のです。画像ほど魅力的ではないかもしれませんが、アルゴリズムでさえも価値あるテキストで構成されています。

  •  秘密1:MQL5コミュニティ
  •  秘密2:デスクトップのMetaTrader 5プラットフォーム
  •  秘密3:人工知能

これら3つの要素を併用することで、より優れたMQL5アルゴリズム開発者になることができます。この記事のゴールは、スタートへのモチベーションを高めることですが、同時に、これら3つの秘訣を実践するための基本的なプログラムを確実に構築することでもあります。

 

MQL5トレーダーの秘訣を探る

秘密1:MQL5コミュニティ

MQL5は、アルゴリズム取引に関するあらゆる情報を網羅した総合情報サイトです。この本には、トレーダーを始め、トレーダーとして成長し続けるために必要なものがすべて含まれています。ここでは、開発者にとって不可欠なMQL5コミュニティの主な構成要素を紹介します。

  mql5.com

    • ドキュメント:関数、クラス、開発ガイドラインなど、MQL5プログラミングに関する詳細情報を提供する総合リソース
    • AlgoBook:独自のアルゴリズム開発に役立つアルゴリズム関連書籍のコレクション
    • NeuroBook:MQL5を使ったアルゴリズム取引におけるニューラルネットワークと機械学習技術に焦点を当てた専門書
    • コードベース:MQL5コミュニティが提供する無料のMQL5スクリプト、指標、EAのリポジトリで、トレーダーがダウンロード、使用、変更できます。
    • フォーラム:取引戦略、プログラミングの問題、MQL5開発に関する経験やソリューションの共有について議論するためのインタラクティブなプラットフォーム
    • 記事:チュートリアル、取引戦略、プログラミングのヒント、MQL5を使ったアルゴリズム取引の様々な側面についての洞察を提供する記事のライブラリ
    • マーケット:トレーダーがEA、指標、スクリプトを含むMQL5取引アプリケーションを売買できるオンラインストア
    • シグナル:経験豊富なトレーダーが提供する売買シグナルを購読し、トレーダーの取引を自動でコピーできるサービス
    • VPS:MetaTraderが提供する仮想専用サーバーサービスによって、トレーダーは24時間365日、中断することなく取引ロボットやシグナルを実行することができる
    • フリーランス:トレーダーがフリーランスの開発者を雇い、MQL5でカスタム取引アプリケーション、指標、スクリプトを作成できるプラットフォーム
    • 相場:金融商品のリアルタイム相場を提供し、トレーダーに十分な情報に基づいた取引の意思決定に必要な最新の市場価格を提供
    • カレンダー:金融市場や取引戦略に影響を与える重要な経済イベントやニュースを掲載した経済カレンダー
    • WebTerminal:メタトレーダー取引プラットフォームのオンライン版で、トレーダーはソフトウェアをインストールすることなく、Webブラウザから直接口座にアクセスし、取引をおこなうことができます。
    • 検索ボックス:MQL5コミュニティとそのドキュメント、記事、フォーラムディスカッションの広範なライブラリの中から、特定の情報、リソース、コンテンツを素早く見つけることができるツールです。

 

秘密2:デスクトップMetaTrader 5プラットフォーム

このプラットフォームもまた、アルゴリズミック取引をマスターするために不可欠な豊富なリソースです。MQL5コミュニティにある多くのリソースを備えており、アルゴリズムを書くための出発点として役立ちます。戦略を練るときは、まずチャートを見て、過去のマーケットデータから繰り返されるパターンを特定します。MetaTrader 5には、MetaQuotes言語エディタやストラテジーテスターなどの機能が搭載されており、開発や学習に最適なツールセットとなっています。

簡単に例を挙げます。

チャートを開き、何が起きているのかを分析します。指標を適用する前のGBP/USDの画像です。その後、チャート上にEMA50とEMA21を追加し、価格変動との相互作用を確認します。クロスオーバーの可能性を観察し、矩形のツールで印をつけます。この画像から、自動化の戦略を立て始めることができます。

GBPUSD 


MA21の設定



MA50の設定


GBPUSD MAクロスオーバー戦略


MetaQuotes言語エディタ(MetaEditor):

テンプレート:MetaEditorには、スクリプト、EAs (EA)、指標用のテンプレートがあらかじめ用意されており、プロジェクトのための確かな出発点を提供し、ユーザーがMQL5プログラムの構造と主要コンポーネントを理解するのに役立ちます。

実行することによって学ぶ:教育理論家のジョン・デューイは、20世紀初頭に「やって学ぶ」ことの重要性を強調しました。これらのテンプレートを使って簡単なプロジェクトを作成することから始めましょう。さまざまな要素がどのように影響し合うか、感覚をつかむために修正したり実験したりします。この実践的なアプローチは、基礎知識を強固にし、学習への積極的な関与が理解と定着を高めるというデューイの哲学に沿ったものです。

 

秘密3:人工知能

日々多くのAIモデルが生み出されていますが、ChatGPTについて簡単に説明しましょう。これは会話型AIモデルで、回答やインスピレーション、生産性向上の手助けを提供することでユーザーを支援するよう設計されています。無料で使用でき、執筆、学習、ブレインストーミングなどに役立ちます。ChatGPTは2015年に設立されたOpenAI社によって作られました。

ChatGPTのようなAIモデルは、プログラミング言語やドキュメントを含む膨大なデータで学習されます。この訓練プロセスでは、パターンを分析し、構文を理解し、さまざまな言語にわたる数多くのコード例からベストプラクティスを学びます。その結果、ChatGPTは専門家レベルの指導を提供することができ、複雑なプログラミングの概念を理解し、コーディングの問題を効率的に解決することができます。

 

アルゴリズム開発における人工知能の実装

ここでは、ツールのコラボレーションがどのように学習を簡素化し、これらのリソースを知らないことによる制限を打ち破ることができるかをご案内します。ChatGPTを始めるにあたり、アクティビティを2つに分けて説明します。

  1. ChatGPTでMetaEditorテンプレートを理解する
  2. AIの支援によるスクリプト「My First MQL5 Program」の開発

 

ChatGPTでMetaEditorテンプレートを理解する

MetaTrader 5のデスクトップで、[ツール]から[MetaQuotes言語エディタ]を選択するか、キーボードのF4を押します。MetaEditorの新しいウィンドウが開きます。[ファイル]から[新規作成]を選択します。以下は、その過程を示すアニメーション画像です。

MetaEditor: MyFirstIndicator

ファイル名を「MyFirstIndicator」としましたが、これは任意です。そうすると、以下のスニペットのようなコードテンプレートが表示されます。

//+------------------------------------------------------------------+
//|                                             MyFirstIndicator.mq5 |
//|                                  Copyright 2024, MetaQuotes Ltd. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2024, MetaQuotes Ltd."
#property link      "https://www.mql5.com"
#property version   "1.00"
#property indicator_chart_window
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- indicator buffers mapping
   
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
  {
//---
   
//--- return value of prev_calculated for next call
   return(rates_total);
  }
//+------------------------------------------------------------------+

初心者であれば、「いったいこれは何なのか?」と自問するかもしれません。では、秘密の鍵の開け方の一環として、すべてを簡単に理解する方法をお見せしましょう。

  1. で、チャットを開始します。
  2. MetaEditorからプログラムコードをコピーします。
  3. ChatGPTにプロンプト「このMQL5コードを部分ごとに説明してください」と入力して、コピーしたコードを貼り付け、[送信]をクリックします。

ChatGPTから詳しい説明が返信されます。続きを読む

それに対してChatGPTは、プログラムをスニペットに分割し、より魅力的な方法で説明し、テンプレートを理解しやすくしました。ChatGPTによるプログラムの説明をイタリック体で説明します。

//+------------------------------------------------------------------+
//|                                             MyFirstIndicator.mq5 |
//|                                  Copyright 2024, MetaQuotes Ltd. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+

  • このセクションは、ファイル名、著作権情報、MetaQuotes Webサイトへのリンクを含むヘッダーコメントです。これはMQL5のコードではよくあることで、コンテキストと属性です。

#property copyright "Copyright 2024, MetaQuotes Ltd."
#property link      "https://www.mql5.com"
#property version   "1.00"
#property indicator_chart_window

これらの#propertyディレクティブは、指標に関するメタデータを提供します。

  • #property copyright:著作権者と年度を示します。
  • #property link:Webサイト(通常、より詳細な情報が掲載されている)へのリンクを提供します。
  • #property version:指標のバージョンを指定します。
  • #property indicator_chart_window:指標が(別ウィンドウではなく)メインチャートウィンドウに描画されることを示します。
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- indicator buffers mapping
   
//---
   return(INIT_SUCCEEDED);
  }

このセクションでは、指標が初期化されるときに呼び出されるOnInit関数を定義します:

  • OnInit():この関数は、バッファの割り当てや変数の初期化など、指標のセットアップを担当します。
  • return'(INIT_SUCCEEDED);':初期化が成功したことを示します。INIT_SUCCEEDEDはMQL5で定義済みの定数です。
  • 現在のところ、コメント(//---)の間の本文が空なので、この関数は何も実行しません。

//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
  {
//---
   
//--- return value of prev_calculated for next call
   return(rates_total);
  }
//+------------------------------------------------------------------+

このセクションでは、各ティックで指標の値を計算するために呼び出される OnCalculate 関数を定義します:

  • OnCalculate:ここで指標の主要なロジックが実装されます。価格データを処理し、指標値を計算します。
  • Rates_total:チャート内のバーの総数
  • Prev_calculated:前の呼び出し中に計算されたバーの数
  • Time[], open[], high[], low[], close[], tick_volume[], volume[], spread[]:各バーの時間、始値、高値、安値、終値、ティックボリューム、リアルボリューム、スプレッドを含む配列

この関数は現在、本体が空であるため、いかなる計算もおこなわません。単にrates_totalを返し、処理されたバーの総数を示します。これは、後続の呼び出しで処理されたバーを追跡するために重要です。まとめると、これはMQL5のカスタム指標のスケルトンコードです。基本的な構造とメタデータを設定しますが、具体的なアクションや計算はまだおこないません。


AIの支援によるスクリプト「My First MQL5 Program」の開発

まず、開発しようとしているプログラムの目的を知る必要があります。この場合、D1のローソク足がブルかベアかを教えてくれるスクリプトプログラムを提案します。次にChatGPTにアクセスし、プロンプトを送信します。今回は、AIメモリに保存するスクリプトプログラムのテンプレートを提供し、それを条件に合わせて修正してもらうことにします。

スクリプトの作成


スクリプトの名前を設定する

まず、開発しようとしているプログラムの目的を知る必要があります。この場合、D1のローソク足がブルかベアかを教えてくれるスクリプトプログラムを提案します。[完了]を押すと、このプログラムテンプレートが表示されるので、それをにコピーし、このコンテキストに従って計画を達成します。

//+------------------------------------------------------------------+
//|                                          MyFirstMQL5 Program.mq5 |
//|                                  Copyright 2024, MetaQuotes Ltd. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2024, MetaQuotes Ltd."
#property link      "https://www.mql5.com"
#property version   "1.00"
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
//---
   
  }
//+------------------------------------------------------------------+
以下はChatGPTで表示されたコードです:
Create an MQL5 script from this template that tells day candle status on screen: //+------------------------------------------------------------------+
//|                                          MyFirstMQL5 Program.mq5 |
//|                                  Copyright 2024, MetaQuotes Ltd. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2024, MetaQuotes Ltd."
#property link      "https://www.mql5.com"
#property version   "1.00"
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
//---
   
  }
//+------------------------------------------------------------------+

 ChatGPTの回答:

//+------------------------------------------------------------------+
//|                                          MyFirstMQL5 Program.mq5 |
//|                                  Copyright 2024, MetaQuotes Ltd. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2024, MetaQuotes Ltd."
#property link      "https://www.mql5.com"
#property version   "1.00"
#property strict

// Input parameters for customizing the text display
input color TextColor = clrRed;               // Color of the text
input int FontSize = 20;                      // Font size
input ENUM_ANCHOR_POINT AnchorCorner = ANCHOR_LEFT_UPPER; // Text anchor point
input int X_Offset = 10;                      // X offset
input int Y_Offset = 10;                      // Y offset

//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
   // Get the opening price of the current day
   double openPrice = iOpen(_Symbol, PERIOD_D1, 0);
   
   // Get the closing price of the current day
   double closePrice = iClose(_Symbol, PERIOD_D1, 0);
   
   // Determine the candle status
   string candleStatus = (closePrice >= openPrice) ? "Bullish" : "Bearish";
   
   // Display the candle status on the screen
   DisplayCandleStatus(candleStatus);
  }

//+------------------------------------------------------------------+
//| Function to display the candle status on the screen              |
//+------------------------------------------------------------------+
void DisplayCandleStatus(string status)
  {
   string objName = "CandleStatusText";
   
   if(ObjectFind(0, objName) < 0)
     {
      // Create the text object if it doesn't exist
      ObjectCreate(0, objName, OBJ_LABEL, 0, 0, 0);
      ObjectSetInteger(0, objName, OBJPROP_CORNER, AnchorCorner);
      ObjectSetInteger(0, objName, OBJPROP_XDISTANCE, X_Offset);
      ObjectSetInteger(0, objName, OBJPROP_YDISTANCE, Y_Offset);
      ObjectSetInteger(0, objName, OBJPROP_FONTSIZE, FontSize);
      ObjectSetInteger(0, objName, OBJPROP_COLOR, TextColor);
     }
   
   // Update the text
   ObjectSetString(0, objName, OBJPROP_TEXT, "Day Candle: " + status);
  }
//+------------------------------------------------------------------+


テスト

以下は、私がテスト中にたどった手順です。

  • コードをコピーします。ChatGPTから修正されたスクリプトを受け取ったら、コードをコピーします。
  • MetaEditorを開く:コンピュータ上でMetaEditorを起動します。
  • 新しいスクリプトを作成する:
    • [ファイル]>[新しいファイル]>[スクリプト]
    • スクリプトの名前を入力し、[次へ]と[完了]をクリックします。
  • コードを貼り付ける:新しいスクリプトファイルの自動生成コードをChatGPTから受け取った修正コードに置き換えます。
  • スクリプトをコンパイルします。
    • MetaEditorツールバーの[コンパイル]ボタンをクリックします。
    • エラーがなければ、スクリプトは正常にコンパイルされます。
  • 出力を確認します。
    • ナビゲータータブで、スクリプトセクションの下にあるコンパイルしたスクリプトファイルを探します。
    • MetaTrader 5のチャートにスクリプトをドラッグアンドドロップして結果をご覧ください。

  • 結果を見直す:チャートを監視して、スクリプトがD1ローソク足がブルかベアかを正しく 識別しているかどうかを確認します。

MetaEditorでコンパイルする


プログラムはそれ以上編集することなく、正常にコンパイルされました。D1ローソク足はスクリプトによって強気であることが確認されました。

スクリプトがscriptsフォルダに追加されました。 ブーム500インデックスD1



結論

MQL5を習得することは、学習や実験、さらにはAIのような高度なツールを駆使して進む旅です。基本をしっかりと習得し、コミュニティのリソースを活用することで、AIのサポートを得ながら複雑な課題を乗り越え、戦略を最適化し、自動化を取り入れることで、トレーダーとしての可能性を最大限に引き出せます。継続的な学習と柔軟な適応が、ダイナミックなアルゴリズム取引の世界で成功を収める鍵となります。MQL5がもたらす多くのチャンスを活かし、取引における成功の飛躍を目指しましょう。

AIを活用すれば可能性は無限大です。限界は、あなたの発想と、それをAIに伝える技術にかかっています。ただし、AIが生成したプログラムが常に完璧に機能するわけではなく、時にはデバッグに時間を費やしたり、コミュニティのドキュメントやMQL5 Booksを深く調べる必要があるかもしれません。共有したい知識はたくさんありますが、それはまた次回にしましょう。少なくとも今は、同じ志を持つ仲間がいることを忘れないでください。これからも開発を楽しんでください。
ファイル名 詳細
MyFirstIndicator.mq5 MQL5指標テンプレート
MyFirstMQL5 Program.mq5 スクリプトアルゴリズム
MyFirstMQL5 Program.ex5 スクリププログラムをコンパイルし、使用可能な状態にする


MetaQuotes Ltdにより英語から翻訳されました。
元の記事: https://www.mql5.com/en/articles/15320

添付されたファイル |
知っておくべきMQL5ウィザードのテクニック(第28回):学習率に関する入門書によるGANの再検討 知っておくべきMQL5ウィザードのテクニック(第28回):学習率に関する入門書によるGANの再検討
学習率(Learning Rate)とは、多くの機械学習アルゴリズムの学習プロセスにおいて、学習目標に向かうステップの大きさのことです。以前の記事で検証したニューラルネットワークの一種である生成的敵対的ネットワーク(GAN: Generative Adversarial Network)のパフォーマンスに、その多くのスケジュールと形式が与える影響を検証します。
古典的な戦略をPythonで再構築する(第2回):ボリンジャーバンドのブレイクアウト 古典的な戦略をPythonで再構築する(第2回):ボリンジャーバンドのブレイクアウト
本稿では、線形判別分析(LDA: Linear Discriminant Analysis)とボリンジャーバンドを統合し、戦略的市場参入シグナルの生成を目的としたカテゴリ別ゾーン予測を活用する取引戦略を考察します。
MQL5で動的な多銘柄多期間の相対力指標(RSI)指標ダッシュボードを作成する MQL5で動的な多銘柄多期間の相対力指標(RSI)指標ダッシュボードを作成する
この記事では、MQL5を使用して、動的に複数の銘柄と時間枠にわたるRSI指標のダッシュボードを開発し、トレーダーにリアルタイムでRSI値を提供する方法を解説します。このダッシュボードには、インタラクティブなボタン、リアルタイム更新、色分けされた指標が搭載されており、トレーダーがより的確な意思決定をおこなうためのサポートをします。
MQL5取引ツールキット(第2回):ポジション管理EX5ライブラリの拡張と実装 MQL5取引ツールキット(第2回):ポジション管理EX5ライブラリの拡張と実装
MQL5コードやプロジェクトでEX5ライブラリをインポートして使用する方法をご紹介します。今回は、既存のライブラリにポジション管理関数を追加し、2つのエキスパートアドバイザー(EA)を作成することで、EX5ライブラリを拡張します。最初の例では、可変指数ダイナミック平均(VIDyA: Variable Index Dynamic Average)テクニカル指標を使用して、トレーリングストップ取引戦略EAを開発し、2番目の例では、取引パネルを使用して、ポジションの監視、オープン、クローズ、および修正をおこないます。この2つの例では、アップグレードされたEX5ポジション管理ライブラリの使用方法と実装方法を紹介します。