MT4の標準偏差を設定してFX自動売買の変動幅を調べる方法

MT4の標準偏差は、一定期間の価格が平均からどれだけ散らばっているかを見る指標です。「挿入」から「インディケータ」「トレンド」「Standard Deviation」を選ぶと、通常はチャート下の別ウィンドウへ表示できます。
値が大きいほど価格の散らばりが大きく、小さいほど小さいと読みます。ただし、標準偏差の線が上がっても、為替レートの上昇を示すわけではありません。FX自動売買では、方向を決める条件と分けて、変動の大きさを確認する補助にできます。
この記事ではPC版MT4の標準機能を対象に、設定項目、価格単位とpips換算、EA側のiStdDevと表示値を同じ条件で照合する方法を整理します。最適な期間や利益を約束する設定ではなく、指標の意味を取り違えずに検証するための手順です。
- Standard Deviationの表示と設定項目の意味
- 価格単位とpips・ポイントを分ける読み方
- 上昇・下落の方向を示さない指標の限界
- EAの取得値と画面を同じ条件で照合する方法
MT4の標準偏差を設定してFX自動売買の変動を読む

標準偏差は価格の散らばりを表す
標準偏差は、対象期間の価格が平均から離れている程度を数値にしたものです。値が高ければ価格の散らばりが大きく、低ければ平均に近い範囲へ集まっていると考えます。高値と安値を引いた値幅そのものとは異なります。
MetaQuotesのMT4標準偏差の公式説明では、単純移動平均に対する価格変動の大きさを測る指標として紹介されています。英語名はStandard Deviationで、画面や資料ではStdDevと短く表記されることもあります。
判断したいのが「最近の価格の散らばりが、同じ銘柄の以前と比べて大きいか」なら、この値が手掛かりになります。一方、今後の高値や安値、次の一本の上昇・下落が、その数字から直接決まるわけではありません。
また、対象期間や適用価格を変えると、何の散らばりを見ているかも変わります。指標名が同じだから同じ条件だと思わず、値と設定を一組で読むことが大切です。指標全体の役割を整理したい方は、FXインジケーターの基本と組み合わせ方も参考にしてください。
Standard Deviationをチャートへ追加する
PC版MT4では、上部メニューから追加する方法と、ナビゲーターから選ぶ方法があります。まず確認したい銘柄と時間足のチャートを開いてから進めると、別のチャートへ設定してしまうのを防ぎやすくなります。
- 対象のチャートを選び、銘柄名と時間足を確認する
- 「挿入」→「インディケータ」→「トレンド」→「Standard Deviation」を選ぶ
- 設定画面で期間・適用価格・種別・表示移動を確認する
- 「OK」で追加し、チャート下の指標ウィンドウと値を確認する
ナビゲーターを使う場合は、「インディケータ」内の「トレンド」からStandard Deviationを選びます。両方の操作経路はOANDAのPC版MT4操作ガイドでも確認できます。追加ツールや有料インジケーターを入れる必要はありません。
表示後に設定を見直すときは、対象チャートの「表示中のインディケータ」からStandard Deviationを選んで編集します。複数個を追加した場合は、期間などを確認して操作対象を区別してください。見た目が同じ線でも設定が違う場合があります。
標準偏差チャネルを描く操作や、新規注文画面の許容偏差を指定する操作は、この標準指標の追加とは別です。挿入先が「インディケータ」の「トレンド」になっているかを確認しましょう。

