【入門】コピペするだけでMQLが理解できる。こんな教材が欲しかった!
相場を理解するにはローソク足を理解する必要がありますが、そうすると相場にずっと張り付いていないとなかなかチャンスを見つける事ができません。
そこで役に立つのがインンジケーターです。
インジケーターといえば移動平均線やボリンジャーバンドがありますが、それらのインジケーターの使い方を知っていても本質を理解している人はとても少ないです。
では本質とは何か。
インジケーターの計算式です。
計算式を理解すればワンランク上の世界が見えてきます。
それに伴い、MQLと言うプログラミングコードがかける様になると、自分で考えた計算式をインジケータ化してMT4上に表示できる様になるのです。
そこで、MQLでどの様な事ができるのか、簡単なインジケーターを作成していきたいと思います。
インジケーターの作成にはメタエディターというソフトを使います。
メタエディターはMT4をインストールしていれば同時にPCにインストールされています。
MT4がないと言う方は下記証券会社の口座、あるいはデモ口座を開設して下さい。
※MacユーザーはXMやFXDDが使えますがオアンダは使用できません。
インジケーターの作り方
今回解説用に作成するインジケータは、前日高値と安値にラインを引くインジケーターです。
ぜひ、一度MQLの大まかな流れを掴むために挑戦してみて下さい。
インジケーターのテンプレート作成
今回は、インジケーターを作成するので[カスタムインディケータ]を選択します。
※テンプレートの詳細な説明は別途作成中
完成すると下記のテンプレートが自動で生成されます。
プログラミング
まずは、完成した全体像を見て下さい。
文字ばかりでよくわからない。
一見難しそうですが、実は赤枠の部分を追記しただけです。
では解説していきます。
double Yesterdaylow; //前日安値
ここではdoubleという変数の箱を作りその中にYesterdayhighとYesterdaylowを入れています。
簡単にいうと、このプログラムにはYesterdayhighとYesterdaylowが登場します。と宣言しているのです。
; は、コード一文の終わりを意味し、文章の。みたいなものです。
書き忘れるとプログラムがエラーになりますので気をつけましょう。
// というのはこれ以降はコメント、メモです。という意味です。
そのため、プログラムには一切影響しません。
doubleについて詳細を知りたい方はこちらをご覧ください。
インジケーター機能のプログラミング作成
高値と安値の二本のラインの定義をしているので、アンダーラインを理解すればOKです。
コメントがあるとわかりにくいのでプログラム部分だけを抽出します。
Yesterdayhigh = iHigh(NULL, PERIOD_D1,1);
Yesterdaylow = iLow(NULL, PERIOD_D1,1);
if (Period() < PERIOD_W1)
{
//前日高値ラインの描写
ObjectDelete(“Yesterdayhighline”);
ObjectCreate(“Yesterdayhighline”,OBJ_HLINE, 0, Time[0], Yesterdayhigh);
ObjectSet(“Yesterdayhighline”, OBJPROP_STYLE, STYLE_SOLID);/
ObjectSet(“Yesterdayhighline”, OBJPROP_COLOR, clrRed);
//前日安値ラインの描写
ObjectDelete(“Yesterdaylowline”);
ObjectCreate(“Yesterdaylowline”,OBJ_HLINE, 0, Time[0], Yesterdaylow);
ObjectSet(“Yesterdaylowline”, OBJPROP_STYLE, STYLE_SOLID);
ObjectSet(“Yesterdaylowline”, OBJPROP_COLOR, clrBlue);
}
まずは、こちらです。
はじめにYesterdayhighが登場します。と宣言していますが、実際なんなのか定義していないのでこちらで定義づけしています。
iHighとは高値を意味しています。
内容としては、高値(通貨ペア,時間,ローソク足の本数)となっています。
安値も同様に定義していきます。
続いは、こちらです
週足時にインジケーターを入れても表示されませんが、それ以下の時間足にすると表示されます。
また、その後週足にしても残っています。
Periodについて
最後に、こちらです。
ObjectCreate(“Yesterdayhighline”,OBJ_HLINE,0, Time[0], Yesterdayhigh);
ObjectSet(“Yesterdayhighline”, OBJPROP_STYLE,STYLE_SOLID); /
ObjectSet(“Yesterdayhighline”, OBJPROP_COLOR, clrRed);
わかりやすいように日本語化していきます。
新しいラインを作る(オブジェクト名,オブジェクトタイプ, ウィンドウ, 時間, 価格);
ラインの種類(オブジェクト名,線の種類, 線);
ラインの種類(オブジェクト名,線の色, 赤);
書いてあることはこれだけです。
Objectについて
以上でコードの入力は完了です。
コンパイル
続いてMQLで書かれたプログラムをコンピュータがーが実行できるように変換していく必要があり、それをコンパイルと言います。
変換といってもワンクリックで完了します。
下の詳細欄にエラーが出ていなければ全ての作業が完了となります。
作成したインジケーターは自動的にNavigatorのExampleに格納されています。
まとめ
プログラミングの教科書等で挑戦しようとしても、難しいワードが多く挫折してしまう方はとても多いです。
特にプログラミングの勉強をしていると、これで結局何ができるのか?という疑問が出てくるでしょう。
何ができるかというと結論、想像したことは大概できます。
しかし、ifとは何か、ObjectCreateとは何か等の勉強していると絶対に続きません。
プログラミングの勉強の仕方は、大枠を理解して、必要なことを調べていくことが大切です。
例えば、森の中に病気で腐っている気があるから治して欲しいと言われた時、あなたはどうしますか?
森の中には様々な種類の木が生えています。
まず木の種類、病気、治療法を全て調べてから、森に入りますか?
そんな時間はありません。
まず、森に入って病気の木を見つけてから治療法を探すでしょう。
そうする事で、あなたが調べる必要がある木の種類は1本だけですみます。
プログラミングも情報がものすごく多いですが、あなたが必要な知識を抽出していく事でより効率的な学習ができます。
そのためにもまずは、大枠をしっかり勉強してください。
今回紹介したインジケーターは、コピペすれば再現できます。
ただ高値と安値を引くだけですが、本質はプログラミングを理解することです。
ぜひMQLに挑戦してみてはいかがでしょうか?
コード
//+——————————————————————+
//| HL_Line.mq4 |
//| Copyright 2018, MetaQuotes Software Corp. |
//| https://www.mql4.com |
//+——————————————————————+
#property copyright “Copyright 2018, MetaQuotes Software Corp.”
#property link “https://www.mql4.com”
#property version “1.00”
#property strict
#property indicator_chart_window
double Yesterdayhigh; //前日高値
double Yesterdaylow; //前日安値
//+——————————————————————+
//| 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[]){
Yesterdayhigh = iHigh(NULL, PERIOD_D1,1); //前日高値(通貨ペア,時間,ローソク足の本数)
Yesterdaylow = iLow(NULL, PERIOD_D1,1); //前日安値(通貨ペア,時間,ローソク足の本数)if (Period() < PERIOD_W1) //1週間以下の場合に描写
{
//前日高値ラインの描写
ObjectDelete(“Yesterdayhighline”); //前日高値ラインの初期化(古いラインを消す)
ObjectCreate(“Yesterdayhighline”,OBJ_HLINE, 0, Time[0], Yesterdayhigh); //ObjectCreate(オブジェクト名,オブジェクトタイプ, ウィンドウ, 時間, 価格);
ObjectSet(“Yesterdayhighline”, OBJPROP_STYLE, STYLE_SOLID); //ObjectSet(オブジェクト名,オブジェクトプロパティインデックス, プロパティ値);
ObjectSet(“Yesterdayhighline”, OBJPROP_COLOR, clrRed); //ObjectSet(オブジェクト名,オブジェクトプロパティインデックス, プロパティ値);//前日安値ラインの描写
ObjectDelete(“Yesterdaylowline”);
ObjectCreate(“Yesterdaylowline”,OBJ_HLINE, 0, Time[0], Yesterdaylow);
ObjectSet(“Yesterdaylowline”, OBJPROP_STYLE, STYLE_SOLID);
ObjectSet(“Yesterdaylowline”, OBJPROP_COLOR, clrBlue);
}
return(rates_total);
}
//+——————————————————————+
コメント