2021年最先端BOツール「Benefit」について

【コード付】最速でMQL4言語をプログラミング未経験者がマスターする方法

この記事は約14分で読めます

MQL4プログラミングを勉強してインジケーターやEAを自作したい!一方で、勉強法や何をすればいいかわからないとお悩みのトレーダーは多いと思います。通常、プログラミングを学ぼうと思ったときにはたくさんの初心者向けコンテンツが提供されていますが、MQL4の場合には言語がマイナーで、プログラミング未経験者が1発目に行う言語ではないとされているため、ほとんど存在しません。

サイキックス
サイキックス

当記事では、プログラミング未経験者が独学でMQL4を学ぶために必要な知識、おすすめの本やサイトを紹介していきます。

MQL4言語とは?

サイキックス
サイキックス

MQL4は、MT4専用のプログラミング言語でインジケーターやEAはすべてMQL4で作られています。

MQL4とは…メタクォーツ社が提供する外国為替証拠金取引用チャートソフト「MetaTrader4」内の機能を拡張するためのプログラミング言語のこと。(Meta Quotes Language 4の略)

MQL4の開発で使用する用語

言語MQL4(エムキューエル)プログラミング言語の名前
エディタMetaEditorコードを編集する画面のこと
コンパイラMetaLang人間語から機械語に翻訳してくれるソフトのこと
ソースファイル拡張子mq4ソースコード見れるファイル
実行ファイル拡張子ex4ソースコード見れないファイル
ヘッダファイル拡張子mghソースコードの部品
定型チャート拡張子tplインジケーター設定やチャートの設定を保存をするファイル

拡張子とは…ファイルの種類を認識するためのもの(例えば画像ファイルだったらOOO.jpg、テキストファイルだったらOOO.txt)

MQL4でできること

サイキックス
サイキックス

MQL4では、大きく分けてカスタム指標、EA、スクリプトの3つのプログラムを作ることができます。それぞれどんなことができるのか詳しく解説してきます。

カスタム指標(インジケーター)

MQL4では、既存のインジケーターを拡張、別形式で表示させたものから全く新しいテクニカル指標まで自由に作成することができます。

作れるもの具体例
既存のインジケーターを拡張させたものボリンジャーバンドにアラートをつける
既存のインジケーターを別形式で出力したものRSI70・30で矢印を出現させる(シグナルツール)
全く新しいテクニカル指標移動平均線の角度を測るインジケーター

エキスパートアドバイザー(EA、Expert Advisor)

FXやCFDで使える自動売買プログラムが作れます。一度作って設定さえすれば、エントリーから利確まで全て自動まで行ってくれる一方で、作り込みが甘いと相場の異常事態がおきたときに暴走してしまい、思いがけない損失を被ってしまうこともあるので取り扱いには注意が必要です。

作れるもの具体例
自動売買プログラム(FX, CFD)MACDのゴールデンクロスが起きたらロングエントリー、デッドクロスが起きたら利確する自動売買
取引拡張ツールすべてのポジションを一気に決済できる全ポジ解消ボタン
特殊な拡張プログラムバイナリーの自動売買ソフト用の矢印のシグナル読み取るEA

スクリプトプログラム

スクリプトは、1回だけ利用できるプログラムのことです。

作れるもの具体例
一括処理プログラム水平線、トレンドライン、フィボナッチなどすべてのオブジェクトをまとめて削除

MQL4言語を学ぶ前に

プログラミング未経験者がMQL4を学ぶのは、時間も労力もかかります。なので、MQL4の学習へ進む前に本当に今の自分がやりたいことをおこなうためには、MQL4言語の学習が必要なのかを考えましょう。MQL4というのは目的ではなく、手段でしかないのです。例えば、自分でインジケーターを作りたいが目的であれば、MQL4を学ぶ必要がありますし、逆にEAのバックテストを取りたいだけであれば、MQL4の知識がなくても行うことができます。

サイキックス
サイキックス

MQL4を学ぶこと≠MT4の操作を学ぶこと

これを混合してしまって何でもかんでもMQL4を学ぼうとしている人が多いですが、実はプログラミングの知識がなくても解決することができる場合もあります。

勝てるボリンジャーバンド手法を常勝トレーダーが教えます【バンドウォークとは】

MQL4学習のポイント

プログラミング未経験者はMQL4を学ぶ前にC言語を学ぶ必要はある?

MQL4を言語を学ぶ前にC言語がわかる必要がありますか?という質問はよくいただきますが、結論からいうと全く必要ありません。理由としてはある程度の基礎となるルールは同じであっても全く別の言語になるからです。MQL4を使って自動売買を作りたいだけなのに、C言語を学んでも学ぶ意義も感じられないし、なにを作ればいいのかも錯綜してしまうので、多くの場合、挫折します。必要なのはC言語を学ぶことではなく、C言語にあってMQL4にも共通するプログラミング言語の基礎となるルールを覚えることです。

サイキックス
サイキックス

この方がわかりやすく説明してくれているので、動画をみて出てくる用語が「概念としてわかる」レベルになったら、MQL4の学習に入っちゃってOKです。