期間と適用価格と平均方式をそろえる
まず数値を照合するための例として、期間20、適用価格Close、種別Simple、表示移動0を使います。これは最も利益が出る組み合わせという意味ではなく、後半のコードと条件を合わせるための比較用設定です。すでに設定が変更されている場合は、現在値を読み取ってください。
| 設定 | 意味 | 照合時の注意 |
|---|---|---|
| 期間 | 計算に使う足の本数 | M15の20本とH1の20本は同じ時間幅ではない |
| 適用価格 | 終値・始値など、計算に使う価格 | CloseとHighでは条件が異なる |
| 種別 | 計算に使う移動平均の方式 | SimpleとExponentialを混ぜない |
| 表示移動 | 指標を表示する位置のずらし | 比較の初期確認では0にそろえる |
| スタイル・上下限 | 線の見た目や表示範囲 | 表示の高さを計算値の変化と混同しない |
平均方式にはSimple、Exponential、Smoothed、Linear Weightedがあります。MQL4ではそれぞれMODE_SMA、MODE_EMA、MODE_SMMA、MODE_LWMAに対応し、平均方式の公式一覧で確認できます。
適用価格もCloseだけではありません。MQL4の価格定数には、始値、高値、安値、複数価格の平均などが用意されています。画面でCloseを選んでいるのに、EAではPRICE_HIGHを渡していれば、同じ時刻でも値は一致しません。
期間が短い・長いという違いも、反応の速さだけで良し悪しを決めないようにします。まず設定を固定して意味を理解し、その後に目的に沿った比較を行う方が、何を変えた結果なのかを追いやすくなります。
SMAと終値を使う計算例で意味を確かめる
公式MT4ヘルプの計算式は、終値と単純移動平均を使う形です。考え方を言葉にすると、対象期間の終値の平均を求め、それぞれの終値と平均との差を二乗し、平均して平方根を取ります。最後に元の価格と同じ単位へ戻ります。
説明用に、4本の仮の終値を149.99円、149.99円、150.01円、150.01円とします。平均は150.00円で、平均との差はそれぞれマイナス0.01円またはプラス0.01円です。差を二乗した値はそれぞれ0.0001(円の二乗)で、その平均も同じです。最後に平方根を取ると0.01円になります。
この例の標準偏差は0.01円です。実際の相場データやMT4の検証結果ではなく、SMA・終値・期間4という単純な条件で意味を説明する仮の計算です。期間4をおすすめする意図もありません。
重要なのは、平均との差を二乗するため、プラス側にもマイナス側にも離れるほど散らばりが大きくなることです。単に期間の最初と最後を引いている計算ではありません。途中の価格の分布を含めて見ています。
ただし、このSMAの算術例を、そのままExponentialやSmoothedなどへ無条件に当てはめないでください。平均方式を変えた場合はその条件の指標値として扱い、画面とEAも同じ方式へ合わせます。異なる平均方式でも同じ数字になると仮定しないことが、照合の前提です。

表示値の単位は価格でpipsとは分けて換算する
標準偏差の値を、そのままpipsとして読むことはできません。価格差を二乗して最後に平方根を取るため、値は入力価格と同じ単位になります。これは前の式の単位から分かることです。USDJPYを円建ての価格で計算した例なら、結果も円の価格差として読みます。
仮にUSDJPYの標準偏差が0.050円で、1pip=0.01円として換算するなら、0.050÷0.01=5pipsです。EURUSDの仮値が0.00050で、1pip=0.0001なら同じく5pipsになります。どちらも現在の値や特定口座の推奨水準を示すものではありません。
| 説明用の銘柄 | 仮の標準偏差 | この例での1pip | 換算結果 |
|---|---|---|---|
| USDJPY | 0.050円 | 0.01円 | 5pips |
| EURUSD | 0.00050 | 0.0001 | 5pips |
ポイントもpipsとは区別します。MQL4のPointの定義は、現在銘柄の価格単位でのポイント幅です。仮にUSDJPYの1ポイントが0.001円なら、0.050円は50ポイントになります。同じ差を5pipsとも50ポイントとも表せるため、数字だけを比べると10倍の誤りにつながります。
銘柄や価格の桁数が変わっても、一律に「標準偏差を10倍すればよい」といった換算をしないでください。EAの入力値が価格、ポイント、pipsのどれを受け取るのかを確認します。CFDなどを含め、FXの例のpip定義をすべての銘柄へ広げることも避けます。

