MQL5 口座情報・マーケット情報 完全ガイド|AccountInfo・SymbolInfo・証拠金計算

MQL5の口座情報関数・マーケット情報関数を完全解説。AccountInfoDouble・AccountInfoInteger・SymbolInfoDouble・SymbolInfoInteger・SymbolInfoString・MarketBookAdd・SymbolsTotal など、EA開発で必要な口座残高・証拠金・スプレッド・ティック値・取引時間の取得方法をコード付きで解説します。

目次

口座情報関数

口座の残高、証拠金、レバレッジなどの情報を取得する関数群です。EA開発ではロット計算やリスク管理に必須です。

AccountInfoDouble — 口座のdouble値

プロパティ説明使用例
ACCOUNT_BALANCE口座残高ロット計算のベース
ACCOUNT_EQUITY有効証拠金(残高+含み損益)リアルタイムのリスク管理
ACCOUNT_PROFIT現在の含み損益合計全ポジションの損益確認
ACCOUNT_MARGIN使用証拠金証拠金使用率の計算
ACCOUNT_MARGIN_FREE余剰証拠金新規注文の可否判定
ACCOUNT_MARGIN_LEVEL証拠金維持率(%)マージンコール判定
ACCOUNT_CREDITクレジットボーナス額の確認
ACCOUNT_COMMISSION_BLOCKEDブロックされた手数料手数料の事前計算
void PrintAccountInfo()
  {
   double balance    = AccountInfoDouble(ACCOUNT_BALANCE);
   double equity     = AccountInfoDouble(ACCOUNT_EQUITY);
   double profit     = AccountInfoDouble(ACCOUNT_PROFIT);
   double margin     = AccountInfoDouble(ACCOUNT_MARGIN);
   double marginFree = AccountInfoDouble(ACCOUNT_MARGIN_FREE);
   double marginLvl  = AccountInfoDouble(ACCOUNT_MARGIN_LEVEL);

   PrintFormat("残高: %.2f  有効証拠金: %.2f  含み損益: %.2f",
               balance, equity, profit);
   PrintFormat("使用証拠金: %.2f  余剰証拠金: %.2f  維持率: %.2f%%",
               margin, marginFree, marginLvl);

   // 証拠金使用率(独自計算)
   if(balance > 0)
     {
      double usageRate = margin / balance * 100;
      Print("証拠金使用率: ", usageRate, "%");
     }
  }

AccountInfoInteger — 口座のinteger値

プロパティ説明
ACCOUNT_LOGIN口座番号
ACCOUNT_LEVERAGEレバレッジ
ACCOUNT_TRADE_ALLOWED取引許可(true/false)
ACCOUNT_TRADE_EXPERTEA取引許可
ACCOUNT_TRADE_MODE口座タイプ(デモ/コンテスト/リアル)
ACCOUNT_LIMIT_ORDERS待機注文の最大数(0=無制限)
ACCOUNT_MARGIN_MODE証拠金計算モード
ACCOUNT_MARGIN_SO_MODEストップアウトモード(%/金額)
void CheckAccount()
  {
   long login    = AccountInfoInteger(ACCOUNT_LOGIN);
   long leverage = AccountInfoInteger(ACCOUNT_LEVERAGE);
   long mode     = AccountInfoInteger(ACCOUNT_TRADE_MODE);

   string modeStr;
   switch((ENUM_ACCOUNT_TRADE_MODE)mode)
     {
      case ACCOUNT_TRADE_MODE_DEMO:    modeStr = "デモ";     break;
      case ACCOUNT_TRADE_MODE_CONTEST: modeStr = "コンテスト"; break;
      case ACCOUNT_TRADE_MODE_REAL:    modeStr = "リアル";    break;
     }

   PrintFormat("口座: %d  レバレッジ: 1:%d  タイプ: %s", login, leverage, modeStr);

   // ヘッジング/ネッティングの確認
   long marginMode = AccountInfoInteger(ACCOUNT_MARGIN_MODE);
   if(marginMode == ACCOUNT_MARGIN_MODE_RETAIL_HEDGING)
      Print("ヘッジング口座");
   else
      Print("ネッティング口座");

   // 取引可能かチェック
   if(!AccountInfoInteger(ACCOUNT_TRADE_ALLOWED))
      Print("警告: この口座では取引が許可されていません");
   if(!AccountInfoInteger(ACCOUNT_TRADE_EXPERT))
      Print("警告: EA取引が許可されていません");
  }

