バイナリーオプションにおいてMQLをやろうと思うきっかけの大半は「ロジックのサイン化」そのサイン化したロジックの「バックテスト」という人が多いのではないかと思います。
しかし、MQLおよび「プログラミング」というものに対し「難しそう」といった印象を持つ方も多いと思います。
ブログ管理人自体プログラム経験は未経験かつ独学で始めていますので、未経験かつ独学でもある程度作りたいものは作ることが可能という認識を持ってもらえば大丈夫です。
また個人的に一番大事だなと思ったことは
「出来そうなことからやっていく」
です。基礎知識などやってるうちに意外とついて来るものですし、出来そうなことからどんどんやって
つまづいた時に調べればいいぐらいの気持ちの方が独学・未経験者には良いと思います。
サインツール制作に必要なこと
実際にサインツールを制作する上で必要なことは
- サインを出すためのコード
- サインを出す条件
の2点です。それだけ?と思うかもですが細かなことを抜きにして
純粋にサインツールを作るだけの話であればこの2点で充分です。
言い換えれば、【サインを出すためのコード原型】と【条件の組み方】さえ分かれば良いということです。
サインツールのサンプルコード
上項では【サインを出すためのコード原型】と【条件の組み方】さえ分かれば良いということを言いましたが
【サインを出すためのコード原型】なんて持ってないし、そもそもそれ作れたら苦労しないという話だと思いますので
下記にRSIの70以上、30以上のサンプルコードを記載しておきます。
※エディター右上にC++とありますがエディター内にmql4の項目がない為ベース言語を選択しています。
#property copyright "TAKULOG"
#property version "1.00"
#property strict
#property indicator_chart_window //メインウィンドウに表示する
#property indicator_buffers 2 //インジケータのバッファを2つ用意
#property indicator_color1 Red //1つ目のインジケータを赤色に設定
#property indicator_color2 Blue //2つ目のインジケータを青色に設定
#property indicator_width1 1 //1つ目のインジケータの太さを3に設定
#property indicator_width2 1 //2つ目のインジケータの太さを3に設定
//バッファー用意※バッファーは≪値を格納する箱≫ 的な認識でOK
double ArrowUp[]; //上矢印用バッファー
double ArrowDown[]; //下矢印用バッファー
//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
int OnInit(){ //初期化関数---主に初期条件やチャート更新時に決めておく内容を書く項目
//下矢印
SetIndexBuffer(0,ArrowDown); //バッファを用意
SetIndexStyle(0,DRAW_ARROW); //矢印を出す
SetIndexArrow(0,238); //矢印の種類設定 調べると各矢印形等の番号が出る
SetIndexEmptyValue(0,0.0);
SetIndexLabel(0,"arrow_Down");//ラベル(名前)を決める
//上矢印
SetIndexBuffer(1,ArrowUp); //バッファを用意
SetIndexStyle(1,DRAW_ARROW); //矢印を出す
SetIndexArrow(1,236); //矢印の種類設定 調べると各矢印形等の番号が出る
SetIndexEmptyValue(1,0.0);
SetIndexLabel(1,"arrow_Up"); //ラベル(名前)を決める
//---
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[])
{
int limit = rates_total - prev_calculated;
int n = 2; //array out of range対処
if (limit > 1) {limit = rates_total - n - 1;}
// <<アロー用forループ開始>>////////////////////////////////
for(int i=limit; i>=0; i--){ //for開始
if(i+1 >= Bars-1){continue;}
// >>> アローを出す条件記開始
//【RSI値取得】 ///////////////////////////////////////////
double RsiCL =iRSI(NULL,0,14,PRICE_CLOSE,i); //現行足RSI
// <<アロー条件定義>> /////////////////////////////////////
if(RsiCL>=70){ //条件①
ArrowUp[i] =0; //0に返す
ArrowDown[i]=High[i]; //下矢印を高値に表示
}
else if(RsiCL<=30){ //条件②
ArrowUp[i]=Low[i]; //上矢印を安値に表示
ArrowDown[i]=0; //0に返す
}
else{
ArrowDown[i]=0; //0に返す
ArrowUp[i] =0; //0に返す
}
}
// >>> アローを出す条件終了
// <<アロー用forループ終了>> /////////////////////////
//--- return value of prev_calculated for next call
return(rates_total);
}
実際にコンパイルしたもの
サンプルコードのアローコード原型とアローを出す条件は?
上記のサンプルコードにおいてどこからどこまでがサインの原型でどこがアロー出す条件であるか?というのが分からない方は
//アローを出す条件記開始
////// 【RSI値取得】 ///////////////////////////////////////////
double RsiCL =iRSI(NULL,0,14,PRICE_CLOSE,i); //現行足RSI
// <<アロー条件定義>> ////////////////////////////////////////////
if(RsiCL>=70){ //条件①
ArrowUp[i] =0; //0に返す
ArrowDown[i]=High[i]; //下矢印を高値に表示
}
else if(RsiCL<=30){ //条件②
ArrowUp[i]=Low[i]; //上矢印を安値に表示
ArrowDown[i]=0; //0に返す
}
else{
ArrowDown[i]=0; //0に返す
ArrowUp[i] =0; //0に返す
}
}
// アローを出す条件終了
コード内のこの部分以外は全てアローコードの原型とも言えます。
反対に言えばここの項目だけ変更すれば、サンプルコードの条件である【RSI:70以上30以下】以外のサインの制作が可能になります。
他の記事で実際にこのサンプルコードを用いて別のインジケーターのサインを作ってみようと思いますので
興味がある方はそちらの記事もどうぞ!
MQL検索可能ワード
自分で少しでも勉強したい方、このコードはどんな意味なの?というのをもう少し知りたいという方向けですが、本コードを検索可能ワードをまとめようと思います。
OnInit
SetIndexBuffer
SetIndexStyle
SetIndexArrow
SetIndexEmptyValue
SetIndexLabel
OnCalculate
rates_total
prev_calculated
iRSI