この記事は約15分で読めます
MQL4プログラミングを勉強してインジケーターやEAを自作したい!一方で、勉強法や何をすればいいかわからないとお悩みのトレーダーは多いと思います。通常、プログラミングを学ぼうと思ったときにはたくさんの初心者向けコンテンツが提供されていますが、MQL4の場合には言語がマイナーで、プログラミング未経験者が1発目に行う言語ではないとされているため、ほとんど存在しません。
当記事では、プログラミング未経験者が独学でMQL4を学ぶために必要な知識、おすすめの本やサイトを紹介していきます。
悩み別トレード上達マップを
期間限定で配布中
斉木勇一(サイキックス)
論理的アプローチを得意とするトレーダー、システムエンジニア。バイナリー歴8年、為替歴13年。震災をきっかけに相場の世界へ足を踏み込む。長い下積みを経て2015年に脱サラ。やっと勝てたと思ったら、今度は業者に約1000万出金拒否される。 著書「ロジカルトレーディング」「Profit Quadrant」(全文英語)。専門誌「FX攻略.com4月号」、単行本「ボリンジャーバンドで稼ぐトレーダーのFX戦略」掲載。自作インジケーターのDL数は100万回超え。サイキックスの略歴はこちら
MQL4言語とは?
MQL4(えむきゅーえるふぉー)は、MT4専用のプログラミング言語でインジケーターやEAはすべてMQL4で作られています。
MQL4とは…メタクォーツ社が提供する外国為替証拠金取引用チャートソフト「MetaTrader4」内の機能を拡張するためのプログラミング言語のこと。(Meta Quotes Language 4の略)
MQL4の開発で使用する用語
言語 | MQL4(エムキューエル) | プログラミング言語の名前 |
エディタ | MetaEditor | コードを編集する画面のこと |
コンパイラ | MetaLang | 人間語から機械語に翻訳してくれるソフトのこと |
ソースファイル拡張子 | mq4 | ソースコード見れるファイル |
実行ファイル拡張子 | ex4 | ソースコード見れないファイル |
ヘッダファイル拡張子 | mgh | ソースコードの部品 |
定型チャート拡張子 | tpl | インジケーター設定やチャートの設定を保存をするファイル |
- 拡張子とは…ファイルの種類を認識するためのもの(例えば画像ファイルだったらOOO.jpg、テキストファイルだったらOOO.txt)
- mq4とex4ファイルの違い…ソースコード(中身)が見れ、第三者でも編集することができるのがmq4ファイル、第三者からソースコードが見れず編集できないのがex4ファイル
MQL4でできること
MQL4では、大きく分けてカスタム指標、EA、スクリプトの3つのプログラムを作ることができます。それぞれどんなことができるのか詳しく解説してきます。
自作インジケーターの開発(カスタム指標):MQL4では、自分の手法をツールとして表示させたり、移動平均線やボリバンなど既存のインジケーターを組み合わせたり変えたりして、自作のテクニカル指標を作ることができます。
インジケーターで作れるもの | 具体例 |
---|---|
既存のインジケーターを拡張させたもの | ボリンジャーバンドにアラートをつける |
既存のインジケーターを別形式で出力したもの | RSI70・30で矢印を出現させる(シグナルツール) |
全く新しいテクニカル指標 | 移動平均線の角度を測るインジケーター |
FX自動売買の作成:エキスパートアドバイザー(EA、Expert Advisor)というFXやCFDのトレードで使える自動売買プログラムが作れます。一度作って設定さえすれば、エントリーから利確まで全て自動まで行ってくれる一方で、作り込みが甘いと相場の異常事態がおきたときに暴走してしまい、思いがけない損失を被ってしまうこともあるので取り扱いには注意が必要です。
EAで作れるもの | 具体例 |
---|---|
自動売買プログラム(FX, CFD) | MACDのゴールデンクロスが起きたらロングエントリー、デッドクロスが起きたら利確する自動売買 |
取引拡張ツール | すべてのポジションを一気に決済できる全ポジ解消ボタン、ピラミッティングを自動で行ってくれる |
特殊な拡張プログラム | バイナリーの自動売買ソフト用の矢印のシグナル読み取るEA |
スクリプトプログラム:スクリプトは、1回だけ利用できるプログラムのことです。
スクリプトで作れるもの | 具体例 |
---|---|
オブジェクト一括削除 | 水平線、トレンドライン、フィボナッチなどすべてのオブジェクトをまとめて削除 |
ポジション解消 | 指値の一括削除、一定の条件を充したら一括でポジションを解消 |
チャートの切り替え | 複数チャートの通貨ペア、時間軸を一括切り替え |
要は、”MQL4を学ぶことで自分のアイディアを具現化できる”ということをわかっていただければと思います。
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はマイナーなのでそれだけで生計を立てれる技術者はほぼいないというのと、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つの疑問に答えられるようになろう
- propertyってなに?
- RSIの期間を変えるためにはどうすれば良いのか?
- RSIってどうやってチャートに表示するんだ?
- アラートってどんな条件で表示される設定になってる?
悩み別トレード上達マップを
期間限定で配布中
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
Teratail(テラテイル)は、プログラミング学習者向け版のYahoo知恵袋のようなサービスで、もしMQL4について、わからないことがあれば、ここで質問を行うことができます。ただ知恵袋同様、必ずしも正確で丁寧な回答が得られるというわけではないので注意しましょう。
MQL4のよくある質問
MQL4の学習を進めるにあたって直面するお悩みを解決していきます。
インジケーターには、mq4とex4の2種類がありますが、違いはなんですか?
簡潔に言うと、ソースコードが見れるか見れないの違いです。両方ともユーザーとして利用するだけであればどっちても構いませんが、開発するときに違いが出ます。
mq4ファイルはどんなコードで書かれているのかを見ることができるため、コードをいじることで自分好みにカスタマイズすることができますが、ex4ファイルはどんなコードで書かれているか見ることができません。無料インジケーター、ベーシックなインジケーターを除いて世の中の大半のインジケーターは中身のわからないex4形式で配布されています。
MQL4をマスターするために必要な期間は?
3ヶ月もあれば、プログラミング未経験の方でも一通り自分で簡単なロジックであれば、作れるようになり、バックテストを取れるようになるでしょう。
ただ「MQL4を使える」のと、「MQL4を使いこなして勝てるロジックを作れる」のには「天と地の差」があります。フィギュアスケートで例えるなら、スムーズに滑れるようになるのには、何回かスケート場に通えばできるようになるけど、三回転ジャンプができるためには、莫大な努力はもちろん、才能も必要とします。
MQL4を学ぶためにプログラミングスクールに行く意味はありますか?
ありません。有料のコンテンツで解説されている内容は総じて内容が薄いものが多く、本でいうと第1章に載っている内容のレベルしか扱っていないからです。ただ現役のプログラマーに質問できる権利がついていたり、コミュニティがあるというものであれば、人脈にお金を払うという意味で、まだ価値があるのかなは思います。
悩み別トレード上達マップを
期間限定で配布中
MQL4学習まとめ
MQL4を使いこなせるようになることで、自分のトレードアイディアをすぐ具現化することができるので一気にトレードの幅が広がります。
誰しもが、MQL4を最初から学ぶ必要はなく、初期段階では自分のトレードスタイルを確立させることの方が重要です。トレードを学ぶ中で頭打ちになったり、もし裁量を学ぶことに行き詰まったら、MQL4を学んで、大量のロジックを検証することで知識の絶対量を増え、より高いレベルのトレードを行うことができるようになるでしょう。
豪華特典が受け取れる公式LINEの追加はこちらから
「もし明日、記憶と経験がリセットされて、またゼロからトレードを始めることになったら?」をコンセプトに、電子書籍、カレンダー、インジケーター、トレード初心者に必要な情報をまとめたスターターパック特典をご用意しました。