AccountInfoString — 口座の文字列情報

void PrintAccountStrings()
  {
   string name     = AccountInfoString(ACCOUNT_NAME);      // 口座名義
   string server   = AccountInfoString(ACCOUNT_SERVER);    // サーバー名
   string currency = AccountInfoString(ACCOUNT_CURRENCY);  // 口座通貨
   string company  = AccountInfoString(ACCOUNT_COMPANY);   // ブローカー名

   PrintFormat("名義: %s  サーバー: %s", name, server);
   PrintFormat("通貨: %s  ブローカー: %s", currency, company);
  }

実践:証拠金チェックとリスク管理

// 新規注文前の証拠金チェック
bool CanOpenPosition(string symbol, double lot, ENUM_ORDER_TYPE type)
  {
   // 余剰証拠金を確認
   double marginFree = AccountInfoDouble(ACCOUNT_MARGIN_FREE);

   // 必要証拠金を計算
   double marginRequired;
   if(!OrderCalcMargin(type, symbol, lot, SymbolInfoDouble(symbol, SYMBOL_ASK), marginRequired))
     {
      Print("証拠金計算失敗");
      return false;
     }

   // 余剰証拠金の50%以上は使わない
   if(marginRequired > marginFree * 0.5)
     {
      PrintFormat("証拠金不足: 必要=%.2f  余剰=%.2f", marginRequired, marginFree);
      return false;
     }

   // 証拠金維持率が200%以下にならないか確認
   double currentMargin = AccountInfoDouble(ACCOUNT_MARGIN);
   double equity = AccountInfoDouble(ACCOUNT_EQUITY);

   double newMarginLevel = equity / (currentMargin + marginRequired) * 100;
   if(newMarginLevel < 200)
     {
      PrintFormat("証拠金維持率が低下します: 予測=%.1f%%", newMarginLevel);
      return false;
     }

   return true;
  }

// 注文前の利益計算
void CalcPotentialProfit(string symbol, double lot, int tpPoints)
  {
   double profit;
   if(OrderCalcProfit(ORDER_TYPE_BUY, symbol, lot,
                      SymbolInfoDouble(symbol, SYMBOL_ASK),
                      SymbolInfoDouble(symbol, SYMBOL_ASK) + tpPoints * SymbolInfoDouble(symbol, SYMBOL_POINT),
                      profit))
     {
      PrintFormat("予想利益: %.2f %s", profit, AccountInfoString(ACCOUNT_CURRENCY));
     }
  }

OrderCalcMargin()OrderCalcProfit()は実際に注文を出さずに証拠金と利益をシミュレーションできる便利な関数です。発注前のチェックに必ず使いましょう。

SymbolInfoDouble — 銘柄のdouble値

通貨ペアの価格、スプレッド、ティック値、ロット情報など、取引に必要な銘柄情報を取得します。