標準偏差の上昇はレート上昇のサインではない
標準偏差の線が上がるのは、対象期間の価格の散らばりが大きくなる方向を表します。為替レートが上昇しているという意味ではありません。急落して価格が平均から大きく離れる場合にも、指標は大きくなり得ます。
前の仮の4価格を逆順にし、150.01円、150.01円、149.99円、149.99円と並べても、単純平均と散らばりは同じです。上向きの並びと下向きの並びで同じ標準偏差になることが、方向を示さない理由を理解する助けになります。これは同じ4価格を使ったSMAの説明です。
値が低いから次は必ず急騰する、高いからもうすぐ必ず反落する、という使い方もしません。小さい散らばりが続くことも、大きい状態が続くことも想定に入れます。現在までの価格を要約した値と、将来の売買方向の予測は別です。
FX自動売買へ使う場合も、標準偏差で変動の条件を確認し、売りか買いかを決めるルールは別に定めます。値が高いだけで買い、低いだけで売り、といった対応をこの指標の性質から導くことはできません。
標準偏差チャネルやボリンジャーバンドと役割を分ける
Standard Deviationは、チャート下などに値の推移を表示する標準指標です。一方、標準偏差チャネルはチャート上へ描くオブジェクトで、標準偏差を幅に使う別のツールです。MetaQuotesの描画オブジェクト一覧でも、チャネルのために二点を指定すると説明されています。
ボリンジャーバンドも標準偏差を使いますが、中心線の上下にバンドを描く仕組みです。標準偏差の線を単独で見ることと、バンドの上下を売買に使うことは同じ作業ではありません。バンドの設定自体は、ボリンジャーバンドの設定と調整手順で確認できます。
さらに、注文画面にある許容偏差やスリッページ幅は、約定価格の許容範囲に関する設定です。名前に「偏差」が含まれていても、標準偏差インジケーターの期間や値を設定する欄とは分けて考えてください。
この記事では、ボリンジャーバンドの売買手法やチャネルの引き方へ広げず、標準指標の数字を正しく読むことに絞ります。似た語を整理しておくと、検索で見つけた手順が何の設定なのかを判断しやすくなります。
MT4の標準偏差をFX自動売買の条件と照合する

iStdDevの7引数を画面の設定に対応させる
MQL4のEAやスクリプトから標準偏差の数値を読む関数がiStdDevです。MQL4ではdouble型の指標値を返します。別の言語で同名関数が出てきても、MT5向けのハンドルを使うコードと混ぜないでください。
double iStdDev(string symbol, int timeframe, int ma_period,
int ma_shift, int ma_method, int applied_price,
int shift);
| 引数 | 対応する条件 | 比較用の例 |
|---|---|---|
| symbol | 計算対象の銘柄 | 現在チャートの銘柄 |
| timeframe | 計算する時間足 | 現在チャートの時間足 |
| ma_period | 平均・標準偏差の計算期間 | 20 |
| ma_shift | 平均のシフト設定 | 0 |
| ma_method | 平均方式 | MODE_SMA |
| applied_price | 適用価格 | PRICE_CLOSE |
| shift | 何本前の指標値を読むか | 1=直前の確定足 |
引数の意味はiStdDevの公式リファレンスで確認できます。symbolにNULLを渡すと現在銘柄、timeframeに0を渡すと現在チャートの時間足です。明示的な銘柄名や時間足を渡す場合は、画面側も同じ対象にそろえます。
「期間20が合っている」だけでは条件の照合は終わりません。M15の画面とH1を指定したコード、終値の画面と高値のコードでは、違うデータから計算します。まず七つの項目を一つずつ対応させてから、表示の丸めによる差を検討しましょう。
ma_shiftと最後のshiftを混同しない
iStdDevにはshiftに関係する引数が二つあります。ma_shiftは平均のシフト設定、最後のshiftは指標バッファーのどの足を読むかです。確定足を読みたいからma_shiftへ1を入れる、という対応ではありません。
まず比較用にma_shiftは0へ固定し、最後のshiftを1にすると、直前の確定足の値を読む条件になります。shiftが0なら現在形成中の足を読み、その足の価格変化に応じて値が変わり得ます。確定前の数字と、あとで完成した数字が違っても、それだけで不具合とはいえません。
画面側でも表示移動を0へそろえ、データウィンドウで対象の足を選びます。現在の線の先端と、コードで読んだ一つ前の足を比べないよう、足の日時まで照合してください。表示移動を変えた場合は描画位置との対応が変わるため、初回の確認に持ち込まない方が分かりやすいです。
表示を右へ動かしたり、あとから完成した足を眺めたりしても、過去の時点で未来の価格を使えたことにはなりません。バックテストでは、その時点で利用できる足の情報だけを条件に使う設計にします。完成後の見た目だけで判断すると、実運用より有利な条件を混ぜるおそれがあります。

