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の主な特徴
- iStdDev関数を使用して標準偏差を計算します。
- 移動平均線を中心として、標準偏差の倍数を使用して上下のバンドを作成します。
- 価格がバンドを超えた場合にトレードを開始します。
- 価格が中心線(移動平均線)に戻ったときにポジションをクローズします。
- 新しいローソク足が形成されたときのみ処理を行います。
このEAは基本的な例であり、実際の取引に使用する前には、十分なテストとリスク管理の実装が必要です。また、取引スタイルや市場条件に合わせて、パラメータやロジックを調整することをお勧めします。