Logicクラス

MetaTrader 4
GogoJungle
2019/08/02 21:03
182

概要
各種テクニカルインジケーターの値の演算、代表的な売買サインの判定を簡略的に開発するためのクラスです。

使い方

  1. Login.mqhをIncludesフォルダ内に保存。
  2. プログラム内からLogic.mqhをinclude
#include <Logic.mqh>
  1. Logicクラスのインスタンスを作成
    パラメータは通貨ペア(デフォルトは現在の通貨ペア)、時間足(デフォルトは現在の時間足)、計算位置(デフォルトは1)
    全て省略可能
Logic logic(Symbol(), 0, 1);
  1. 必要なタイミングでメソッドを呼び出して利用する。
double ma = logic.MA(); // 移動平均線の計算

デモ
MovingAverage(移動平均線)の計算

double ma;

// 従来の書き方
ma = iMA(Symbol(), 0, 20, 0, MODE_SMA, PRICE_CLOSE, 1);

// Logicクラスを利用した書き方
ma = logic.MA();

これまでのiMA関数を使用した計算では、必要な引数が多く省略もできないため非常に手間がかかりました。
そこで各引数を省略可能とし、さらに変更の頻度が高い順に並び替えたMAメソッドを用意しました。
デフォルト値から変更が無い場合は、MA()を実行するだけで移動平均線の計算結果を取得できます。

10本前のローソク足での移動平均線を計算

double ma_10;

// 従来の書き方
// 第7引数に1を指定する
ma_10 = iMA(Symbol(), 0, 20, 0, MODE_SMA, PRICE_CLOSE, 10);

// Logicクラスを利用した書き方
// 第1引数に1を指定する
ma_10 = logic.MA(10);

最新のローソク足から見て何本前のローソク足にて計算を行うかは、iMA関数では第7引数で指定しておりました。
MAメソッドでが第1引数に指定した数値がiMA関数の第7引数と対応しております。

移動平均線の期間を変える場合(100MA)

double ma100;

// 従来の書き方
// 第3引数に100を指定する
ma100 = iMA(Symbol(), 0, 100, 0, MODE_SMA, PRICE_CLOSE, 1);

// Logicクラスを利用した書き方
// 第2引数に1100を指定する
ma100 = logic.MA(0, 100);

MAメソッドでは第2引数に指定した数値が移動平均線の期間となります。

指数平滑移動平均線(EMA)を計算

double exponential_ma;

// 従来の書き方
// 第4引数にMODE_EMAを指定する
exponential_ma = iMA(Symbol(), 0, 20, 0, MODE_EMA, PRICE_CLOSE, 1);

// Logicクラスを利用した書き方
// 第3引数にMODE_EMAを指定する
exponential_ma = logic.MA(0, 20, MODE_EMA);
// あるいはメソッドEMAを使用する
exponential_ma = logic.EMA();

MAメソッドでは第3引数に指定した数値が移動平均線の種別となっております。
より簡単に異なる種別の移動平均線を計算するために、種別ごとにメソッドも用意してあります。
EMAの場合はEMAメソッドを実行することでより簡単に計算結果を得ることが可能です。

各種移動平均線の計算

double sma  = logic.SMA();  // Simple Moving Average
double ema  = logic.EMA();  // Exponential Moving Average
double smma = logic.SMMA(); // Smoothed Moving Average
double lwma = logic.LWMA(); // Linear Weight Moving Average

移動平均線以外にも、テクニカルインジケーターに関するほとんどのMQL4デフォルト関数に対応しております。

double atr = logic.ATR(); // = iATR関数
double bands = logic.Bands(); // = iBands関数
double envelopes = logic.Envelopes(); // = iEnvelopes関数
double momentum = logic.Momentum(); // = iMomentum関数
double rsi = logic.RSI(); // = iRSI関数

などなど・・・

2本の移動平均線の交差
①短期移動平均線が長期移動平均線を上抜けなら1、
②短期移動平均線が長期移動平均線を下抜けなら-1、
③交差なしなら0
を判定する処理の例です。

// 従来の書き方
double sma_0 = iMA(Symbol(), 0, 10, 0, MODE_SMA, PRICE_CLOSE, 0);
double sma_1 = iMA(Symbol(), 0, 10, 0, MODE_SMA, PRICE_CLOSE, 1);
double lma_0 = iMA(Symbol(), 0, 20, 0, MODE_SMA, PRICE_CLOSE, 0);
double lma_1 = iMA(Symbol(), 0, 20, 0, MODE_SMA, PRICE_CLOSE, 1);
int signal = 0;

if(sma_1 <= lma_1 && sma_0 > lma_1){
   signal = 1;
}
if(sma_1 >= lma_1 && sma_0 < lma_1){
   signal = -1;
}

// Logicクラスを利用した書き方
signal = logic.MACross(10, 20);

これまでの書き方では、移動平均線の値を合計4種類算出し、さらにその大小を判定する処理を作成する必要がありました。
Logicクラスを利用すると、MACrossメソッドに二つの移動平均線の期間を指定するだけで判定結果を得ることが可能です。

メソッド詳細
https://labo.gogojungle.co.jp/articles/60

コメント

テストマン
2019/08/05 13:13

関連項目

検索結果がありません。