注文を出さないスクリプトで確定足の値を読む
次は、現在チャートの銘柄と時間足について、Simple・Close・表示移動0の標準偏差を一度だけ読み、結果をPrintで表示する例です。注文の発注・変更・決済はしません。参照する足の時刻も一緒に出すので、画面側の値と照合する手掛かりになります。
実際のMT4やMetaEditorでコンパイル・実行した結果ではなく、MQL4の公式仕様に沿った読み取り例です。利用する場合は、まずデモ環境でコンパイル結果と表示内容を確かめてください。期間2以上の制限は、この比較サンプルで意味のある散らばりを確認するために設けています。
#property strict
#property script_show_inputs
input int StdPeriod = 20;
void OnStart()
{
if(StdPeriod < 2)
{
Print("Use a period of 2 or more for this example.");
return;
}
string symbolToRead = Symbol();
int timeframeToRead = Period();
int barShift = 1;
if(iBars(symbolToRead, timeframeToRead) < StdPeriod + barShift)
{
Print("Not enough bars for this comparison.");
return;
}
datetime currentBarTime = iTime(symbolToRead, timeframeToRead, 0);
datetime barTime = iTime(symbolToRead, timeframeToRead, barShift);
if(currentBarTime == 0 || barTime == 0)
{
Print("The target bar time is not available.");
return;
}
ResetLastError();
double value = iStdDev(symbolToRead, timeframeToRead,
StdPeriod, 0, MODE_SMA, PRICE_CLOSE, barShift);
int errorCode = GetLastError();
if(errorCode != 0 || !MathIsValidNumber(value) || value < 0)
{
Print("Indicator read could not be confirmed. error=", errorCode);
return;
}
if(iTime(symbolToRead, timeframeToRead, 0) != currentBarTime ||
iTime(symbolToRead, timeframeToRead, barShift) != barTime)
{
Print("The bar changed during reading. Run the comparison again.");
return;
}
Print("symbol=", symbolToRead, ", timeframe=", timeframeToRead,
", period=", StdPeriod, ", ma_shift=0, method=SMA, price=CLOSE",
", shift=", barShift,
", bar_time=", TimeToString(barTime, TIME_DATE|TIME_MINUTES),
", StdDev=", DoubleToString(value, 8));
}
バー数の事前確認にはiBars、対象足の時刻にはiTimeを使います。履歴が未読込の場合などは、先に対象チャートのデータを確認します。必要本数の確認だけで、あらゆる履歴状態の検証が完了したことにはなりません。
足が切り替わる途中に読んだ場合は、日時と値の対応を取り違えないよう、サンプルでは表示を中断します。落ち着いた時点で再確認してください。この出力は価格単位のままです。pipsへの自動換算や売買可否の判定は加えていません。また、価格がすべて同じなら標準偏差が0になることもあるため、0という数字だけを「安全な相場」や「データ不足」の証拠にせず、元の足と読込状態を合わせて確認します。