プロパティ説明用途
SYMBOL_BID現在のBid価格売り注文の価格
SYMBOL_ASK現在のAsk価格買い注文の価格
SYMBOL_POINT1ポイントの価格SL/TP計算
SYMBOL_TRADE_TICK_VALUE1ティックの価値(口座通貨)ロット計算
SYMBOL_TRADE_TICK_SIZE1ティックのサイズ価格正規化
SYMBOL_TRADE_CONTRACT_SIZE1ロットの契約サイズ証拠金計算
SYMBOL_VOLUME_MIN最小ロットロット制約
SYMBOL_VOLUME_MAX最大ロットロット制約
SYMBOL_VOLUME_STEPロットステップロット正規化
SYMBOL_SWAP_LONG買いスワップスワップ計算
SYMBOL_SWAP_SHORT売りスワップスワップ計算
SYMBOL_MARGIN_INITIAL初期証拠金証拠金計算
SYMBOL_TRADE_STOPS_LEVELストップレベル(ポイント)※SymbolInfoIntegerで取得SL/TP最小距離
SYMBOL_TRADE_FREEZE_LEVELフリーズレベル(ポイント)※SymbolInfoIntegerで取得変更禁止距離
void PrintSymbolInfo(string symbol)
  {
   double bid       = SymbolInfoDouble(symbol, SYMBOL_BID);
   double ask       = SymbolInfoDouble(symbol, SYMBOL_ASK);
   double spread    = (ask - bid) / SymbolInfoDouble(symbol, SYMBOL_POINT);
   double point     = SymbolInfoDouble(symbol, SYMBOL_POINT);
   double tickValue = SymbolInfoDouble(symbol, SYMBOL_TRADE_TICK_VALUE);
   double tickSize  = SymbolInfoDouble(symbol, SYMBOL_TRADE_TICK_SIZE);
   double minLot    = SymbolInfoDouble(symbol, SYMBOL_VOLUME_MIN);
   double maxLot    = SymbolInfoDouble(symbol, SYMBOL_VOLUME_MAX);
   double lotStep   = SymbolInfoDouble(symbol, SYMBOL_VOLUME_STEP);
   double contract  = SymbolInfoDouble(symbol, SYMBOL_TRADE_CONTRACT_SIZE);
   double stopLevel = (double)SymbolInfoInteger(symbol, SYMBOL_TRADE_STOPS_LEVEL);

   PrintFormat("%s  Bid=%.5f  Ask=%.5f  Spread=%.1f pips",
               symbol, bid, ask, spread / 10);
   PrintFormat("Point=%.5f  TickValue=%.5f  TickSize=%.5f",
               point, tickValue, tickSize);
   PrintFormat("Lot: Min=%.2f  Max=%.2f  Step=%.2f  Contract=%g",
               minLot, maxLot, lotStep, contract);
   PrintFormat("StopLevel=%g points", stopLevel);
  }

スプレッド取得とフィルター

// 現在のスプレッド(ポイント単位)
int GetSpreadPoints(string symbol)
  {
   return (int)SymbolInfoInteger(symbol, SYMBOL_SPREAD);
  }

// pips単位のスプレッド
double GetSpreadPips(string symbol)
  {
   double ask = SymbolInfoDouble(symbol, SYMBOL_ASK);
   double bid = SymbolInfoDouble(symbol, SYMBOL_BID);
   double point = SymbolInfoDouble(symbol, SYMBOL_POINT);
   int digits = (int)SymbolInfoInteger(symbol, SYMBOL_DIGITS);

   // 5桁/3桁ブローカーの場合、10で割ってpipsに変換
   double spread = (ask - bid) / point;
   if(digits == 5 || digits == 3)
      return spread / 10.0;
   return spread;
  }

// スプレッドが閾値以下のときだけエントリー
input double MaxSpreadPips = 3.0;

bool IsSpreadOK(string symbol)
  {
   double spread = GetSpreadPips(symbol);
   if(spread > MaxSpreadPips)
     {
      PrintFormat("スプレッド広すぎ: %.1f pips (上限: %.1f)", spread, MaxSpreadPips);
      return false;
     }
   return true;
  }

SymbolInfoInteger — 銘柄のinteger値