MQL4をやる前にC言語を学べと言われる理由
MQL4をやる多くの技術者(プログラマー)は、トレーダーではなく主にプログラミングでの生計を立てています。C言語と違い、MQL4はマイナーなのでそれだけで生計を立てれる技術者はほぼいないというのと、MQL4を最初の言語として学ぶ人はほぼいないことから、最初にわかりやすいコンテンツで、汎用性の高いC言語を先に覚えてからMQL4を学んだほうが良いと言われています。

例えば、英語の学習で、将来ニュージーランドに移住するためにニュージーランド英語を勉強しようとしたときに、大半の英会話教師は「とりあえずアメリカ英語を覚えてからニュージーランド英語を覚えなさい」というでしょう。NZ英語の教材は少ないですし、教えられる人もほとんどいないから、英会話教師の言い分も一理あるとは思いますが、私は、ただ目的がニュージーランドに移住したいだけなら、いちいちアメリカ英語を覚える必要ないのではと思うわけです。

MQL4を学んで聖杯を見つける方法

FX、バイナリーオプションで聖杯を見つける方法を作るまでの流れとしては「勝てそうなロジックを作る→検証する→パラメーターを調整して再び検証する」をひたすら繰り返すことで、片っ端から勝てそうなロジックをしらみつぶしに探していく形となります。

検証の一例
RSI期間14の逆張り70・30でバックテストを取ったら勝率52.1%だった→期間13に変えたらもっと勝率があがるんじゃないか?と思い検証→勝率が下がったので今度は期間15にして検証。これを期間1〜200の200通り分繰り返す

これをやり続けているとあっという間に時間が経過していきます。例のようにロジックのパラメーターを1つ変えるだけならよいですが、2つ以上のパラメーターを変更する必要がある場合などは、検証回数が1万回を余裕で超えてきます。

サイキックス
サイキックス

相場で「勝てるロジック」を見つけるのは宝探しのようなものです。宝探しで宝を早く見つけるには、最初からどの辺にあるかを見当をつけてありそうな場所から探せば良い。そのためには自分で相場を見る目、つまりトレーダーとしての裁量の力が重要になってきます。

MT4の学習は、アウトプット中心。

MQL4のみならずプログラミングの学習全般に言えることですが、プログラミングは何かをみて覚えるものではありません。1冊本を読みきったら、プログラミングスクールに通って卒業したら、突然プログラミングができるようになるというものではないということです。あくまで「作りたいもの」「やりたいこと」が先にあって、それを実現するためにはなにが必要なのかを調べ、手探りで作ることを繰り返すことでスキルが身についてきます・

MQL4コードを使った初心者のためのワーク

サイキックス
サイキックス

RSIをサブウィンドウに表示させてアラートを鳴らすインジケーターのソースコードをご用意しました。このソースコードをみながら、下記のサイトを使って4つの疑問に自分で答えられるようになってください。

#property indicator_separate_window
#property indicator_minimum 0
#property indicator_maximum 100
#property indicator_buffers 3
#property indicator_color1 DodgerBlue
#property indicator_color2 LightGray
#property indicator_color3 LightGray
#property indicator_width1 1
#property indicator_width2 1
#property indicator_width3 1
#property indicator_style1 STYLE_SOLID
#property indicator_style2 STYLE_DOT
#property indicator_style3 STYLE_DOT

extern int 期間=14;
extern bool アラート設定=true;
extern int 通知ライン上=70;
extern int 通知ライン下=30;
extern int 適用価格=0;

//---- buffers

double RSIBuffer[];

double RSIOBBuffer[];

double RSIOSBuffer[];

//+------------------------------------------------------------------+

//| Custom indicator initialization function                         |

//+------------------------------------------------------------------+

int init()

  {

   string short_name;

//---- indicator lines

   SetIndexStyle(0,DRAW_LINE);

   SetIndexBuffer(0,RSIBuffer);

   SetIndexStyle(1,DRAW_LINE);

   SetIndexBuffer(1,RSIOBBuffer);

   SetIndexStyle(2,DRAW_LINE);

   SetIndexBuffer(2,RSIOSBuffer);

//---- name for DataWindow and indicator subwindow label

   short_name="Saikix-RSI("+期間+")";

   IndicatorShortName(short_name);

   SetIndexLabel(0,short_name);

   SetIndexLabel(1,"OverBought");

   SetIndexLabel(2,"OverSold");

//----

   SetIndexDrawBegin(0,期間);

//----

   return(0);

  }

//+------------------------------------------------------------------+

//| Relative Strength Index                                          |

//+------------------------------------------------------------------+

int start()

  {

   int    i,counted_bars=IndicatorCounted();

//----

   if(Bars<=期間) return(0);

//----

   i=Bars-期間-1;

   if(counted_bars>=期間) i=Bars-counted_bars-1;

   while(i>=0)

   {

      RSIBuffer[i]=iRSI(NULL,0,期間,適用価格,i);

      RSIOBBuffer[i]=通知ライン上;

      RSIOSBuffer[i]=通知ライン下;

      i--;

   }

   

   if(アラート設定)

   {

      if(RSIBuffer[1]<通知ライン上 && RSIBuffer[0]>=通知ライン上)

         Alert("RSI = "+ RSIBuffer[i]+ ", RSI30.");

      else if(RSIBuffer[1]>通知ライン下 && RSIBuffer[0]<=通知ライン下)

         Alert("RSI = "+ RSIBuffer[i]+ ", RSI70.");

   }

//----

   return(0);

  }