画面の値と違うときは対象日時と条件から調べる
比較は、標準偏差の線の高さを見比べるのではなく、データウィンドウの数字を使います。MT4のデータウィンドウは、カーソルを合わせた足の日時・価格・指標値を確認するための機能です。指標側の表示設定によって値が非表示になっていないかも見ます。
- スクリプトが出力した銘柄名と時間足を画面側に合わせる
- 期間・平均方式・適用価格・表示移動を同じにする
- 出力されたbar_timeと同じ足へカーソルを合わせる
- データウィンドウの標準偏差と出力値を比較する
- 桁数の丸め、履歴の読込、足の切り替わりを確認する
スクリプトを実行した後に次の足が始まると、直前足を表すshift=1が指す日時も変わります。「いつでも右から二本目」とだけ覚えるのではなく、出力された日時を基準に過去の同じ足を選びます。参照位置と時刻を分けると、比較対象がずれたことに気づけます。
数値が大きく違うなら、表示桁数の差より設定の不一致を先に疑います。一方、末尾の少数桁だけが違うなら、データウィンドウの表示桁数も確認します。確定足を使っても、別サーバーの履歴や異なる価格データで必ず同じ値になるという意味ではありません。
線の高さは指標ウィンドウの上下限や自動拡大率にも左右されます。上下限を変えて山が高く見えても、計算値が変わったとは限りません。数字をEAの条件へ使う場合は、目盛りと数値を基準にしてください。
変動の大きさを使う条件は仮説として分けて検証する
EAの変動幅フィルターとして使う場合は、たとえば「指定水準より小さければ新規エントリーを見送る」「大きすぎるときは新規エントリーを見送る」といった条件を定めます。小さい状態を避けたいのか、大きい状態を避けたいのかは、元の売買ルールによって異なります。
仮にUSDJPYで、下限を0.020円、上限を0.080円と置く例を考えます。先ほどのpip定義なら2pipsと8pipsです。これは条件の書き方を説明するための仮値で、実測から選んだ推奨水準でも、有効性を確認した設定でもありません。
| 仮の条件 | 新規エントリー条件への扱いの例 | 分からないこと |
|---|---|---|
| 標準偏差が下限未満 | 見送る候補にする | あとで急騰・急落するか |
| 下限以上かつ上限以下 | ほかの売買条件の確認へ進む | 売りか買いか、利益が出るか |
| 標準偏差が上限超え | 見送る候補にする | 変動の大きさがいつ落ち着くか |
| データ取得を確認できない | 不明として新規判断を保留する | 0を代入して平静と判断しない |
境界値を含むかどうかも条件の一部です。0.020円と等しい場合を通すのか、上限と等しい場合をどうするのかを先に決め、検証と実装でそろえます。価格単位とpipsを混ぜると境界自体が変わるため、入力する単位も明記します。
ここで止めるのは、例に挙げた新規エントリーの判定です。標準偏差の条件から外れたからといって、既存ポジションの損切り管理まで止める設計へ無条件に広げないでください。入口のフィルターと保有中の管理は別に確認します。

最適期間探しの前に条件なしの場合と比べる
標準偏差を追加すれば成績が良くなるとは限りません。フィルターで取引回数が減り、都合の悪い取引だけでなく利益につながる取引も除外する可能性があります。まず同じ期間・コスト・売買ルールで、フィルターなしとありを比較します。
見るのは最終利益だけではなく、取引回数、損失の大きさ、最大ドローダウン、連敗、特定時期への偏りなどです。回数が極端に少なくなった結果を、条件がよくなった証拠としてすぐ採用しないようにします。
同じ過去データを見ながら期間と上下限を何度も選び直すと、その期間へ合わせ込みやすくなります。検証に使わない期間を分け、決めた条件で確認し、さらにデモのフォワードテストで判定が想定どおりかを見ます。進め方はFX自動売買のバックテストとフォワードテストの手順で整理できます。
標準偏差は将来の価格が一定範囲に収まる保証でもありません。分布などの前提を確認せず、数値から「この範囲なら安全」「一定確率で必ず戻る」と決めないでください。指標の意味の確認と、EAの収益性の評価を分けて進めることが大切です。
まとめ:MT4の標準偏差は単位と条件をそろえて使う
MT4の標準偏差はStandard Deviationを追加すると表示できます。期間、適用価格、平均方式、表示移動を確認し、値が価格の散らばりを表すこと、上昇・下落の方向を示さないことを押さえましょう。表示値の単位とpips・ポイントも区別します。
FX自動売買で使うときは、画面とiStdDevの条件、参照する足の日時を合わせます。まずは注文を出さない読み取り例で照合し、変動幅フィルターは元の売買ルールと分けて検証してください。数値を取得できることと、利益につながる条件であることは、別の確認事項です。