プロパティ説明
SYMBOL_DIGITS小数点以下の桁数
SYMBOL_SPREAD現在のスプレッド(ポイント)
SYMBOL_SPREAD_FLOAT変動スプレッドかどうか
SYMBOL_TRADE_CALC_MODE証拠金計算モード
SYMBOL_TRADE_MODE取引モード(無効/ロングのみ/フル等)
SYMBOL_TRADE_EXEMODE約定方式(即時/マーケット/エクスチェンジ)
SYMBOL_FILLING_MODE対応する充填モード
SYMBOL_EXPIRATION_MODE対応する有効期限モード
SYMBOL_TIME最終ティック時刻
SYMBOL_SESSION_DEALS当日の約定数
SYMBOL_SESSION_BUY_ORDERS現在の買い注文数
SYMBOL_SESSION_SELL_ORDERS現在の売り注文数
// 銘柄の取引可否チェック
bool IsTradeAllowed(string symbol)
  {
   long tradeMode = SymbolInfoInteger(symbol, SYMBOL_TRADE_MODE);

   switch((ENUM_SYMBOL_TRADE_MODE)tradeMode)
     {
      case SYMBOL_TRADE_MODE_DISABLED:
         Print(symbol, ": 取引無効");
         return false;
      case SYMBOL_TRADE_MODE_LONGONLY:
         Print(symbol, ": 買いのみ可能");
         return true;
      case SYMBOL_TRADE_MODE_SHORTONLY:
         Print(symbol, ": 売りのみ可能");
         return true;
      case SYMBOL_TRADE_MODE_CLOSEONLY:
         Print(symbol, ": 決済のみ可能");
         return false;
      case SYMBOL_TRADE_MODE_FULL:
         return true;
     }
   return false;
  }

// 適切な充填モードを自動選択
ENUM_ORDER_TYPE_FILLING GetFillingMode(string symbol)
  {
   long filling = SymbolInfoInteger(symbol, SYMBOL_FILLING_MODE);

   if((filling & SYMBOL_FILLING_FOK) != 0)
      return ORDER_FILLING_FOK;
   if((filling & SYMBOL_FILLING_IOC) != 0)
      return ORDER_FILLING_IOC;

   return ORDER_FILLING_RETURN;
  }

充填モード(Filling Mode)はブローカーごとに異なります。FOKが使えないブローカーでFOKを指定するとエラーになります。上記のようにSYMBOL_FILLING_MODEで対応モードを確認してから設定してください。

SymbolInfoString — 銘柄の文字列情報

void PrintSymbolStrings(string symbol)
  {
   string basis    = SymbolInfoString(symbol, SYMBOL_BASIS);         // 原資産
   string currency = SymbolInfoString(symbol, SYMBOL_CURRENCY_BASE); // 基軸通貨
   string profit   = SymbolInfoString(symbol, SYMBOL_CURRENCY_PROFIT); // 決済通貨
   string margin   = SymbolInfoString(symbol, SYMBOL_CURRENCY_MARGIN); // 証拠金通貨
   string desc     = SymbolInfoString(symbol, SYMBOL_DESCRIPTION);  // 銘柄説明
   string path     = SymbolInfoString(symbol, SYMBOL_PATH);         // ツリーパス

   PrintFormat("基軸: %s  決済: %s  証拠金: %s", currency, profit, margin);
   PrintFormat("説明: %s  パス: %s", desc, path);
  }

SymbolInfoTick — 最新ティック情報

SymbolInfoTick()は最新のティック情報をMqlTick構造体で一括取得します。Bid/Askを個別に取得するより効率的です。

MqlTick tick;

if(SymbolInfoTick(_Symbol, tick))
  {
   PrintFormat("Bid=%.5f  Ask=%.5f  Last=%.5f",
               tick.bid, tick.ask, tick.last);
   PrintFormat("Volume=%d  Time=%s  Flags=%d",
               (int)tick.volume,
               TimeToString(tick.time, TIME_DATE | TIME_SECONDS),
               tick.flags);
  }

// ティック履歴の取得
MqlTick ticks[];
int copied = CopyTicks(_Symbol, ticks, COPY_TICKS_ALL, 0, 1000);
if(copied > 0)
  {
   Print("取得ティック数: ", copied);
   Print("最新: Bid=", ticks[copied-1].bid, " Ask=", ticks[copied-1].ask);
  }

