前回はEAを作るときに参考になるお勧めリンクなどを紹介しました。今回はMT5で標準的に利用できるテクニカル指標を利用して取引を行うEAを作成してみましょう。
テクニカル分析指標とは、過去の銘柄の価格、取引実績、様々な情報を時系列パターンから価格予想・分析をするための手法です。
MT5で利用できるテクニカル分析指標とはどのようなものがあるのでしょうか?大きく目的にわけて、4種類の標準テクニカル分析指標をご用意しています。
トレンド系 | 相場の方向性(トレンド)を分析するための目安となる指標となります。買い方向 (上昇トレンド) 、売り方向 (下落トレンド )、レンジ相場 (ボックストレンド )等の相場の流れを予測に有効な指標です。 |
オシレーター系 | 相場の変化の大きさ(ボラティリティ) や銘柄の値頃感(買われすぎ、売られすぎ)等の情報を分析して指標から銘柄の予測に有効な指標です。 一般的にオシレーター系は逆張り投資に有効なテクニカル指標とされています。 |
ボリューム系 | 各銘柄の取引量に基づいた計算指標が含まれます。FXでは一定期間でのティック(価格の変動)、CFDの場合は取引量が分析の指標となります。 |
ビルウィリアムズ指標 | ビルウィリアムズ指標は、市場心理学、市場分析、カオス理論等の研究に基にビルウィリアムズ 博士によって開発されたテクニカル分析指標です。6つの指標はTRADING CHAOS(邦題: 相場の達人―常勝のカオス思考) の中で紹介されている指標です。 |
MT5で用意している38の指標についての詳細は、こちらのページからそれぞれのカテゴリー毎にご確認いただけます。
MT5のヘルプ – テクニカル指標https://www.metatrader5.com/ja/terminal/help/charts_analysis/indicators
EAを用いたテクニカル分析指標の値の取得方法について |
MT4では下記のような関数でそれぞれのテクニカル指標に関して、指定したチャートのバー番号からスポットでの分析指標の計算結果を取得できました。
1 2 3 |
double result; // 最後の引数“1”は、現在時間から過去にシフトする足の本数、つまりどのスポットを指定する引数 result =iStochastic(NULL,0,5,3,3,MODE_SMA,0,MODE_MAIN,1); |
MQL4 Document:
istochastic – Stochastic Oscillator指標の指定時点の値を取得
MQL5 Document:
iStochastic – Stochastic Oscillator指標のハンドル取得
ハンドルを使って、配列内のデータをピックアップする
MT5とMT4では、大きく次のような違いがあります。
MT5では1種類のテクニカル分析指標値取得に関しては下記のような方法を用いて一括でまとめて値(配列)を取得することができます。(例: Stochastic Oscillator)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
double result[]; // テクニカル分析指標用の配列 int handle; // テクニカル分析指標用のハンドル int OnInit(){ // テクニカル分析指標をキャッシュ上に展開&ハンドル取得 handle= iStochastic(NULL,0,5,3,3,MODE_SMA,STO_LOWHIGH); if(handle < 0){ Print("The creation of iStochastic has failed: Runtime error =",GetLastError()); return(-1); } return(0); } void OnTick(){ // キャッシュ上からテクニカル分析指標の計算値配列を取得 if(CopyBuffer(handle,0,0,100,result)<=0) return; // 配列の並び値を逆転 (x(0)=0,x(1)=1...x(0)=1,x(1)=0...)して現在のデータを動的配列に格納する。 ArraySetAsSeries(result,true); // 処理:例 - 出力 PrintFormat("Main 1: %d /Main 2 %d ",result[0],result[1]); } |
サンプル内使用関数の仕様は下記のMQL5上のリンクでご確認いただけます。
CopyBuffer – 指標の指定されたバッファデータを取得
ArraySetAsSeries – 配列を時系列データのような配列に並び替える
※CopyBufferで使用する引数の情報は下記のリンク内の各分析指標毎の値を確認して設定いただくことで、必要な配列が取得できます。
https://www.mql5.com/ja/docs/indicators
テクニカル分析指標を利用した取引ツールについて |
実際に2種の分析指標を使用した取引を実行するためのEAを作成してみましょう。今回はオシレータ系の Stochastic Oscillator(ストキャスティックス)指標 とLarry Williams’ Percent Range(ラリーウィリアムパーセントレンジ)指標を組み合わせた取引ツールを作成します。
取引条件:
1.Stochastic:Main LineがSignalラインと下向きに交差
2.Larry Williams’ Percent Range:-20 以上の場合に売ポジションを新規に建てる
それぞれの売買シグナルに関する判定基準はmql5.com上のこちらからご確認いただけます。
mql5.com: Stochastic
mql5.com: Larry Williams’ Percent Range
EAの処理の流れとしては、1種類のテクニカル分析指標と変わらず下記のような流れとなっています。
1.EA起動時に各指標をキャッシュに展開し、ハンドルを取得(OnInit関数)
1 2 3 4 5 6 7 8 9 10 11 12 |
int iWPRhandle; int iSCShandle; int OnInit(){ //テクニカル分析指標のハンドル取得 iWPRhandle = iWPR(strSymbol,period,calc_period); iSCShandle = iStochastic(strSymbol,period,Kperiod,Dperiod,slowing,ma_method,price_field); if(iSCShandle<0 || iWPRhandle<0){ Print("The creation of handle has failed: Runtime error =",GetLastError()); return(-1); } return(0); } |
2.現在の各指標の配列を取得(OnTick関数)
3. 取引シグナルの判別し、ポジションのオープン (OnTick関数)
※Tick 受信時に(2)(3)の繰り返し
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
void OnTick(){ //テクニカル分析指標、計算値を配列で一括取得し、時系列に並び替え if(CopyBuffer(iSCShandle,0,0,100,StochasticMainBuffer)<=0) return; if(CopyBuffer(iSCShandle,0,1,100,StochasticSignalBuffer)<=0) return; if(CopyBuffer(iWPRhandle,0,0,100,iWPRBuffer)<=0) return; ArraySetAsSeries(StochasticMainBuffer,true); ArraySetAsSeries(StochasticSignalBuffer,true); ArraySetAsSeries(iWPRBuffer,true); //取引判定処理、該当時に新規ポジションをオープン //Stchastics Main & Signal が下抜け交差及びWilliam % の値が-20買われすぎの領域にある場合に売りポジションを新規オープン if(CrossDown(StochasticMainBuffer,StochasticSignalBuffer,1)&& iWPRBuffer[1]<-20 && iWPRBuffer[2]>-20 ){ if (OpenSell()) Print("New position!"); } } //---指標1が指標2を下抜け bool CrossDown(double& ind1[],double& ind2[],int shift ){ return(ind1[shift] < ind2[shift] && ind1[shift+1] >= ind2[shift+1]); } //---オープン取引(売) bool OpenSell(){ //ポジションが存在しない場合にオープン int pos_total = PositionsTotal(); if(pos_total == 0){ CTrade mytrade; double Oprice = SymbolInfoDouble(Symbol(),SYMBOL_BID); mytrade.PositionOpen(_Symbol,ORDER_TYPE_SELL,Lots,Oprice,0,0,"Sample05_02"); return true; } return false; } |
4.EA終了時に各指標のメモリ上のキャッシュを解放(OnDeinit関数)
1 2 3 4 5 |
void OnDeinit(const int reason){ //--共有メモリ上のテクニカル指標領域解放 IndicatorRelease(iSCShandle); IndicatorRelease(iWPRhandle); } |
こちらはプログラム内の処理を抜粋したものになります。
実行可能な全体のEAについてはブログに添付しているEAをご利用下さい。
各種テクニカル分析指標のハンドル値、配列を取得するためのサンプルについてはこちらの記事を参照しています。こちらの各関数を参照することで、効率良くEAを作成することが可能です。
初心者のためのMQL5: EXPERT ADVISORでのテクニカルインディケーター使用ガイド – https://www.mql5.com/ja/articles/31
分析指標を利用した取引ツール、いかがでしたか?
設計時には分析指標の判定基準等、テクニカル分析指標の内容の理解が大切になります。mql5.com、MT5のヘルプ等を活用してより良い結果となるEAを作成していきましょう。
- 投稿タグ
- MQL5