//+------------------------------------------------------------------+

4つの疑問に答えられるようになろう

  1. propertyってなに?
  2. RSIの期間を変えるためにはどうすれば良いのか?
  3. RSIってどうやってチャートに表示するんだ?
  4. アラートってどんな条件で表示される設定になってる?

MQL4を学ぶ上でのおすすめ学習コンテンツ

プログラミング初心者の方がこれからMQL4言語を学ぶときにおすすめの学習コンテンツを目的別に紹介していきます。MQL4は、書籍を購入する場合を除いて、ほとんど独学かつ無料で学ぶことが可能です。

MQL4をゼロから丁寧に学なびたい
なるべく正確な情報をわかりやすく知りたい
FXメタトレーダープログラミング入門(本)
MQL4をお金をかけずに学びたい
プログラミングはやったことがある
MT4でEA自作しちゃお〜
MQL4を開発していて検索してもわからないことがでてきたteratail

MT4を学習する上で役立つおすすめの書籍

FXメタトレーダープログラミング入門は、現役の神奈川大学大学院の工科研究科の教授である豊嶋久道氏の本で、MQL4を学ぶための基礎的な部分の解説がなされています。MT4にはバージョンが存在し、大きくわけて旧MT4と新MT4があって、昔の旧MT4の時代にかかれたコードが新MT4では使えないということが多々あるのですが、こちらは新MT4に対応しています。(MT4関連の書籍は総じて古いものが多いのでお気をつけください)

サイキックス
サイキックス

もし買うなら絶対にkindle版を購入してください。PCのkindleを開くと記載されているコードを簡単にコピペすることができます。

MQL4学習リファレンス MT4でEA自作しちゃお〜

こちらのサイトはMQL4の日本語版リファレンスで、言い換えるとMQL4の辞書のようなものです。特筆すべきは、情報の網羅性で、MQL4言語は元々英語での開発が前提とされている言語のため、日本語の情報が少ないのですが、「MT4でEA自作しちゃお〜」様では、MQL4に関するほぼ全ての基本的な情報がこのサイトに記載されています。プログラミング経験者の方はもちろん、未経験者向けコンテンツも充実しているため、こちらのサイトを使うだけで1人でインジケーターを作れるレベルになります。

プログラミング版知恵袋 teratail

https://teratail.com/ より引用

Teratail(テラテイル)は、プログラミング学習者向け版のYahoo知恵袋のようなサービスで、もしMQL4について、わからないことがあれば、ここで質問を行うことができます。ただ知恵袋同様、必ずしも正確で丁寧な回答が得られるというわけではないので注意しましょう。

MQL4のよくある質問

MQL4の学習を進めるにあたって直面するお悩みを解決していきます。

MQ4ファイルとEX4ファイルの違い

MT4のインジケーターファイルには、mq4とex4の2種類がありますが、違いはなんですか?

サイキックス
サイキックス

簡潔に言うと、ソースコードが見れるか見れないの違いです。両方ともユーザーとして利用するだけであればどっちても構いませんが、開発するときに違いが出ます。

mq4ファイルはどんなコードで書かれているのかを見ることができるため、コードをいじることで自分好みにカスタマイズすることができますが、ex4ファイルはどんなコードで書かれているか見ることができません。

MQL4をマスターするために必要な期間

サイキックス
サイキックス

3ヶ月もあれば、プログラミング未経験の方でも一通り自分で簡単なロジックであれば、作れるようになり、バックテストを取れるようになるでしょう

ただ「MQL4を使える」のと、「MQL4を使いこなして勝てるロジックを作れる」のには「天と地の差」があります。フィギュアスケートで例えるなら、スムーズに滑れるようになるのには、何回かスケート場に通えばできるようになるけど、三回転ジャンプができるためには、莫大な努力はもちろん、才能も必要とします。

MQL4を学ぶためにプログラミングスクールに行く意味はありますか?

サイキックス
サイキックス

ありません。有料のコンテンツで解説されている内容は総じて内容が薄いものが多く、本でいうと第1章に載っている内容のレベルしか扱っていないからです。ただ現役のプログラマーに質問できる権利がついていたり、コミュニティがあるというものであれば、人脈にお金を払うという意味で、まだ価値があるのかなは思います。

MQL4のまとめ

サイキックス
サイキックス

MQL4を使いこなせるようになることで、自分のトレードアイディアをすぐ具現化することができるので一気にトレードの幅が広がります。

誰しもが、MQL4を最初から学ぶ必要はなく、初期段階では自分のトレードスタイルを確立させることの方が重要です。トレードを学ぶ中で頭打ちになったり、もし裁量を学ぶことに行き詰まったら、MQL4を学んで、大量のロジックを検証することで知識の絶対量を増え、より高いレベルのトレードを行うことができるようになるでしょう。