ロット正規化(実践)

計算したロット数をブローカーの仕様に合わせて正規化する関数です。ロットステップ、最小/最大ロットの制約を考慮します。

// ロットをブローカー仕様に合わせて正規化
double NormalizeLot(string symbol, double lot)
  {
   double minLot  = SymbolInfoDouble(symbol, SYMBOL_VOLUME_MIN);
   double maxLot  = SymbolInfoDouble(symbol, SYMBOL_VOLUME_MAX);
   double lotStep = SymbolInfoDouble(symbol, SYMBOL_VOLUME_STEP);

   // ロットステップに合わせる(切り捨て)
   lot = MathFloor(lot / lotStep) * lotStep;

   // 最小/最大ロット制約
   lot = MathMax(lot, minLot);
   lot = MathMin(lot, maxLot);

   // 小数点の丸め(lotStepの桁数に合わせる)
   int digits = 0;
   double step = lotStep;
   while(step < 1.0)
     {
      step *= 10;
      digits++;
     }

   return NormalizeDouble(lot, digits);
  }

// SL/TP価格の正規化とストップレベル確認
double NormalizePrice(string symbol, double price)
  {
   double tickSize = SymbolInfoDouble(symbol, SYMBOL_TRADE_TICK_SIZE);
   if(tickSize == 0) return price;

   return NormalizeDouble(MathRound(price / tickSize) * tickSize,
                          (int)SymbolInfoInteger(symbol, SYMBOL_DIGITS));
  }

// SLがストップレベル以上離れているか確認
bool CheckStopLevel(string symbol, double price, double sl, bool isBuy)
  {
   double stopLevel = (double)SymbolInfoInteger(symbol, SYMBOL_TRADE_STOPS_LEVEL) * SymbolInfoDouble(symbol, SYMBOL_POINT);

   if(stopLevel == 0) return true;  // 制限なし

   double distance = isBuy ? (price - sl) : (sl - price);

   if(distance < stopLevel)
     {
      PrintFormat("SLがストップレベルに近すぎます: distance=%.5f  required=%.5f",
                  distance, stopLevel);
      return false;
     }
   return true;
  }

SymbolsTotal / SymbolName — 銘柄一覧

利用可能な銘柄の一覧を取得する関数です。マルチ通貨EAや銘柄スクリーニングに使用します。

// 気配値表示中の全銘柄を取得
void PrintMarketWatchSymbols()
  {
   int total = SymbolsTotal(true);  // true=気配値表示中のみ
   Print("気配値表示中の銘柄数: ", total);

   for(int i = 0; i < total; i++)
     {
      string name = SymbolName(i, true);
      double spread = (SymbolInfoDouble(name, SYMBOL_ASK) - SymbolInfoDouble(name, SYMBOL_BID))
                      / SymbolInfoDouble(name, SYMBOL_POINT);
      PrintFormat("%s  Spread=%.1f", name, spread);
     }
  }

// 特定条件の銘柄をフィルタ(例: JPY関連のFXペア)
void FindJPYPairs()
  {
   int total = SymbolsTotal(false);  // false=全銘柄

   for(int i = 0; i < total; i++)
     {
      string name = SymbolName(i, false);

      // JPY関連を探す
      if(StringFind(name, "JPY") >= 0)
        {
         // FX通貨ペアか確認
         long calcMode = SymbolInfoInteger(name, SYMBOL_TRADE_CALC_MODE);
         if(calcMode == SYMBOL_CALC_MODE_FOREX)
           {
            // 気配値表示に追加
            SymbolSelect(name, true);
            Print("JPYペア発見: ", name);
           }
        }
     }
  }

取引セッション情報

銘柄の取引時間帯(セッション)を取得できます。市場が開いているかどうかの判定に使用します。

