MQL5コードの環境互換性ガイド¶
このページについて
当サイトで配布しているMQL5コード(インジケータ・EA)を、様々なFX業者環境で問題なく動作させるための注意点と対策をまとめています。
よくある環境差異と対策¶
1. シンボルサフィックス問題¶
FX業者によって、通貨ペア名にサフィックス(接尾辞)が付く場合があります。
| 業者 | USDJPY の表記例 |
|---|---|
| A社 | USDJPY |
| B社 | USDJPY.i |
| C社 | USDJPYm |
| D社 | USDJPY# |
| E社 | USDJPYpro |
影響を受けるコード:
- マルチ通貨インジケータ(Ku-Chart等)
- 複数通貨ペアにアクセスするEA
対策:
チャートに表示されているシンボル名からサフィックスを自動検出する関数を使用:
C++
string GetSymbolSuffix()
{
string symbol = _Symbol;
string stdPairs[] = {"EURUSD", "GBPUSD", "USDJPY", "AUDUSD"};
for(int i = 0; i < ArraySize(stdPairs); i++)
{
int pos = StringFind(symbol, stdPairs[i]);
if(pos >= 0)
{
return StringSubstr(symbol, pos + StringLen(stdPairs[i]));
}
}
return "";
}
// 使用例
string eurusd = "EURUSD" + GetSymbolSuffix(); // → "EURUSD.i" など
当サイトのコードでの対応状況
16_KuChart_Simple.mq5— ✅ 対応済み(DetectSuffix関数)15_MultiSymbol_Load.mq5— ✅ 対応済み(v1.10でサフィックス自動検出追加)
2. 価格桁数の違い(3桁/5桁ブローカー)¶
業者によって価格の桁数が異なります。
| タイプ | USDJPYの例 | EURUSDの例 | _Digits |
|---|---|---|---|
| 3桁/5桁業者 | 156.123 | 1.12345 | 3 / 5 |
| 2桁/4桁業者 | 156.12 | 1.1234 | 2 / 4 |
影響を受けるコード:
- Pips → 価格変換ロジック
- TP/SL計算
対策:
C++
double PipsToPrice(double pips)
{
double point = SymbolInfoDouble(_Symbol, SYMBOL_POINT);
int digits = (int)SymbolInfoInteger(_Symbol, SYMBOL_DIGITS);
// 3桁/5桁ブローカー対応
if(digits == 3 || digits == 5)
return pips * point * 10.0;
else
return pips * point;
}
当サイトのコードでの対応状況
Ichimoku_Sanyaku_EA_*.mq5— ✅ 対応済み(PipsToPrice関数で⅗桁対応)
3. サーバータイムゾーンの違い¶
業者によってMT5サーバーのタイムゾーンが異なります。
| 業者 | GMTオフセット | 特徴 |
|---|---|---|
| A社 | GMT+0 | イギリス時間 |
| B社 | GMT+2 | 東欧時間 |
| C社 | GMT+3 | モスクワ時間 |
| D社 | GMT+9 | 日本時間 |
影響を受けるコード:
- 時間帯フィルター付きEA
- 日本時間表示インジケータ
対策:
JPN_Time_SubZero インジケータでは、ユーザーがサーバーのGMTオフセットをパラメータで指定できるようになっています。
4. 注文タイプ(Filling Type)¶
業者によって対応している注文タイプが異なります。
| タイプ | 説明 |
|---|---|
ORDER_FILLING_FOK | 全量約定のみ受付 |
ORDER_FILLING_IOC | 部分約定可 |
ORDER_FILLING_RETURN | 残量をキャンセル |
対策:
当サイトのEAでは ORDER_FILLING_IOC を標準使用していますが、業者によっては変更が必要な場合があります。
共通ヘルパー関数ライブラリ¶
様々な環境で動作するための共通関数をまとめたファイルを提供しています。
含まれる関数:
| 関数 | 説明 |
|---|---|
GetSymbolSuffix() | サフィックスを自動検出 |
GetSymbolWithSuffix() | 標準シンボル名にサフィックスを付与 |
PipsToPrice() | Pips→価格変換(⅗桁対応) |
PriceToPips() | 価格→Pips変換 |
NormalizeLotSize() | ロットサイズを適正範囲に正規化 |
使用方法:
C++
#include "FXLab_Common.mqh"
void OnTick()
{
string eurusd = GetSymbolWithSuffix("EURUSD");
double slPrice = PipsToPrice(50); // 50pipsを価格に変換
}
トラブルシューティング¶
Q: マルチ通貨インジケータでデータが表示されない¶
原因: シンボル名が業者と一致していない可能性
対策: 1. 気配値ウィンドウで対象通貨ペアを表示させる 2. シンボル名にサフィックスが必要か確認
Q: EAでエントリーできない¶
原因: Filling Typeが業者と合っていない可能性
対策:
C++
// 以下のいずれかを試す
trade.SetTypeFilling(ORDER_FILLING_FOK);
trade.SetTypeFilling(ORDER_FILLING_IOC);
trade.SetTypeFilling(ORDER_FILLING_RETURN);
Q: TP/SLが設定できない¶
原因: 価格の正規化が不足している可能性
対策:
C++
double sl = NormalizeDouble(price - slDistance, _Digits);
double tp = NormalizeDouble(price + tpDistance, _Digits);