MQL4プログラミングにおけるiStdDev関数(サンプルソースあり)

MQL4のiStdDev関数は、標準偏差インジケーター(ボリンジャーバンドのバンド幅)を計算するために使用される重要な関数です。以下にiStdDevの主な特徴と使用方法をまとめます。

目次

istDDev関数の構文

double iStdDev(
  string symbol,        // 通貨ペア
  int timeframe,        // 時間枠
  int ma_period,        // 移動平均の期間
  int ma_shift,         // 移動平均のシフト
  int ma_method,        // 平均化メソッド
  int applied_price,    // 適用価格
  int shift             // シフト
);

以下は、パラメータの説明を表にまとめたものです。

パラメータ説明
symbol通貨ペア(NULL for current symbol)
timeframe時間枠(0 for current timeframe)
ma_period移動平均の期間
ma_shift移動平均のシフト
ma_method平均化メソッド(例:MODE_SMA, MODE_EMA)
applied_price適用価格(例:PRICE_CLOSE, PRICE_OPEN)
shift計算するバーのインデックス(0が最新)

使用例

double stdDev = iStdDev(NULL, 0, 20, 0, MODE_SMA, PRICE_CLOSE, 0);

この例では、現在の通貨ペアと時間枠で、20期間のSMAを使用して、終値に基づいた最新の標準偏差を計算しています。

応用

ボリンジャーバンドの計算に使用できます
上限 = 移動平均 + (標準偏差 * 2)
下限 = 移動平均 – (標準偏差 * 2)

注意点:

  • 標準偏差は、価格の変動性を測る指標として使用されます。
  • 高い標準偏差は高い変動性を、低い標準偏差は低い変動性を示します。

iStdDevは、価格の変動性を分析し、トレード戦略を構築する上で非常に有用なツールです。適切に使用することで、市場の状態をより深く理解し、より効果的な取引決定を行うことができます。

EAのサンプルソース

#property strict

input int StdDevPeriod = 20;     // 標準偏差の期間
input double StdDevMultiplier = 2.0; // 標準偏差の倍数
input double Lots = 0.1;         // 取引ロット数

int OnInit()
{
    return(INIT_SUCCEEDED);
}

void OnTick()
{
    if(!IsNewCandle()) return; // 新しいローソク足が形成されたときのみ処理を行う

    double stdDev = iStdDev(NULL, 0, StdDevPeriod, 0, MODE_SMA, PRICE_CLOSE, 0);
    double ma = iMA(NULL, 0, StdDevPeriod, 0, MODE_SMA, PRICE_CLOSE, 0);
    
    double upperBand = ma + (stdDev * StdDevMultiplier);
    double lowerBand = ma - (stdDev * StdDevMultiplier);
    
    if(Close[1] > upperBand && OrdersTotal() == 0)
    {
        // 価格が上限を超えた場合、売りポジションを開く
        OrderSend(Symbol(), OP_SELL, Lots, Bid, 3, 0, 0, "Sell Order", 0, 0, Red);
    }
    else if(Close[1] < lowerBand && OrdersTotal() == 0)
    {
        // 価格が下限を下回った場合、買いポジションを開く
        OrderSend(Symbol(), OP_BUY, Lots, Ask, 3, 0, 0, "Buy Order", 0, 0, Blue);
    }
    
    // ポジションのクローズロジック(例:反対側のバンドに到達したらクローズ)
    if(OrdersTotal() > 0)
    {
        for(int i = OrdersTotal() - 1; i >= 0; i--)
        {
            if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
            {
                if(OrderType() == OP_BUY && Close[1] > ma)
                {
                    OrderClose(OrderTicket(), OrderLots(), Bid, 3, White);
                }
                else if(OrderType() == OP_SELL && Close[1] < ma)
                {
                    OrderClose(OrderTicket(), OrderLots(), Ask, 3, White);
                }
            }
        }
    }
}

bool IsNewCandle()
{
    static datetime lastTime = 0;
    datetime currentTime = iTime(NULL, 0, 0);
    if(currentTime != lastTime)
    {
        lastTime = currentTime;
        return true;
    }
    return false;
}

このEAの主な特徴

  1. iStdDev関数を使用して標準偏差を計算します。
  2. 移動平均線を中心として、標準偏差の倍数を使用して上下のバンドを作成します。
  3. 価格がバンドを超えた場合にトレードを開始します。
  4. 価格が中心線(移動平均線)に戻ったときにポジションをクローズします。
  5. 新しいローソク足が形成されたときのみ処理を行います。

このEAは基本的な例であり、実際の取引に使用する前には、十分なテストとリスク管理の実装が必要です。また、取引スタイルや市場条件に合わせて、パラメータやロジックを調整することをお勧めします。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

池田 直哉 池田 直哉 メタプロアカデミー創業者・講師

オリジナルのEAを作ることができるようになるWebスクール【メタプロアカデミー】を運営しています。プログラミング未経験の方が最短1ヵ月で勝てるオリジナルEAが作れるようになります。

目次