// 現在取引可能かチェック
bool IsMarketOpen(string symbol)
  {
   MqlDateTime dt;
   TimeCurrent(dt);

   datetime from, to;
   // 当日のセッションを確認(複数セッションがある場合はループ)
   for(int session = 0; session < 10; session++)
     {
      if(!SymbolInfoSessionTrade(symbol, (ENUM_DAY_OF_WEEK)dt.day_of_week, session, from, to))
         break;

      // 時刻部分だけ比較
      int currentMinutes = dt.hour * 60 + dt.min;

      MqlDateTime fromDt, toDt;
      TimeToStruct(from, fromDt);
      TimeToStruct(to, toDt);

      int fromMinutes = fromDt.hour * 60 + fromDt.min;
      int toMinutes   = toDt.hour * 60 + toDt.min;

      if(currentMinutes >= fromMinutes && currentMinutes < toMinutes)
         return true;
     }

   return false;
  }

// 取引セッション一覧を表示
void PrintTradeSessions(string symbol)
  {
   string dayNames[] = {"日", "月", "火", "水", "木", "金", "土"};

   for(int day = 0; day < 7; day++)
     {
      for(int session = 0; session < 5; session++)
        {
         datetime from, to;
         if(!SymbolInfoSessionTrade(symbol, (ENUM_DAY_OF_WEEK)day, session, from, to))
            break;

         MqlDateTime fromDt, toDt;
         TimeToStruct(from, fromDt);
         TimeToStruct(to, toDt);

         PrintFormat("%s曜日 セッション%d: %02d:%02d - %02d:%02d",
                     dayNames[day], session + 1,
                     fromDt.hour, fromDt.min,
                     toDt.hour, toDt.min);
        }
     }
  }

MQL4との比較

MQL4の口座情報・マーケット情報関数とMQL5の対応関係です。

MQL4関数MQL5対応
AccountBalance()AccountInfoDouble(ACCOUNT_BALANCE)
AccountEquity()AccountInfoDouble(ACCOUNT_EQUITY)
AccountFreeMargin()AccountInfoDouble(ACCOUNT_MARGIN_FREE)
AccountMargin()AccountInfoDouble(ACCOUNT_MARGIN)
AccountProfit()AccountInfoDouble(ACCOUNT_PROFIT)
AccountLeverage()AccountInfoInteger(ACCOUNT_LEVERAGE)
AccountNumber()AccountInfoInteger(ACCOUNT_LOGIN)
AccountCurrency()AccountInfoString(ACCOUNT_CURRENCY)
AccountCompany()AccountInfoString(ACCOUNT_COMPANY)
MarketInfo(symbol, MODE_BID)SymbolInfoDouble(symbol, SYMBOL_BID)
MarketInfo(symbol, MODE_ASK)SymbolInfoDouble(symbol, SYMBOL_ASK)
MarketInfo(symbol, MODE_SPREAD)SymbolInfoInteger(symbol, SYMBOL_SPREAD)
MarketInfo(symbol, MODE_POINT)SymbolInfoDouble(symbol, SYMBOL_POINT)
MarketInfo(symbol, MODE_DIGITS)SymbolInfoInteger(symbol, SYMBOL_DIGITS)
MarketInfo(symbol, MODE_STOPLEVEL)SymbolInfoInteger(symbol, SYMBOL_TRADE_STOPS_LEVEL)
MarketInfo(symbol, MODE_LOTSIZE)SymbolInfoDouble(symbol, SYMBOL_TRADE_CONTRACT_SIZE)
MarketInfo(symbol, MODE_TICKVALUE)SymbolInfoDouble(symbol, SYMBOL_TRADE_TICK_VALUE)
MarketInfo(symbol, MODE_MINLOT)SymbolInfoDouble(symbol, SYMBOL_VOLUME_MIN)
MarketInfo(symbol, MODE_MAXLOT)SymbolInfoDouble(symbol, SYMBOL_VOLUME_MAX)
MarketInfo(symbol, MODE_LOTSTEP)SymbolInfoDouble(symbol, SYMBOL_VOLUME_STEP)
MarketInfo(symbol, MODE_SWAPLONG)SymbolInfoDouble(symbol, SYMBOL_SWAP_LONG)
MarketInfo(symbol, MODE_SWAPSHORT)SymbolInfoDouble(symbol, SYMBOL_SWAP_SHORT)

