MQL5ロット・証拠金・銘柄仕様完全ガイド|volume step・tick value・stops levelの確認
MQL5でEAの注文処理を作る時、ロット、証拠金、銘柄仕様の確認は非常に重要です。シグナルが出ていても、ロットが銘柄仕様に合っていない、証拠金が不足している、SL/TP距離が近すぎる、StopLevelやFreezeLevelを満たしていない、といった理由で注文は失敗します。
特にMT5では、銘柄ごとに最小ロット、最大ロット、volume step、tick size、tick value、contract size、digits、point、stops level、freeze level、取引可否などが異なります。USDJPY、EURUSD、GOLD / XAUUSD、指数、仮想通貨CFDなどを同じ感覚で扱うと、ロット計算やSL/TP距離、必要証拠金の確認で誤りが起きやすくなります。
この記事では、MQL5でEAのロット・証拠金・銘柄仕様を確認するために、SymbolInfoDouble、SymbolInfoInteger、OrderCalcMargin、OrderCheck、volume min / max / step、tick size / tick value、point / digits、contract size、stops level、freeze level、ログ設計、バックテスト確認までを実務目線で整理します。
なお、この記事はMT5 / MQL5のEA開発、発注前チェック、銘柄仕様確認、ログ確認を目的とした技術記事です。特定の売買判断、利益、勝率、損失回避、推奨ロット、推奨銘柄を案内するものではありません。
- この記事で確認すること
- MQL5で銘柄仕様を確認する理由
- SymbolInfoDoubleとSymbolInfoIntegerの基本
- volume min / max / step を確認する
- ロットを銘柄仕様に合わせて丸める考え方
- point・digits・pipsを混同しない
- tick size・tick value・contract sizeを確認する
- stops levelとfreeze levelの違い
- SL/TP距離を確認する基本コード例
- OrderCalcMarginで必要証拠金を確認する
- OrderCheckとの関係
- CTradeやOrderSendの前に確認すること
- スプレッド条件を発注前の確認へ組み込む
- GOLD / XAUUSD対応EAで特に注意すること
- GOLD・XAUUSDの銘柄仕様とログを照合する
- 複数銘柄EAでの銘柄仕様確認
- バックテストでロット・証拠金・銘柄仕様を確認する
- ログ設計で確認しやすくする
- よくある不具合と確認ポイント
- 開発依頼前に整理する情報
- ロット・証拠金・銘柄仕様の実務チェック表
- よくある質問
- 関連する確認ページ
- あわせて確認したいページ
- まとめ
- お問い合わせはEAFC公式LINEへ
- 利用条件・相談窓口
この記事で確認すること
- MQL5でロット・証拠金・銘柄仕様を確認する理由
- volume min / max / step の確認
- ロットを銘柄仕様に合わせて丸める考え方
- point、digits、pipsの混同を避ける考え方
- tick size、tick value、contract size の確認
- stops level と freeze level の違い
- SL/TP距離を銘柄仕様に合わせて確認する方法
- OrderCalcMarginで必要証拠金を確認する方法
- OrderCheck、CTrade、OrderSendとの関係
- GOLD / XAUUSDなど銘柄差が大きい環境での注意点
- バックテストと実運用で結果が違う時の確認
- ロット・証拠金・銘柄仕様のログ設計
MQL5で銘柄仕様を確認する理由
EAの発注処理では、ロジックが正しくても銘柄仕様に合っていない注文は失敗します。たとえば、最小ロットより小さいロット、volume stepに合わないロット、現在価格に近すぎるSL/TP、取引不可の銘柄、証拠金不足の注文は、発注前またはOrderSend時点で失敗する可能性があります。
このため、EA開発では「エントリー条件が成立したか」だけでなく、「その銘柄で注文可能な形に整っているか」を確認します。MQL5では、SymbolInfoDoubleやSymbolInfoIntegerを使って、銘柄ごとの仕様を取得できます。
ロット・証拠金・銘柄仕様を確認しないままEAを作ると、バックテストでは動いたが実チャートでは注文できない、USDJPYでは動くがXAUUSDでは失敗する、デモでは通るが別口座ではロットエラーになる、といった問題が起きやすくなります。
| 確認項目 | 内容 | 発注失敗との関係 |
|---|---|---|
| 最小ロット | その銘柄で注文できる最小数量。 | これ未満のロットは不正になります。 |
| 最大ロット | その銘柄で注文できる最大数量。 | これを超える注文は不正になります。 |
| volume step | ロットの刻み幅。 | 刻み幅に合わないロットは失敗要因になります。 |
| point / digits | 価格単位と小数桁。 | SL/TP距離や価格丸めに影響します。 |
| tick size / tick value | 最小変動幅と価値。 | 損益計算や銘柄差確認に使います。 |
| contract size | 1ロットあたりの契約サイズ。 | 証拠金や損益の感覚に影響します。 |
| stops level | SL/TPや指値を置く時の最小距離に関係します。 | invalid stops の原因になります。 |
| freeze level | 注文変更が制限される距離に関係します。 | トレーリングやPositionModify失敗に関係します。 |
| trade mode | 銘柄の取引可否。 | 取引不可銘柄では注文できません。 |
SymbolInfoDoubleとSymbolInfoIntegerの基本
ロット・tick value・tick sizeなどの浮動小数点プロパティはSymbolInfoDouble()で取得します。固定ロットや固定桁数を前提にせず、対象シンボルの仕様を実行時に確認する設計が基本です。
MQL5で銘柄仕様を取得する時は、SymbolInfoDoubleやSymbolInfoIntegerを使います。double型の銘柄情報はSymbolInfoDouble、整数型の銘柄情報はSymbolInfoIntegerで取得するのが基本です。
ロット関係では、SYMBOL_VOLUME_MIN、SYMBOL_VOLUME_MAX、SYMBOL_VOLUME_STEPを確認します。価格や損益計算では、SYMBOL_POINT、SYMBOL_TRADE_TICK_SIZE、SYMBOL_TRADE_TICK_VALUE、SYMBOL_TRADE_CONTRACT_SIZEを確認します。小数桁やStopLevel、FreezeLevelはSymbolInfoIntegerで確認する場面があります。
void PrintSymbolSpec(string symbol)
{
double vol_min = SymbolInfoDouble(symbol, SYMBOL_VOLUME_MIN);
double vol_max = SymbolInfoDouble(symbol, SYMBOL_VOLUME_MAX);
double vol_step = SymbolInfoDouble(symbol, SYMBOL_VOLUME_STEP);
double point = SymbolInfoDouble(symbol, SYMBOL_POINT);
double tick_size = SymbolInfoDouble(symbol, SYMBOL_TRADE_TICK_SIZE);
double tick_val = SymbolInfoDouble(symbol, SYMBOL_TRADE_TICK_VALUE);
double contract = SymbolInfoDouble(symbol, SYMBOL_TRADE_CONTRACT_SIZE);
long digits = SymbolInfoInteger(symbol, SYMBOL_DIGITS);
long stops_level = SymbolInfoInteger(symbol, SYMBOL_TRADE_STOPS_LEVEL);
long freeze_lv = SymbolInfoInteger(symbol, SYMBOL_TRADE_FREEZE_LEVEL);
long trade_mode = SymbolInfoInteger(symbol, SYMBOL_TRADE_MODE);
PrintFormat("SYMBOL_SPEC symbol=%s vol_min=%.2f vol_max=%.2f vol_step=%.2f point=%.10f digits=%d tick_size=%.10f tick_value=%.2f contract=%.2f stops=%d freeze=%d trade_mode=%d",
symbol,
vol_min,
vol_max,
vol_step,
point,
digits,
tick_size,
tick_val,
contract,
stops_level,
freeze_lv,
trade_mode);
}このように、EA起動時や発注前に銘柄仕様をログに残すと、注文失敗時の原因を追いやすくなります。特に、複数銘柄EAやGOLD / XAUUSD対応EAでは、銘柄ごとに仕様が違うため、固定値で判断しないようにしてください。
volume min / max / step を確認する
EAで注文ロットを扱う時は、最小ロット、最大ロット、volume stepを確認します。EA側で計算したロットが、銘柄の許容範囲と刻みに合っていない場合、OrderSendやCTradeで注文が失敗することがあります。
たとえば、計算上は0.037ロットになっても、銘柄のvolume stepが0.01なら0.03または0.04へ丸める必要があります。volume stepが0.10の銘柄で0.03ロットを送ると、ロット不正になる可能性があります。
| プロパティ | 意味 | 確認ポイント |
|---|---|---|
SYMBOL_VOLUME_MIN | 最小ロット。 | 要求ロットがこれ未満なら補正または発注停止します。 |
SYMBOL_VOLUME_MAX | 最大ロット。 | 要求ロットがこれを超える場合は上限を確認します。 |
SYMBOL_VOLUME_STEP | ロットの刻み幅。 | 要求ロットが刻みに合うように丸めます。 |
| 要求ロット | EA側で計算したロット。 | 残高連動、リスク%、固定ロットなどで計算します。 |
| 発注ロット | 銘柄仕様に合わせたロット。 | 注文に使う最終値をログに残します。 |
ロットを銘柄仕様に合わせて丸める考え方
ロットを計算した後は、volume stepに合わせて丸めます。丸め方はEAの仕様によって変わります。安全側に倒すなら切り下げ、目標リスクに近づけるなら四捨五入、必ず最小ロット以上にするなら下限補正を行います。
ただし、丸め処理で最小ロット未満になった場合に、無理に最小ロットへ引き上げると、想定リスクより大きい注文になる場合があります。EAの仕様として、最小ロット未満なら発注しないのか、最小ロットへ補正するのかを明確にしてください。
double NormalizeVolumeBySymbol(string symbol, double raw_volume)
{
double vol_min = SymbolInfoDouble(symbol, SYMBOL_VOLUME_MIN);
double vol_max = SymbolInfoDouble(symbol, SYMBOL_VOLUME_MAX);
double vol_step = SymbolInfoDouble(symbol, SYMBOL_VOLUME_STEP);
if(vol_step <= 0.0)
return 0.0;
double volume = MathFloor(raw_volume / vol_step) * vol_step;
if(volume < vol_min)
volume = 0.0;
if(volume > vol_max)
volume = vol_max;
volume = NormalizeDouble(volume, 2);
PrintFormat("LOT_NORMALIZE symbol=%s raw=%.6f normalized=%.2f min=%.2f max=%.2f step=%.2f",
symbol,
raw_volume,
volume,
vol_min,
vol_max,
vol_step);
return volume;
}この例では、raw_volumeをvolume stepで切り下げ、最小ロット未満なら0として発注しない判断にしています。実際のEAでは、最小ロット未満を発注停止にするのか、最小ロットへ引き上げるのかを仕様として決めてください。
point・digits・pipsを混同しない
MQL5でSL/TP距離やスプレッドを扱う時は、point、digits、pipsを混同しないことが重要です。MQL5上の価格計算では、基本的にpointとdigitsを使って銘柄の価格単位を確認します。
FX通貨ペア、GOLD / XAUUSD、指数、仮想通貨CFDでは、価格の桁やpointの感覚が違うことがあります。たとえば、USDJPYの1 pointとXAUUSDの1 pointでは、価格上の見え方や損益感覚が異なる場合があります。
EAのinputで「pips」と書いていても、内部ではpoint換算で扱っている場合があります。読者や利用者に見せる表記と、MQL5内部で使う単位を混同しないようにしてください。
| 項目 | 意味 | 注意点 |
|---|---|---|
| digits | 銘柄価格の小数桁。 | 価格表示や丸めに使います。 |
| point | 価格の最小単位。 | SL/TP距離、スプレッド、stops level確認に使います。 |
| pips | 取引上の慣用的な値幅表現。 | MQL5内部のpointと必ず一致するとは限りません。 |
| tick size | 実際の最小価格変動幅。 | pointと同じとは限らないため確認します。 |
| tick value | tick size分動いた時の価値。 | 損益計算や銘柄比較で確認します。 |
tick size・tick value・contract sizeを確認する
tick size、tick value、contract sizeは、銘柄ごとの損益感覚や証拠金計算を確認する時に重要です。特にGOLD / XAUUSD、指数、仮想通貨CFDのように、通貨ペアとは価格単位や契約サイズの感覚が異なる銘柄では確認が必要です。
tick sizeは最小変動幅、tick valueはその変動幅に対する価値、contract sizeは1ロットあたりの契約サイズです。EAのロット計算や損益見込みを作る場合、これらの値を固定で考えず、SymbolInfoDoubleで取得する前提にしてください。
| プロパティ | 意味 | 使いどころ |
|---|---|---|
SYMBOL_TRADE_TICK_SIZE | 最小価格変動幅。 | 価格がどの刻みで動くか確認します。 |
SYMBOL_TRADE_TICK_VALUE | 1 tickの価値。 | 損益見込みやリスク計算の参考にします。 |
SYMBOL_TRADE_CONTRACT_SIZE | 1ロットあたりの契約サイズ。 | 銘柄差、証拠金、損益感覚の確認に使います。 |
SYMBOL_POINT | 価格のpoint単位。 | 距離計算やスプレッド確認に使います。 |
SYMBOL_DIGITS | 価格の小数桁。 | 価格丸めに使います。 |
損益計算やリスク計算を厳密に扱うEAでは、tick valueやcontract sizeだけでなく、口座通貨、銘柄の利益通貨、換算レート、手数料、スワップも関係する場合があります。単純な固定式だけで全銘柄へ対応できるとは限らないため、検証ログで確認することが重要です。
stops levelとfreeze levelの違い
SL/TPや指値注文、トレーリング、PositionModifyを扱うEAでは、stops levelとfreeze levelを確認します。stops levelは、SL/TPや指値・逆指値を置く時の最小距離に関係します。freeze levelは、現在価格に近い注文やポジション変更が制限される距離に関係します。
invalid stops が出る場合、SL/TPの価格が近すぎる、point換算を間違えている、BUYとSELLでSL/TPの方向を誤っている、digitsの丸めが合っていない、といった原因が考えられます。
| 項目 | 意味 | 影響する処理 |
|---|---|---|
| stops level | SL/TPや予約注文を置く時の最小距離に関係します。 | 新規注文、SL/TP設定、指値・逆指値。 |
| freeze level | 現在価格に近い注文やポジション変更の制限に関係します。 | PositionModify、トレーリング、建値移動。 |
| SL距離 | 現在価格からSLまでの距離。 | 損切り設定の妥当性確認。 |
| TP距離 | 現在価格からTPまでの距離。 | 利確設定の妥当性確認。 |
| 価格丸め | digitsに合わせた価格補正。 | 発注価格、SL/TP価格、変更価格。 |
SL/TP距離を確認する基本コード例
SL/TP距離を確認する時は、現在価格、point、stops level、freeze levelを使って距離を確認します。BUYとSELLでは、SL/TPの位置関係が逆になるため、方向ごとに分けて確認してください。
bool CheckStopsDistance(string symbol, ENUM_ORDER_TYPE order_type, double sl, double tp)
{
double point = SymbolInfoDouble(symbol, SYMBOL_POINT);
int digits = (int)SymbolInfoInteger(symbol, SYMBOL_DIGITS);
int stops_level = (int)SymbolInfoInteger(symbol, SYMBOL_TRADE_STOPS_LEVEL);
int freeze_level = (int)SymbolInfoInteger(symbol, SYMBOL_TRADE_FREEZE_LEVEL);
double bid = SymbolInfoDouble(symbol, SYMBOL_BID);
double ask = SymbolInfoDouble(symbol, SYMBOL_ASK);
double base_price = (order_type == ORDER_TYPE_BUY) ? ask : bid;
double sl_points = (sl > 0.0) ? MathAbs(base_price - sl) / point : 0.0;
double tp_points = (tp > 0.0) ? MathAbs(tp - base_price) / point : 0.0;
bool sl_ok = (sl <= 0.0 || sl_points >= stops_level);
bool tp_ok = (tp <= 0.0 || tp_points >= stops_level);
PrintFormat("STOPS_CHECK symbol=%s type=%d price=%.*f sl=%.*f tp=%.*f sl_points=%.1f tp_points=%.1f stops=%d freeze=%d sl_ok=%s tp_ok=%s",
symbol,
order_type,
digits,
base_price,
digits,
sl,
digits,
tp,
sl_points,
tp_points,
stops_level,
freeze_level,
sl_ok ? "Y" : "N",
tp_ok ? "Y" : "N");
return (sl_ok && tp_ok);
}この例は、SL/TP距離がstops levelを満たしているかを確認するための簡略例です。実際のEAでは、BUYとSELLの方向、現在価格、価格丸め、予約注文、freeze level、ブローカー仕様もあわせて確認してください。
OrderCalcMarginで必要証拠金を確認する
OrderCalcMarginは、指定した注文条件で必要証拠金を計算するために使います。発注前に必要証拠金を確認しておくと、証拠金不足による注文失敗を原因を確認しやすくなります。
証拠金確認では、注文方向、銘柄、ロット、価格を指定し、必要証拠金を計算します。そのうえで、AccountInfoDoubleで取得できる余剰証拠金などと比較します。OrderCheckと組み合わせることで、発注前チェックの信頼性を高めやすくなります。
bool CheckMarginBeforeOrder(string symbol, ENUM_ORDER_TYPE order_type, double volume)
{
double price = (order_type == ORDER_TYPE_BUY)
? SymbolInfoDouble(symbol, SYMBOL_ASK)
: SymbolInfoDouble(symbol, SYMBOL_BID);
double margin = 0.0;
ResetLastError();
bool ok = OrderCalcMargin(order_type, symbol, volume, price, margin);
double free_margin = AccountInfoDouble(ACCOUNT_MARGIN_FREE);
PrintFormat("MARGIN_CHECK symbol=%s type=%d volume=%.2f price=%.5f ok=%s required=%.2f free=%.2f last_error=%d",
symbol,
order_type,
volume,
price,
ok ? "Y" : "N",
margin,
free_margin,
GetLastError());
if(!ok)
return false;
return (free_margin > margin);
}この例では、OrderCalcMarginで必要証拠金を確認し、余剰証拠金と比較しています。実際には、証拠金が足りるかどうかだけでなく、発注後の余力、最大ポジション数、日次停止、ナンピンEAの追加余力なども設計上確認します。
OrderCheckとの関係
OrderCheckは、MqlTradeRequestで作成した注文リクエストについて、注文前に確認するための関数です。ロット、価格、証拠金、SL/TPなどの確認結果をMqlTradeCheckResultで受け取れます。
OrderCalcMarginは必要証拠金の確認に使いやすく、OrderCheckは注文リクエスト全体の確認に使いやすいという違いがあります。EAの発注前チェックでは、SymbolInfoで銘柄仕様を確認し、ロットやSL/TPを整え、必要に応じてOrderCalcMarginやOrderCheckで最終確認する流れが実務的です。
| 確認方法 | 主な役割 | 確認できること |
|---|---|---|
| SymbolInfoDouble / SymbolInfoInteger | 銘柄仕様の取得。 | ロット、point、digits、tick value、stops levelなど。 |
| OrderCalcMargin | 必要証拠金の計算。 | 指定ロットで必要な証拠金。 |
| OrderCheck | 注文リクエストの事前確認。 | retcode、margin、margin_free、commentなど。 |
| OrderSend / CTrade | 実際の注文送信。 | 注文結果、retcode、order、deal、comment。 |
| Expertsログ | EA側の判断記録。 | 発注前チェック、見送り理由、注文結果。 |
CTradeやOrderSendの前に確認すること
CTradeのBuy / SellやOrderSendを呼び出す前には、EA側で発注前チェックを行います。シグナルが出たからすぐ注文するのではなく、スプレッド、ロット、証拠金、SL/TP距離、最大ポジション数、取引可否を確認します。
この発注前チェックを分けておくと、注文できない時に「シグナルが出ていない」のか、「発注前チェックで止めた」のか、「CTradeやOrderSendで失敗した」のかを原因を確認しやすくなります。
| 工程 | 確認内容 | ログ例 |
|---|---|---|
| signal | BUY / SELL候補があるか。 | SIGNAL side=BUY reason=MA_CROSS |
| filter | スプレッド、時間帯、最大ポジション数。 | FILTER_BLOCK reason=SPREAD |
| lot | ロットがvolume stepに合っているか。 | LOT_NORMALIZE raw=0.037 lot=0.03 |
| stops | SL/TPがstops levelを満たすか。 | STOPS_CHECK sl_ok=Y tp_ok=Y |
| margin | 必要証拠金を満たすか。 | MARGIN_CHECK required=12000 free=15000 |
| execution | CTradeまたはOrderSendを実行する。 | ORDER_SEND retcode=10009 |
取引許可状態も発注前に確認する
ロット、証拠金、スプレッド、SL/TP距離に問題がなくても、MT5端末、EA、口座、銘柄のいずれかで取引が許可されていなければ注文へ進めません。発注前チェックでは、注文条件とあわせて取引許可状態も分けて確認すると、シグナル不成立と取引停止を区別しやすくなります。
| 確認対象 | 確認すること | 確認項目の例 |
|---|---|---|
| MT5端末 | 端末側で自動売買が許可されているか | TERMINAL_TRADE_ALLOWED |
| EA | EAからの取引が許可されているか | MQL_TRADE_ALLOWED |
| 口座 | 口座が取引可能な状態か | ACCOUNT_TRADE_ALLOWED |
| 銘柄 | 対象銘柄の取引モードが有効か | SYMBOL_TRADE_MODE |
| EA設定 | 取引ON/OFFや停止条件で止まっていないか | 入力設定・停止状態を確認 |
スプレッド条件を発注前の確認へ組み込む
スプレッドフィルターとは
スプレッドフィルターとは、EAが新規注文を出す前に現在スプレッドを確認し、設定した上限を超えている場合に発注を見送る仕組みです。
EAの中では、エントリーシグナルの成立と、発注してよい状態かどうかを分けて扱います。
| 段階 | 確認内容 | ログ例 |
|---|---|---|
| SIGNAL | BUY候補、SELL候補、WAITを判断する | SIGNAL_BUY、SIGNAL_SELL、SIGNAL_WAIT |
| SPREAD CHECK | 現在スプレッドが上限以内か確認する | SPREAD_OK、SPREAD_BLOCK |
| ORDER PRECHECK | ロット、証拠金、取引許可などを確認する | ORDER_PRECHECK_OK、LOT_BLOCK、MARGIN_BLOCK |
| EXECUTION | 注文要求を送る | ORDER_SENT、ORDER_FAIL |
スプレッドフィルターで止まることは、EAが壊れているという意味ではありません。条件に合わないため、新規注文を安全側で見送っている状態です。
シグナル成立と発注許可を分ける
スプレッドフィルターを実装する時は、シグナル成立と発注許可を分けてログ化することが重要です。
たとえば、インジケーター条件や方向条件が成立していても、スプレッドが上限を超えている場合は、発注しない設計にできます。
| 状態 | 意味 | 確認すること |
|---|---|---|
| シグナル不成立 | EAの売買候補が出ていない | SIGNAL_WAIT、GATE_FAIL、SCORE不足など |
| シグナル成立 | BUYまたはSELL候補がある | SIGNAL_BUY、SIGNAL_SELL |
| スプレッド超過 | 候補はあるが発注前に見送る | SPREAD_BLOCK、ENTRY_SKIP |
| 発注許可 | スプレッド条件を通過した | SPREAD_OK、ORDER_PRECHECK_OK |
この分離がないと、「サインが出ているのに注文しない」原因を確認しにくくなります。
現在スプレッドを確認する方法
MQL5で現在スプレッドを確認する方法には、主に2つの考え方があります。
1つは銘柄仕様として提供されるスプレッド値を確認する方法、もう1つはAskとBidの差から計算する方法です。
| 確認方法 | 確認内容 | 注意点 |
|---|---|---|
| SYMBOL_SPREAD | MT5側が返すスプレッド値を確認する | points単位で扱う前提を確認する |
| Ask – Bid | 現在のAsk価格とBid価格の差を計算する | pointで割ってpoints換算する必要がある |
| SYMBOL_SPREAD_FLOAT | 変動スプレッドかどうかを確認する | 固定か変動かの前提確認に使う |
どの方法を使う場合でも、EA内部で使う単位を統一し、ログにも同じ単位で出すことが重要です。
points表記と価格差を混同しない
スプレッドフィルターでよくある確認ミスが、points表記と価格差の混同です。
たとえば、スプレッドを価格差として見ているのか、pointsとして見ているのかが曖昧だと、設定値と実際の判定が合わなくなることがあります。
| 項目 | 意味 | 確認すること |
|---|---|---|
| 価格差 | AskとBidの価格そのものの差 | 例として、現在価格の小数単位で確認する |
| points | 価格差をpoint単位に換算した値 | EAのinputやログ単位と一致させる |
| point | 銘柄の最小価格単位 | SYMBOL_POINTで確認する |
| digits | 価格表示の小数桁数 | SYMBOL_DIGITSで確認する |
GOLD / XAUUSDでは、pointやdigitsが口座環境によって異なる場合があります。スプレッド上限の入力値が何単位なのか、ログで明確に分かるようにしてください。
GOLD / XAUUSDでスプレッドフィルターを使う時の注意点
GOLD / XAUUSDでは、スプレッドが時間帯や相場状況によって変わる場合があります。
そのため、スプレッドフィルターを使う場合は、現在スプレッドだけでなく、銘柄仕様、時間帯、EA方式も合わせて確認します。
| 確認項目 | 確認する理由 |
|---|---|
| symbol | XAUUSD、GOLD、suffix付き銘柄を区別するため |
| point / digits | スプレッドpoints、SL / TP、価格距離の解釈に関係するため |
| 現在スプレッド | 発注見送り条件に直接関係するため |
| 時間帯 | 早朝、取引開始直後、指標前後などで変動しやすいため |
| EA方式 | スキャル、ナンピン、グリッド、コピーEAで影響が異なるため |
スプレッドフィルターは、GOLD / XAUUSDで勝率を保証する仕組みではありません。発注条件を整理し、検証時の見送り理由を明確にするための仕組みです。
スプレッド上限をどこに適用するか
スプレッドフィルターを実装する時は、どの処理にスプレッド上限を適用するかを決める必要があります。
新規エントリーだけに適用するのか、ナンピン追加にも適用するのか、コピーEAの発注にも適用するのかで、EAの挙動が変わります。
| 適用対象 | 確認すること |
|---|---|
| 新規エントリー | 初回注文をスプレッドで見送るか |
| ナンピン追加 | 追加注文にもスプレッド条件を適用するか |
| グリッド注文 | 新規グリッド配置や追加注文を止めるか |
| コピーEA | コピー先発注時にもスプレッド条件を見るか |
| 決済処理 | 決済までスプレッドで止めるか、決済は継続するか |
実務上は、新規エントリーや追加注文にはスプレッド条件を使い、決済処理は別責務として扱う設計もあります。ただし、最終的にはEA仕様として明確に決める必要があります。
決済までスプレッドで止めるかを確認する
スプレッドフィルターを設計する時に注意したいのが、決済処理への影響です。
新規エントリーを止める目的でスプレッドフィルターを入れたつもりでも、実装によっては決済、トレーリング、建値移動、バスケット決済まで止まってしまう場合があります。
| 処理 | スプレッドフィルター適用の考え方 |
|---|---|
| 新規エントリー | スプレッド超過時に見送る対象になりやすい |
| 追加注文 | EA仕様により適用するか決める |
| SL / TP決済 | リスク管理上、別責務として扱うことが多い |
| トレーリング | 新規発注とは分けて確認する |
| バスケット決済 | 複数ポジション管理の決済条件として別に確認する |
スプレッドフィルターは、どの処理を止めるためのものかを明確にし、ログでも対象を分けて確認できるようにします。
ENTRY_SKIPとSPREAD_BLOCKのログ設計
スプレッドフィルターを実装する場合は、見送り理由をログに残すことが重要です。
EAが注文しなかった時に、シグナル不成立なのか、スプレッド超過なのか、ロット不正なのか、証拠金不足なのかを分けて確認できるようにします。
| ログ項目 | 意味 | 含めたい値 |
|---|---|---|
| SPREAD_CHECK | スプレッド確認を行った | current_spread、max_spread、symbol |
| SPREAD_OK | スプレッド条件を通過した | current_spread、max_spread |
| SPREAD_BLOCK | スプレッド超過で発注を見送った | current_spread、max_spread、signal方向 |
| ENTRY_SKIP | 新規エントリーを見送った | 見送り理由、symbol、timeframe |
| ORDER_PRECHECK_OK | 発注前チェックを通過した | spread、lot、margin、trade allowed |
ログには、現在スプレッドだけでなく、スプレッド上限、対象symbol、売買方向、見送り理由を残しておくと確認しやすくなります。
バックテストで確認すること
スプレッドフィルターを入れたEAをバックテストする場合は、スプレッド条件によって取引回数や見送り回数がどう変わるかを確認します。
| 確認項目 | 確認する内容 |
|---|---|
| スプレッド条件 | 固定スプレッドか、テスター上の条件か |
| 取引回数 | スプレッド上限変更で取引回数が変わるか |
| ENTRY_SKIP回数 | 見送りがどの程度発生したか |
| SPREAD_BLOCK回数 | スプレッド超過による見送り回数 |
| ORDER_FAIL | 発注要求後の失敗が残っていないか |
| setファイル | スプレッド上限を含む入力条件を保存したか |
バックテスト結果は、将来の結果を保証するものではありません。スプレッド条件がEAの挙動にどのように影響するかを確認するための材料として扱ってください。
デモ環境で確認すること
バックテストで問題がなくても、デモ環境ではリアルタイムのスプレッド変動があります。
そのため、デモ環境では、現在スプレッド、SPREAD_BLOCK、ENTRY_SKIP、ORDER_SENT、ORDER_FAILを実際の時間帯で確認します。
| 確認項目 | 確認する内容 |
|---|---|
| 現在スプレッド | 実際の環境でどの程度のスプレッドが出ているか |
| 時間帯 | 早朝、取引開始直後、指標前後など |
| ENTRY_SKIP | スプレッド以外の見送り理由が混ざっていないか |
| SPREAD_BLOCK | スプレッド上限超過で止まったか |
| ORDER_SENT | スプレッド条件通過後に注文要求へ進んだか |
| ORDER_FAIL | 発注要求後に価格変動や約定条件で失敗していないか |
デモ環境では、チャート上の見た目だけでなく、Expertsログでスプレッド判定の結果を確認してください。
スプレッドフィルターと通知・外部連携
EAにDiscord通知や外部連携がある場合、スプレッドブロックを通知対象にするかどうかも検討します。
ただし、毎回のSPREAD_BLOCKをすべて通知すると、通知過多になる場合があります。状態変化時だけ通知する、一定間隔で要約する、バックテスト時は通知しないなど、運用に合わせて設計します。
| 通知対象 | 確認すること |
|---|---|
| SPREAD_BLOCK通知 | 毎回通知するか、要約するか |
| 状態変化通知 | SPREAD_OKからBLOCKへ変わった時だけ通知するか |
| 外部制御 | 外部シート停止とスプレッドブロックを分けて通知するか |
| 通知ログ | NOTIFY_SEND、NOTIFY_FAILを確認する |
通知は売買判断を促すためではなく、EAの状態確認やログ確認を補助するために使います。
スプレッドフィルター実装の実務チェック表
| 確認 | チェック項目 |
|---|---|
| □ | シグナル成立と発注許可を分けて設計した |
| □ | 現在スプレッドの取得方法を決めた |
| □ | SYMBOL_SPREADを使うのか、Ask – Bidから計算するのか整理した |
| □ | points表記と価格差を混同しないようにした |
| □ | GOLD / XAUUSDのpoint、digitsを確認した |
| □ | スプレッド上限を新規エントリー、追加注文、コピーEAのどこに適用するか決めた |
| □ | 決済処理までスプレッドフィルターで止めないか確認した |
| □ | SPREAD_CHECK、SPREAD_OK、SPREAD_BLOCKのログを分けた |
| □ | ENTRY_SKIPの理由にスプレッド超過を含めた |
| □ | ORDER_SENTとORDER_FAILをスプレッド判定後の処理として分けた |
| □ | バックテストでSPREAD_BLOCK回数と取引回数を確認した |
| □ | デモ環境でリアルタイムのスプレッド変動を確認した |
スプレッドフィルターは発注前確認の一部として扱う
MQL5 EAのスプレッドフィルターは、単独でEAの成績を保証する仕組みではありません。
重要なのは、エントリーシグナルが成立した時に、現在のスプレッドが発注条件に合っているかを確認し、合わない場合は明確な理由をログに残して見送ることです。
特にGOLD / XAUUSD対応EAでは、point、digits、現在スプレッド、スプレッド上限、ENTRY_SKIP、SPREAD_BLOCKを分けて確認できるようにしておくと、バックテストやデモ環境で原因を追いやすくなります。
スプレッドフィルターは、売買判断ではなく、EAの発注前確認、ログ追跡性、検証再現性を高めるための実務設計です。
GOLD / XAUUSD対応EAで特に注意すること
GOLD / XAUUSD対応EAでは、通貨ペアと同じ感覚でロット、point、digits、tick value、contract sizeを扱うと誤りが起きやすくなります。ブローカーによって銘柄名、桁数、contract size、最小ロット、スプレッド、StopLevelが異なる場合があります。
たとえば、XAUUSD、GOLD、GOLDmicro、XAUUSDmのように銘柄名が異なる場合があります。EA側で固定銘柄名を前提にしていると、チャートへ適用できても、実際の発注や銘柄仕様取得で問題が出る可能性があります。
GOLD / XAUUSDではスプレッドが広がりやすい時間帯や、価格変動が大きい局面もあります。短期EA、スキャルピングEA、ナンピンEA、グリッドEAでは、ロット、証拠金、スプレッド、StopLevel、最大ポジション数、証拠金維持率を特に慎重に確認してください。
| 確認項目 | GOLD / XAUUSDでの注意点 | 確認方法 |
|---|---|---|
| 銘柄名 | ブローカーにより末尾記号や名称が異なる場合があります。 | チャート銘柄、Market Watch、_Symbolを確認します。 |
| digits / point | 価格桁の感覚が通貨ペアと異なる場合があります。 | SymbolInfoInteger / SymbolInfoDoubleで確認します。 |
| tick value | 損益感覚が通貨ペアと異なる場合があります。 | SYMBOL_TRADE_TICK_VALUEを確認します。 |
| contract size | 1ロットあたりの契約サイズが重要です。 | SYMBOL_TRADE_CONTRACT_SIZEを確認します。 |
| spread | 時間帯や相場状況で広がる場合があります。 | Bid / Ask差をログに出します。 |
| stops level | SL/TP距離不足で注文失敗する場合があります。 | SYMBOL_TRADE_STOPS_LEVELを確認します。 |
| margin | 必要証拠金が大きくなる場合があります。 | OrderCalcMarginやOrderCheckで確認します。 |
GOLD・XAUUSDの銘柄仕様とログを照合する
なぜGOLD / XAUUSDでは銘柄仕様確認が重要なのか
GOLD / XAUUSDは、MT5上の銘柄名や取引条件が口座環境によって異なる場合があります。
同じGOLDやXAUUSDであっても、digits、point、tick value、contract size、最小ロット、lot_step、スプレッド条件が同じとは限りません。
EAやインジケーター側でこれらの前提を確認しないまま実装すると、次のような問題が起きることがあります。
- SL / TPの距離が想定と違う
- トレーリング幅やナンピン幅の価格距離が合わない
- ロット計算後のvolumeが発注可能単位に合わない
- バックテストとデモ環境でログの見え方が違う
- スプレッド上限の判定が想定と違う
- 損益計算やリスク計算の前提を誤解する
そのため、GOLD / XAUUSD対応EAでは、OnInit時やSELF_CHECK時に銘柄仕様をログへ出し、現在の環境を確認できるようにしておくと検証しやすくなります。
MQL5で銘柄仕様を確認する主な関数
MQL5では、銘柄仕様を確認する時に、主にSymbolInfoDouble、SymbolInfoInteger、SymbolInfoStringを使います。
| 関数 | 主な用途 | 確認例 |
|---|---|---|
| SymbolInfoDouble | 小数値の銘柄仕様を取得する | point、tick size、tick value、contract size、volume min、volume step |
| SymbolInfoInteger | 整数値や状態値の銘柄仕様を取得する | digits、spread、trade mode、calc mode、spread float |
| SymbolInfoString | 文字列の銘柄情報を取得する | symbol name、description、profit currency、margin currency |
EA開発では、これらの値を必要な場所で毎回ばらばらに取得するよりも、起動時にSYMBOL_SPECとしてまとめてログへ出し、必要な値を構造化して保持する方が確認しやすくなります。
pointとdigitsを確認する
pointとdigitsは、GOLD / XAUUSD対応EAで特に重要な確認項目です。
digitsは価格表示の小数桁数、pointは価格の最小単位です。SL / TP、トレーリング、ナンピン幅、グリッド幅、スプレッド判定などで使う距離単位に関係します。
| 項目 | MQL5で確認する代表例 | 主な用途 |
|---|---|---|
| digits | SYMBOL_DIGITS | 価格表示、小数桁、NormalizeDouble、ログ表示 |
| point | SYMBOL_POINT | 価格距離、points換算、SL / TP、スプレッド判定 |
たとえば、EAの入力で「SLを300 point」としている場合、現在の銘柄で1 pointがどの価格差に相当するかを確認しないと、意図した距離とずれることがあります。
GOLD / XAUUSDのpointやdigitsは、ブローカーや口座タイプによって異なる場合があるため、固定値として決め打ちせず、現在のsymbolから取得して確認する方が安全です。
tick sizeとtick valueを確認する
tick sizeとtick valueは、価格変化と損益計算の確認に関係します。
pointとtick sizeは似て見える場合がありますが、必ず同じ意味になるとは限りません。EAで厳密な損益計算や価格単位の確認を行う場合は、tick sizeとtick valueも確認しておくと整理しやすくなります。
| 項目 | MQL5で確認する代表例 | 主な用途 |
|---|---|---|
| tick size | SYMBOL_TRADE_TICK_SIZE | 最小価格変動単位の確認 |
| tick value | SYMBOL_TRADE_TICK_VALUE | 1 tickあたりの価値、損益概算 |
| tick value profit | SYMBOL_TRADE_TICK_VALUE_PROFIT | 利益方向のtick value確認 |
| tick value loss | SYMBOL_TRADE_TICK_VALUE_LOSS | 損失方向のtick value確認 |
tick valueは、口座通貨、銘柄仕様、計算方式によって見え方が変わる場合があります。リスク計算や損益計算をEA内で行う場合は、OrderCalcProfitなどで実際の価格差に対する損益確認を行う設計も検討します。
contract sizeを確認する
contract sizeは、1ロットあたりの契約サイズを示す銘柄仕様です。
GOLD / XAUUSDでは、ロットと損益感覚を確認する時にcontract sizeが重要になります。
| 項目 | MQL5で確認する代表例 | 主な用途 |
|---|---|---|
| contract size | SYMBOL_TRADE_CONTRACT_SIZE | 1ロットあたりの契約サイズ確認 |
| calc mode | SYMBOL_TRADE_CALC_MODE | 証拠金や損益計算方式の確認 |
| profit currency | SYMBOL_CURRENCY_PROFIT | 損益通貨の確認 |
| margin currency | SYMBOL_CURRENCY_MARGIN | 証拠金通貨の確認 |
contract sizeを確認せずに、通貨ペアと同じ感覚でロットや損益を扱うと、検証結果の解釈を誤る場合があります。
EA側では、ロット計算、OrderCalcProfit、OrderCalcMargin、ログ表示を組み合わせて、現在の銘柄仕様に合った確認ができるようにしておくと安全です。
最小ロット・最大ロット・volume stepを確認する
EAで注文volumeを計算する場合、計算結果がそのまま発注可能とは限りません。
MT5の各銘柄には、最小ロット、最大ロット、volume stepがあります。EA側では、計算したvolumeをこれらの範囲に合わせて補正し、補正後の値をログで確認できるようにしておくことが重要です。
| 項目 | MQL5で確認する代表例 | 確認する内容 |
|---|---|---|
| volume min | SYMBOL_VOLUME_MIN | 最小発注volume |
| volume max | SYMBOL_VOLUME_MAX | 最大発注volume |
| volume step | SYMBOL_VOLUME_STEP | volumeの刻み幅 |
| volume limit | SYMBOL_VOLUME_LIMIT | 銘柄単位の建玉・注文量制限 |
GOLD / XAUUSDでナンピンEA、グリッドEA、コピーEAを作る場合、volume stepの確認は特に重要です。
コピー元では0.10ロットでも、コピー先では最小ロットやvolume stepの違いにより、丸めが必要になる場合があります。その場合は、requested volumeとnormalized volumeを分けてログに残すと確認しやすくなります。
スプレッドと取引モードを確認する
EAがエントリーしない場合、シグナル不成立ではなく、スプレッド超過や取引モードによる見送りが原因になることがあります。
そのため、GOLD / XAUUSD対応EAでは、現在スプレッド、変動スプレッドかどうか、取引可能状態、取引モードをログで確認できるようにしておくと便利です。
| 項目 | MQL5で確認する代表例 | 主な用途 |
|---|---|---|
| spread | SYMBOL_SPREAD | 現在のスプレッド確認 |
| spread float | SYMBOL_SPREAD_FLOAT | 変動スプレッドかどうかの確認 |
| trade mode | SYMBOL_TRADE_MODE | 取引可能状態の確認 |
| order mode | SYMBOL_ORDER_MODE | 利用可能な注文種別の確認 |
| filling mode | SYMBOL_FILLING_MODE | 約定方式の確認 |
発注前チェックでは、シグナル成立と発注可能条件を混同しないことが重要です。
ログ上も、SIGNAL成立、SPREAD_BLOCK、TRADE_MODE_BLOCK、ORDER_FAILのように理由を分けておくと、バックテストやデモ検証で原因を追いやすくなります。
GOLD / XAUUSD対応EAで起動時に確認したいログ
GOLD / XAUUSD対応EAでは、起動時にSYMBOL_SPECログを出しておくと、検証やサポート時の確認がしやすくなります。
ログは長すぎる必要はありませんが、銘柄仕様の重要項目を1回で確認できる形にしておくと便利です。
| ログ項目 | 確認する内容 |
|---|---|
| symbol | EAが参照している銘柄名 |
| description | 銘柄説明名 |
| digits | 価格表示の小数桁数 |
| point | 価格の最小単位 |
| tick size | 最小価格変動単位 |
| tick value | 1 tickあたりの価値 |
| contract size | 1ロットあたりの契約サイズ |
| volume min / max / step | 発注可能volumeの範囲と刻み |
| spread | 現在スプレッド |
| trade mode | 取引可能状態 |
| calc mode | 証拠金・損益計算方式 |
このようなログがあると、EAが動かない時に、ロジック不成立なのか、銘柄仕様の前提違いなのか、スプレッドや取引状態による見送りなのかを原因を確認しやすくなります。
バックテストとデモ環境で同じ項目を確認する
MQL5で銘柄仕様を確認する時は、バックテスト環境とデモ環境で同じ項目を確認してください。
Strategy Testerでは、ヒストリーデータ、スプレッド設定、テストモデル、銘柄仕様の見え方が実環境と異なる場合があります。
| 確認環境 | 確認する内容 |
|---|---|
| バックテスト | テスト期間、スプレッド条件、銘柄仕様、EAバージョン、setファイル |
| デモ環境 | 現在スプレッド、取引モード、発注可否、ログ、約定結果 |
| 実運用前確認 | デモで確認した仕様と同じ前提で動くか、ログで確認する |
バックテスト結果は将来の結果を保証するものではありません。MQL5で取得した銘柄仕様とログを使い、検証条件を記録するための材料として扱ってください。
よくある確認ミス
GOLD / XAUUSD対応EAやインジケーターの開発では、銘柄仕様の確認漏れにより、動作確認が難しくなることがあります。
| 確認ミス | 起きやすい問題 |
|---|---|
| pointを固定値で決め打ちする | SL / TP、トレーリング、ナンピン幅の距離感がずれる |
| digitsを確認しない | 価格表示やNormalizeDouble、ログ表示がずれる |
| volume stepを確認しない | 計算volumeが発注可能単位に合わない |
| tick valueだけで損益を断定する | 口座通貨や計算方式の違いを見落とす |
| spreadとsignalを混同する | シグナル成立なのに発注しない理由を誤解する |
| バックテスト条件を記録しない | 同じ結果を再現しにくくなる |
MQL5銘柄仕様確認の実務チェック表
| 確認 | チェック項目 |
|---|---|
| □ | EAが参照しているsymbol名を確認した |
| □ | GOLD / XAUUSDのsuffixやdescriptionを確認した |
| □ | SYMBOL_DIGITSでdigitsを確認した |
| □ | SYMBOL_POINTでpointを確認した |
| □ | SYMBOL_TRADE_TICK_SIZEでtick sizeを確認した |
| □ | SYMBOL_TRADE_TICK_VALUEでtick valueを確認した |
| □ | SYMBOL_TRADE_CONTRACT_SIZEでcontract sizeを確認した |
| □ | SYMBOL_VOLUME_MIN、SYMBOL_VOLUME_MAX、SYMBOL_VOLUME_STEPを確認した |
| □ | SYMBOL_SPREADとSYMBOL_SPREAD_FLOATを確認した |
| □ | SYMBOL_TRADE_MODE、SYMBOL_ORDER_MODE、SYMBOL_FILLING_MODEを確認した |
| □ | SYMBOL_TRADE_CALC_MODEを確認した |
| □ | SYMBOL_CURRENCY_PROFITとSYMBOL_CURRENCY_MARGINを確認した |
| □ | SYMBOL_SPECログを起動時に確認できるようにした |
| □ | requested volumeとnormalized volumeを分けてログ化した |
| □ | signal成立とspread block、trade mode block、order failを分けて確認できるようにした |
銘柄仕様を確認してからEAロジックを検証する
GOLD / XAUUSD対応EAでは、エントリーロジックや決済ロジックだけでなく、銘柄仕様の確認が重要です。
point、digits、tick value、tick size、contract size、volume step、spread、calc modeを確認しておくことで、SL / TP、トレーリング、ナンピン幅、ロット計算、バックテスト結果、ログ確認の前提をそろえやすくなります。
EAが動かない、発注しない、ロットが合わない、バックテスト結果を比較しにくい場合は、まずMQL5で取得している銘柄仕様とログを確認してください。
銘柄仕様の確認は、売買判断ではなく、EAやインジケーターを安全に検証し、再現性のある状態で確認するための開発前提です。
複数銘柄EAでの銘柄仕様確認
複数銘柄EAでは、銘柄ごとに仕様を取得して確認する必要があります。1つの銘柄で取得したvolume step、tick value、stops levelを別銘柄へ使い回すと、注文失敗や損益計算の誤りにつながります。
複数銘柄EAでは、対象銘柄ごとにSymbolInfoを取得し、ログに出す設計が安全です。銘柄ごとに取引可否、必要証拠金、最小ロット、スプレッド、データ取得状態も確認してください。
void PrintSpecsForSymbols(string &symbols[])
{
for(int i = 0; i < ArraySize(symbols); i++)
{
string symbol = symbols[i];
if(!SymbolSelect(symbol, true))
{
PrintFormat("SYMBOL_SELECT_FAIL symbol=%s last_error=%d", symbol, GetLastError());
continue;
}
PrintSymbolSpec(symbol);
}
}複数銘柄を扱う場合、Market Watchに銘柄が表示されていないと、情報取得やデータ取得で失敗することがあります。SymbolSelectで対象銘柄を選択できるか確認し、失敗時はログに残します。
バックテストでロット・証拠金・銘柄仕様を確認する
バックテストでは、EAの損益結果だけでなく、ロット、証拠金、銘柄仕様、SL/TP距離、スプレッド、StopLevel、OrderCheck結果を確認します。バックテストで注文できない場合、ロジックではなく、発注前チェックや銘柄仕様が原因のことがあります。
検証条件として、銘柄、時間足、期間、スプレッド、モデル、初期証拠金、レバレッジ、setファイルを保存してください。特にロット自動計算や証拠金チェックを行うEAでは、初期証拠金や口座条件によって結果が変わる可能性があります。
- EA名とバージョンを記録する
- 使用したsetファイルを保存する
- 銘柄、時間足、期間を記録する
- 初期証拠金、レバレッジ、スプレッド条件を記録する
- volume min / max / stepをログで確認する
- tick size / tick value / contract sizeを確認する
- stops level / freeze levelを確認する
- OrderCalcMarginまたはOrderCheckの結果を確認する
- 発注前チェックで止まった理由を確認する
- バックテスト結果を将来成績保証として扱わない
ログ設計で確認しやすくする
ロット・証拠金・銘柄仕様の確認では、ログ設計が重要です。注文が失敗した時に、どの条件で止まったのかを追えるようにしてください。単に「ORDER NG」と出すだけでは、ロット不正なのか、証拠金不足なのか、stops level不足なのか分かりません。
ログ名は、SYMBOL_SPEC、LOT_CHECK、STOPS_CHECK、MARGIN_CHECK、ORDER_CHECK、ORDER_SENDのように分けると検索しやすくなります。検証時だけ詳細ログを出し、通常運用時は必要な異常ログだけにする設計も有効です。
| ログ名 | 残す内容 | 目的 |
|---|---|---|
SYMBOL_SPEC | vol min/max/step、point、digits、tick value、stops level。 | 銘柄仕様を確認します。 |
LOT_CHECK | raw lot、normalized lot、min、max、step。 | ロット補正を確認します。 |
SPREAD_CHECK | Bid、Ask、spread、max spread。 | スプレッドによる発注停止を確認します。 |
STOPS_CHECK | SL/TP距離、stops level、freeze level。 | invalid stops対策に使います。 |
MARGIN_CHECK | 必要証拠金、余剰証拠金、ロット。 | 証拠金不足を確認します。 |
ORDER_CHECK | OrderCheckのretcode、margin、comment。 | 注文前チェック結果を確認します。 |
ORDER_SEND | OrderSend / CTradeのretcode、order、deal。 | 実際の注文結果を確認します。 |
よくある不具合と確認ポイント
ロット・証拠金・銘柄仕様に関する不具合は、注文できない原因として非常に多い領域です。シグナル条件ばかりを見直しても、銘柄仕様に合わない注文を送っていれば改善しません。
EAが注文しない時は、まずシグナル、フィルター、ロット補正、証拠金、stops level、OrderCheck、OrderSendの順に確認すると、原因を整理しやすくなります。
| 症状 | 確認する場所 | 主な原因候補 |
|---|---|---|
| invalid volume が出る | SYMBOL_VOLUME_MIN / MAX / STEP。 | ロットが最小未満、最大超過、step不一致。 |
| not enough money が出る | OrderCalcMargin、AccountInfoDouble、OrderCheck。 | 証拠金不足、ロット過大、口座条件差。 |
| invalid stops が出る | stops level、freeze level、SL/TP距離。 | SL/TPが近すぎる、価格方向が逆、point換算ミス。 |
| USDJPYでは動くがXAUUSDで失敗する | digits、point、tick value、contract size。 | 銘柄仕様の違いを固定値で処理している。 |
| バックテストと実運用で注文数が違う | スプレッド、取引時間、証拠金、銘柄仕様。 | 検証条件と実環境条件の差。 |
| トレーリングが失敗する | freeze level、StopLevel、現在価格。 | 変更価格が現在価格に近すぎる。 |
| ロット自動計算が想定と違う | tick value、contract size、口座通貨。 | 損益換算や銘柄差を考慮していない。 |
開発依頼前に整理する情報
ロット・証拠金・銘柄仕様に関する不具合を相談する場合は、対象EA、setファイル、銘柄、時間足、注文ロット、エラーログ、OrderCheckログ、OrderSend / CTradeログ、バックテスト条件を整理してください。
「注文できない」だけでは、ロジックが成立していないのか、ロットが不正なのか、証拠金が不足しているのか、SL/TP距離が近すぎるのか、取引不可なのかを判断できません。発注前チェックのログがあると、確認が進めやすくなります。
| 整理する情報 | 内容 | 理由 |
|---|---|---|
| EA名・バージョン | 対象ファイル名、更新日、バージョン。 | 確認対象を特定するため。 |
| setファイル | input設定一式。 | 同じ条件を再現するため。 |
| 銘柄 | USDJPY、XAUUSD、GOLDなど。 | 銘柄仕様が異なるため。 |
| ロット | 要求ロット、補正後ロット。 | volume step不一致を確認するため。 |
| SL/TP | 指定価格、距離、stops level。 | invalid stopsの確認に必要です。 |
| 証拠金 | 必要証拠金、余剰証拠金、初期証拠金。 | 証拠金不足を確認するため。 |
| Expertsログ | 発注前チェック、OrderCheck、OrderSendログ。 | EA側の判断を確認するため。 |
| Journalログ | MT5側の取引・環境ログ。 | プラットフォーム側の状態を確認するため。 |
| 送らない情報 | 口座番号、パスワード、APIキー、Webhook URL。 | 機密情報を保護するため。 |
ロット・証拠金・銘柄仕様の実務チェック表
- SYMBOL_VOLUME_MINを確認した
- SYMBOL_VOLUME_MAXを確認した
- SYMBOL_VOLUME_STEPを確認した
- 要求ロットをvolume stepに合わせて補正している
- 最小ロット未満の場合の扱いを仕様化している
- SYMBOL_POINTとSYMBOL_DIGITSを確認している
- tick size、tick value、contract sizeを確認している
- stops levelとfreeze levelを確認している
- SL/TP距離が銘柄仕様を満たしている
- OrderCalcMarginで必要証拠金を確認している
- OrderCheckまたは発注前チェックの結果をログに出している
- GOLD / XAUUSDなど銘柄差が大きい環境で固定値依存していない
- バックテスト条件とsetファイルを保存している
- 口座情報や認証情報をログへ出していない
よくある質問
MQL5でロット不正が出る時は何を確認しますか?
SYMBOL_VOLUME_MIN、SYMBOL_VOLUME_MAX、SYMBOL_VOLUME_STEPを確認します。EA側で計算したロットが最小ロット以上、最大ロット以下、volume stepに一致しているかを確認してください。
OrderCalcMarginは何のために使いますか?
OrderCalcMarginは、指定した注文条件で必要証拠金を計算するために使います。発注前に必要証拠金と余剰証拠金を比較することで、証拠金不足による注文失敗を原因を確認しやすくなります。
stops levelとは何ですか?
stops levelは、SL/TPや予約注文を現在価格からどの程度離す必要があるかに関係する値です。SL/TPが近すぎる場合、invalid stops の原因になることがあります。
freeze levelとは何ですか?
freeze levelは、現在価格に近い注文やポジションの変更が制限される距離に関係します。トレーリングストップやPositionModifyが失敗する時は、freeze levelの影響を確認してください。
pointとpipsは同じですか?
必ず同じとは限りません。MQL5内部ではpointとdigitsを使って価格単位を扱う場面が多くあります。EAのinputでpipsと表記していても、内部ではpoint換算が必要な場合があります。
GOLD / XAUUSDでロットやSL/TPが合わない時は何を見ますか?
銘柄名、digits、point、tick value、contract size、volume step、stops level、freeze level、スプレッド、必要証拠金を確認します。通貨ペアと同じ固定値で扱うと失敗しやすくなります。
バックテストで動くのに実運用で注文できない場合は何を確認しますか?
スプレッド、取引時間、証拠金、銘柄仕様、volume step、stops level、実口座の銘柄名、OrderCheck、OrderSend / CTradeのretcodeを確認します。バックテスト条件と実環境条件が一致しているかも確認してください。
関連する確認ページ
確認したい内容に応じて、次のページを参照してください。本文中ですでに案内したページは、ここでは重ねて掲載していません。
あわせて確認したいページ
今回の確認内容に関連する補足ページです。必要な項目だけ確認してください。
| 確認目的 | 関連ページ |
|---|---|
| 読後の任意の手続き・一覧入口。本文解決や購入の必須前提にしない | MT4/MT5 技術講座 |
| 「MQL5 ロット 証拠金 銘柄仕様」の読後に「MQL5でGOLD / XAUUSDの銘柄仕様を確認する方法」を補足確認 | MQL5でGOLD / XAUUSDの銘柄仕様を確認する方法 |
| 「MQL5 ロット 証拠金 銘柄仕様」の読後に「MQL5でスプレッドフィルターを実装する考え方」を補足確認 | MQL5でスプレッドフィルターを実装する考え方 |
| 「MQL5 ロット 証拠金 銘柄仕様」の読後に「MQL5 SymbolInfoDouble / SymbolInfoIntegerの使い方」を補足確認 | MQL5 SymbolInfoDouble / SymbolInfoIntegerの使い方 |
| 「MQL5 ロット 証拠金 銘柄仕様」の読後に「MQL5 OrderCalcMargin / OrderCalcProfitの使い方」を補足確認 | MQL5 OrderCalcMargin / OrderCalcProfitの使い方 |
| 「MQL5 ロット 証拠金 銘柄仕様」の読後に「MQL5 OrderCheckの使い方」を補足確認 | MQL5 OrderCheckの使い方 |
まとめ
MQL5でEAの注文処理を作る時は、ロット、証拠金、銘柄仕様を発注前に確認することが重要です。シグナルが成立していても、volume step、最小ロット、最大ロット、stops level、freeze level、証拠金、取引可否が合っていなければ注文は失敗します。
SymbolInfoDoubleやSymbolInfoIntegerを使い、volume min / max / step、point、digits、tick size、tick value、contract size、stops level、freeze levelを確認してください。OrderCalcMarginやOrderCheckを組み合わせると、必要証拠金や注文前チェックの結果をログで追いやすくなります。
特にGOLD / XAUUSD、指数、仮想通貨CFD、複数銘柄EAでは、銘柄ごとの仕様差を固定値で処理しないことが重要です。バックテストや不具合調査では、setファイル、検証条件、銘柄仕様ログ、OrderCheckログ、OrderSend / CTradeログを保存し、注文できない理由を段階ごとに確認してください。
お問い合わせはEAFC公式LINEへ
EAFCサイト内の記事、商品、導入前確認、設定確認、ログ確認、開発依頼前のご相談など、各種お問い合わせはEAFC公式LINEより受け付けています。
※投資助言、売買指示、利益保証、推奨ロット、推奨銘柄の案内は行っておりません。
口座番号、認証情報、Webhook URL、GAS URL、APIキーなどの機密情報は送信しないでください。
利用条件・相談窓口
| 確認内容 | 案内ページ |
|---|---|
| MT5 開発依頼・作成代行|EA・インジケーター新規開発・MT4/MT5既存改修 | 開発・改修の相談ページ |
| EA・MT5・MQL5 技術辞典|用語・関数・設定を目的別に探す | EA・MT5・MQL5 技術辞典|用語・関数・設定を目的別に探す |
