当サイトは特定の海外FX業者を推奨したり、ランキング形式で比較したりすることはありません。金融商品取引業の登録を行っていない立場で業者の勧誘・仲介にあたる行為を避けるためです。
本記事が扱うのは「スプレッドという指標をどう読み、実質コストをどう計算するか」という方法論です。数値はすべて計算例であり、実際のスプレッドは業者・銘柄・時間帯・相場状況により常に変動します。
スプレッドは取引コストの一部でしかありません。実際に口座から失われるコストは、次の4つの合計です。
実質コスト = スプレッド + 取引手数料 + スワップ + スリッページ
| 要素 | 内容 | 見落とされやすい点 |
|---|---|---|
| スプレッド | 売値と買値の差。エントリーした瞬間に含み損として発生 | 広告される「最小」「平均」は条件が異なる |
| 取引手数料 | 低スプレッド口座で往復いくら、という形で課金される | これを無視した比較が最も多い誤り |
| スワップ | ポジションを日をまたいで保有したときの金利差調整 | マイナススワップは長期保有で無視できない額に |
| スリッページ | 意図した価格と実際の約定価格の差 | 指標時・薄商い時に膨らむ。統計を取らないと見えない |
スプレッドの絶対値ではなく、「あなたの取引スタイルにおける年間の実質コスト」で比較してください。
年間100回しか取引しない人と、EAで年間5,000回取引する人では、同じ0.5pipsの差が50倍の重みを持ちます。逆に、数百pipsを狙うスイングトレードなら1pipsの差はほぼ誤差です。「良いスプレッド」は取引頻度と利幅によって定義が変わります。
計算の前に、単位を固定します。ここを曖昧にしたまま比較しても意味がありません。
| 通貨ペア | 1pipの定義 | 1ロット(10万通貨)の1pip | 0.1ロットの1pip |
|---|---|---|---|
| USDJPY など円建て | 0.01円(1銭) | 1,000円 | 100円 |
| EURUSD などドル建て | 0.0001ドル | 10ドル(約1,500円) | 1ドル(約150円) |
| ゴールド(XAUUSD) | 0.1ドル(業者により0.01) | 銘柄仕様で要確認 | 同左 |
「ゴールドのスプレッドは35」と言われても、それが3.5ドルなのか0.35ドルなのかは業者の定義次第です。比較するときは必ずMT4/MT5の銘柄仕様(気配値で右クリック →「仕様」)で契約サイズと最小変動単位を確認してください。
ゴールドはpips表記の混乱が最も多い銘柄で、ここを取り違えると実質コストの見積もりが10倍ずれます。
1往復のスプレッドコスト = スプレッド(pips) × ロット数 × 1pipの価値
USDJPYで1.6pips・1ロットなら、1往復あたり 1.6 × 1 × 1,000 = 1,600円。
スプレッドは往復ではなく「1回のエントリーで1回発生」します(エントリー時にスプレッド分の含み損を背負い、決済はその状態から行われるため)。一方、取引手数料は「往復いくら」で表示されるのが一般的です。この非対称に注意してください。
自分の取引スタイルで、年間いくら払っているのかを確認してください。取引回数を増やしたときのコストの伸び方が、この記事の主題です。
※ スワップ・スリッページは含まない概算です。実際のコストは約定状況により変動します。計算上の値であり、取引結果を保証するものではありません。
初期値の10pipsから、5pips、3pips と下げてみてください。コストの割合が跳ね上がり、トントンに必要な勝率が急速に上昇するのが分かります。
これがスキャルピングEAが理論上は優秀に見えても実運用で成立しにくい理由です。利幅が小さいほど、スプレッドは相対的な巨人になります。逆に利幅100pipsのスイングなら、1.6pipsは1.6%のコストにすぎません。
海外FX業者は一般に、2系統の口座を用意しています。この2つはどちらが優れているという話ではなく、ロット数によって有利不利が入れ替わります。
| 口座系統 | スプレッド | 取引手数料 | 向いている使い方 |
|---|---|---|---|
| スタンダード系 (手数料無料型) |
広め(例:1.6pips) | 無料 | 小ロット・低頻度・ボーナス活用 |
| 低スプレッド系 (手数料型) |
狭い(例:0.1pips) | 往復で課金 | 大ロット・高頻度・スキャルピング |
スタンダード系のコストとゼロ系のコストが等しくなる点を求めます。
注目すべきは、この式から Lot が消えることです。スプレッドも手数料もロットに比例するため、ロット数では有利不利は変わりません。決まるのは「スプレッド差 × 1pip価値」と「往復手数料」の大小だけです。
USDJPY(1pip = 1,000円 / 1ロット)で、スタンダード1.6pips・低スプレッド系0.1pips・往復手数料1,000円のケースなら:
スプレッド差の価値 = (1.6 − 0.1) × 1,000 = 1,500円/手数料 = 1,000円
1,500円 > 1,000円 なので低スプレッド系のほうが1ロットあたり500円有利——ロット数に関係なく、常に有利です。
逆に手数料が2,000円なら、常にスタンダード系が有利になります。「大ロットなら手数料型が得」という通説は、この式の上では成立しません。上の計算機で両方の条件を入れて比較してみてください。
口座タイプごとの実際のスプレッド・手数料・ボーナス対象可否については XM口座タイプ4種類を徹底比較 にまとめています。低スプレッド系の口座はボーナス対象外であることが多いため、ボーナスによる証拠金の厚みとのトレードオフも判断材料になります。
海外FXの多くは変動スプレッドです。広告に出る数字は「平均」または「最小」であり、あなたが実際に払う値ではありません。
| 時間帯・局面 | スプレッドの傾向 | EA運用での対応 |
|---|---|---|
| ロンドン〜NY重複 (日本時間 21〜25時頃) |
最も狭い。流動性が最大 | 高頻度EAはこの時間帯に絞るのが基本 |
| 東京時間 | やや広い。通貨ペアによる | クロス円以外は不利になりやすい |
| 早朝(日本時間 5〜8時頃) | 大幅に拡大。流動性が枯れる | 取引停止フィルタを必ず入れる |
| 重要指標発表の前後 | 数倍〜数十倍に拡大 | 指標カレンダー連動で停止 |
| 週明けオープン直後 | 窓とスプレッド拡大が同時 | 月曜early は稼働させない設計が無難 |
| 年末年始・クリスマス | 長期にわたり拡大 | → 取引時間スケジュールで事前確認 |
平均スプレッドが1.6pipsでも、あなたのEAが早朝と指標時にしかエントリーしない設計なら、実際に払っているのは平均値ではありません。
逆に、流動性の高い時間帯にしか取引しないEAなら、実効スプレッドは平均より狭くなります。重要なのは「業者の平均」ではなく「自分の約定履歴における実測値」です。その測り方を次章で扱います。
ここが本記事の核心です。バックテストと実運用の乖離要因として、スプレッドの扱いは最も大きく、そして最も見落とされます。
ストラテジーテスターでは、スプレッドを「現在値」または任意の固定値で設定できます。多くの人はここを深く考えず、テスト実行時のスプレッド(たまたま狭い時間帯の値かもしれない)でテストします。
結果として「スプレッド1.0pips固定」でバックテストしたEAが、実運用では平均2.5pipsを払う——という事態が起きます。1トレードあたり1.5pipsの差が、年間3,000トレードなら4,500pipsの差です。1ロットなら450万円。これだけでほとんどの戦略の優位性は消えます。
平均利幅8pips・年間3,000トレード・勝率55%・1ロットのスキャルピングEAを想定した計算例です。
| テスト時のスプレッド設定 | 1トレード実質利幅 | 年間コスト | 評価 |
|---|---|---|---|
| 0.5pips(理想的) | 7.5 pips | 150万円 | 優秀なEAに見える |
| 1.0pips | 7.0 pips | 300万円 | まだ勝てる |
| 1.6pips(現実的) | 6.4 pips | 480万円 | 優位性が縮む |
| 2.5pips(早朝・指標込み) | 5.5 pips | 750万円 | 利益がほぼ消える |
| 3.5pips(悪条件) | 4.5 pips | 1,050万円 | 明確に赤字化 |
※ 年間コスト = スプレッド × 3,000回 × 1,000円(1ロット・円建てペア想定)。ロジック・勝率は一切変えず、スプレッド設定だけを変えた場合の比較です。計算例であり実際の運用成果を示すものではありません。
① 実測した平均スプレッドではなく、実測値の上位25%(悪いほう)でテストする
② それでもプラスなら、次にスリッページを加味する
③ ティックデータでの検証時も、スプレッドは楽観値を使わない
「最良条件で勝つEA」は存在して当たり前です。知りたいのは「悪条件でも生き残るか」であって、その閾値を決めるのがスプレッド設定です。バックテストの信頼性を統計的に検証する方法は 過剰最適化を数値で検出する を参照してください。
推測をやめて測りましょう。実際にあなたの口座で、あなたが取引する時間帯に、いくらのスプレッドが提示されているかを記録するスクリプトです。
//+------------------------------------------------------------------+
//| 本コードは本人利用に限り自由に使用可。 |
//| 再配布・商用利用・販売は禁止。 |
//| スプレッドをティックごとに記録し、CSVへ出力する |
//+------------------------------------------------------------------+
#property strict
input int InpFlushSec = 60; // 何秒ごとにファイルへ書き出すか
input string InpFileName = "spread_log.csv";
int g_handle = INVALID_HANDLE;
datetime g_lastFlush = 0;
int OnInit()
{
// 共通フォルダではなく MQL5/Files に出力
g_handle = FileOpen(InpFileName, FILE_WRITE|FILE_READ|FILE_CSV|FILE_ANSI, ',');
if(g_handle == INVALID_HANDLE)
{
Print("ファイルを開けません: ", GetLastError());
return(INIT_FAILED);
}
FileSeek(g_handle, 0, SEEK_END);
// ヘッダは空ファイルのときだけ書く
if(FileTell(g_handle) == 0)
FileWrite(g_handle, "datetime", "symbol", "bid", "ask", "spread_points", "spread_pips");
return(INIT_SUCCEEDED);
}
void OnDeinit(const int reason)
{
if(g_handle != INVALID_HANDLE) FileClose(g_handle);
}
void OnTick()
{
MqlTick t;
if(!SymbolInfoTick(_Symbol, t)) return;
double point = SymbolInfoDouble(_Symbol, SYMBOL_POINT);
int digits = (int)SymbolInfoInteger(_Symbol, SYMBOL_DIGITS);
if(point <= 0.0) return;
// 3桁/5桁業者は 10point = 1pip
double pipSize = (digits == 3 || digits == 5) ? point * 10.0 : point;
double spreadPoints = (t.ask - t.bid) / point;
double spreadPips = (t.ask - t.bid) / pipSize;
FileWrite(g_handle,
TimeToString(t.time, TIME_DATE|TIME_SECONDS),
_Symbol,
DoubleToString(t.bid, digits),
DoubleToString(t.ask, digits),
DoubleToString(spreadPoints, 1),
DoubleToString(spreadPips, 2));
if(TimeCurrent() - g_lastFlush >= InpFlushSec)
{
FileFlush(g_handle);
g_lastFlush = TimeCurrent();
}
}
1週間ほど動かして spread_log.csv を貯めたら、Pythonで集計します。平均だけでなく、時間帯別の分布とパーセンタイルを見るのが要点です。
# 本コードは本人利用に限り自由に使用可。再配布・商用利用・販売は禁止。
# MT5が出力した spread_log.csv を時間帯別に集計する
import pandas as pd
df = pd.read_csv("spread_log.csv")
df["datetime"] = pd.to_datetime(df["datetime"])
df = df.set_index("datetime")
# MT5サーバー時間 -> 日本時間に補正(サーバーのGMTオフセットに合わせて調整)
SERVER_TO_JST_HOURS = 6
df.index = df.index + pd.Timedelta(hours=SERVER_TO_JST_HOURS)
df["hour"] = df.index.hour
summary = df.groupby("hour")["spread_pips"].agg(
count="count",
mean="mean",
median="median",
p75=lambda s: s.quantile(0.75),
p95=lambda s: s.quantile(0.95),
max="max",
).round(2)
print("=== 時間帯別スプレッド(日本時間・pips) ===")
print(summary.to_string())
print("\n=== 全体 ===")
print(f"平均 : {df['spread_pips'].mean():.2f} pips")
print(f"中央値 : {df['spread_pips'].median():.2f} pips")
print(f"75パーセンタイル: {df['spread_pips'].quantile(0.75):.2f} pips <- バックテストにはこの値を使う")
print(f"95パーセンタイル: {df['spread_pips'].quantile(0.95):.2f} pips")
# 稼働させたい時間帯だけを抜き出して実効スプレッドを見る
TRADING_HOURS = range(21, 26) # 日本時間21時〜翌1時(25=翌1時)
mask = df["hour"].isin([h % 24 for h in TRADING_HOURS])
print(f"\n稼働時間帯の平均: {df.loc[mask, 'spread_pips'].mean():.2f} pips")
① バックテストに入れるべきスプレッド値(75パーセンタイルを推奨)
② EAを稼働させるべき時間帯(スプレッドが安定して狭い時間帯)
③ 取引を停止すべき時間帯(p95が跳ねている時間帯)
広告の「平均スプレッド」と、あなたの実測値がどれだけ違うかを一度確認してください。この差が、そのまま「想定と現実のズレ」の大きさです。
スプレッドは「利益を削る」だけでなく「勝率とペイオフレシオの両方を悪化させます」。ここが直感に反する部分です。
利確幅 TP、損切幅 SL、スプレッド S とすると、実質的な値は次のようになります。
分子が減り、分母が増えます。スプレッドはペイオフレシオを二重に悪化させるということです。さらに、損切幅が実質的に近づくことで勝率そのものも下がります。
| スプレッド | 実質TP | 実質SL | 実質ペイオフ | 必要勝率 |
|---|---|---|---|---|
| 0.0 pips | 10.0 | 10.0 | 1.00 | 50.0% |
| 0.5 pips | 9.5 | 10.5 | 0.90 | 52.5% |
| 1.0 pips | 9.0 | 11.0 | 0.82 | 55.0% |
| 1.6 pips | 8.4 | 11.6 | 0.72 | 58.0% |
| 2.5 pips | 7.5 | 12.5 | 0.60 | 62.5% |
※ 必要勝率 = 実質SL / (実質TP + 実質SL)。手数料・スワップ・スリッページを除いた計算値です。
TP/SLが10pipsのEAにとって、スプレッド1.6pipsは「必要勝率が50%から58%に上がる」ことを意味します。勝率を8ポイント改善するのは、ロジック改良として極めて困難です。
つまり、スプレッドの改善はロジック改良より投資対効果が高い場合があります。そしてこの効果は、TP/SLが小さいほど劇的に大きくなります。TP100pipsのEAなら、同じ1.6pipsでも必要勝率の上昇は1ポイント未満です。
期待値・破産確率・ケリー基準の観点からのリスク設計は FX自動売買で億り人になる条件を数字で暴く で詳しく計算しています。
スプレッドと取引手数料の条件は口座タイプごとに異なり、随時変更されます。本記事の数値はすべて計算例です。実際の条件は公式サイトと、MT4/MT5の銘柄仕様で確認してください。
投資は自己判断・自己責任でお願いいたします。本サイトの情報・ツール・ソフトウェアを参考・使用して、取引をされて何らかの損失を被られても、当サイトでは責任は一切負いません(間接的・付随的な障害・損失も含め一切の責任を負いません)。自己責任でご利用ください。
当サイトからダウンロードしたプログラム・EAは本人利用に限り完全無料でご利用いただけます。プログラムの全てまたは一部の複製・コピー・リバースエンジニアリング・改変・2次配布・商用利用・転売・販売等は一切禁止いたします。違反を発見した場合は法的処置を行います。
当サイト上に存在するソフトウェア・ツール・文章・画像・動画等の著作物を無断転載することを禁止します。引用の範囲を超えるものについては、法的処置を行います。
当サイトで配布するツール・ソフトウェアは無料提供ですのでサポートなどは行っておりません。万が一、ツールやソフトウェアに不具合や問題があっても当サイトでは修正・対応などができない場合があります。ご利用の環境でトラブルが発生しても当サイトでは助言することはできませんので自己責任でご利用ください。
当サイトからリンクやバナーなどによって他のサイトに移動された場合、移動先サイトで提供される情報、サービス等について一切の責任を負いません。当サイト掲載情報やリンク先の掲載情報の合法性、正確性、道徳性、最新性、適切性、著作権の許諾や有無など、その内容については一切の保証を致しかねます。
当サイトは、ご訪問いただいた時間、訪問者のアクセス元のホスト名、IPアドレス、OSとブラウザのバージョン、リンク元のURL、モニターの情報等のパソコン環境情報を収集し、アクセス解析をしております。この目的は訪問者が検索サイトからご訪問いただいた場合、どのような検索で当サイトに来訪いただいたかの解析にのみ使用しており、第3者に公開はいたしません。また、個人を特定するものではありません。