MQL4のMarketInfo()は1つの関数で全情報を取得していましたが、MQL5ではSymbolInfoDouble()SymbolInfoInteger()SymbolInfoString()に分かれています。型安全性が向上しています。

TerminalInfo — ターミナル情報

MT5ターミナル自体の情報を取得する関数です。EAの動作環境の確認に使用します。

void PrintTerminalInfo()
  {
   // 取引許可状態
   bool tradeAllowed = (bool)TerminalInfoInteger(TERMINAL_TRADE_ALLOWED);
   bool connected    = (bool)TerminalInfoInteger(TERMINAL_CONNECTED);
   bool dlls         = (bool)TerminalInfoInteger(TERMINAL_DLLS_ALLOWED);

   PrintFormat("取引許可: %s  接続: %s  DLL: %s",
               tradeAllowed ? "YES" : "NO",
               connected ? "YES" : "NO",
               dlls ? "YES" : "NO");

   // パス情報
   string dataPath    = TerminalInfoString(TERMINAL_DATA_PATH);
   string commonPath  = TerminalInfoString(TERMINAL_COMMONDATA_PATH);

   Print("データパス: ", dataPath);
   Print("共通パス: ", commonPath);

   // メモリ情報
   int physicalMem = (int)TerminalInfoInteger(TERMINAL_MEMORY_PHYSICAL);
   int availMem    = (int)TerminalInfoInteger(TERMINAL_MEMORY_AVAILABLE);
   int usedMem     = (int)TerminalInfoInteger(TERMINAL_MEMORY_USED);

   PrintFormat("メモリ: 物理=%dMB  利用可能=%dMB  使用中=%dMB",
               physicalMem, availMem, usedMem);
  }

// MQLプログラム自体の情報
void PrintMQLInfo()
  {
   bool isOptimization = (bool)MQLInfoInteger(MQL_OPTIMIZATION);
   bool isTesting      = (bool)MQLInfoInteger(MQL_TESTER);
   bool isVisual       = (bool)MQLInfoInteger(MQL_VISUAL_MODE);
   bool tradeAllowed   = (bool)MQLInfoInteger(MQL_TRADE_ALLOWED);

   PrintFormat("テスト: %s  最適化: %s  ビジュアル: %s  取引: %s",
               isTesting ? "YES" : "NO",
               isOptimization ? "YES" : "NO",
               isVisual ? "YES" : "NO",
               tradeAllowed ? "YES" : "NO");

   string programName = MQLInfoString(MQL_PROGRAM_NAME);
   Print("プログラム名: ", programName);
  }

バックテスト中はMQLInfoInteger(MQL_TESTER)がtrueを返します。ライブとテストで異なる処理をしたい場合(例: ログの詳細度を変える、WebRequestを無効にする等)に使ってください。

プロが開発したEAをお探しの方は → シストレ.COM EA一覧

シストレ.COMで実績のあるEAが使い放題!/
無料会員登録はこちら
FX自動売買でEAを探すなら
シストレ.COM
実績あるEAが無料
厳格な審査を乗り越えた実績のあるEAが無料で使えます!
自由な口座選び
有料版を購入し柔軟な口座選びが可能!
フォワードテスト公開
全EAのフォワードテスト結果を公開中!
FX初心者も安心
初心者の方も安心して取引を始められます。
多様なEA選択肢
様々な種別のEAをご用意!自分の手法にあった取引が可能です。
信頼のFX会社と提携
人気のFX会社と提携中!様々なFX会社から選べます。
1分で登録完了!EA探すならシストレ.COM!/
無料会員登録はこちら
【FX自動売買】システムトレード完全ガイド|Forex Guide

この記事が気に入ったら
フォローしてね!

お役立ち情報をシェアする
  • URLをコピーしました!
目次