技術講座

MQL5マルチシンボル・マルチタイムフレーム完全ガイド|複数銘柄・複数時間足EAの基本

EAファンクラブ

MQL5では、現在チャートの銘柄や時間足だけでなく、別の銘柄や別の時間足のデータを参照できます。これにより、複数銘柄を監視するEA、上位足を確認するインジケーター、複数時間足を組み合わせる補助ツール、複数銘柄の状態を一覧表示するパネルなどを設計できます。

一方で、マルチシンボル・マルチタイムフレーム設計は、単一チャートだけを扱うEAよりも確認項目が増えます。参照銘柄名、サフィックス、Market Watch登録、履歴データ不足、時間足ごとの確定タイミング、indicator handle、CopyRatesの戻り値、バックテスト時のデータ準備、Magic Numberやポジション管理の分離などを整理する必要があります。

この記事では、MQL5で複数銘柄・複数時間足を扱う時の基本設計を、EA・インジケーター・パネル表示・検証・開発依頼前整理の視点で解説します。売買判断、推奨銘柄、推奨ロット、運用成績に関する助言は扱いません。技術的な確認と仕様整理に限定します。

この記事で扱う範囲

この記事では、MQL5で複数銘柄や複数時間足を参照する時の考え方、データ取得、同期確認、負荷対策、バックテスト時の注意点を扱います。

主に扱う内容

対象この記事での扱い確認ポイント
マルチシンボル複数銘柄の価格や状態を参照する設計銘柄名、サフィックス、Market Watch、データ取得
マルチタイムフレーム複数時間足のローソク足や指標値を参照する設計時間足、確定足、未確定足、データ同期
CopyRatesローソク足データの取得取得本数、戻り値、MqlRates配列
indicator handle別銘柄・別時間足のインジケーター参照handle作成、CopyBuffer、IndicatorRelease
データ不足履歴未取得や同期待ちへの対応戻り値、エラー、SeriesInfoInteger
バックテスト複数銘柄EAの検証時の注意参照銘柄データ、テスト条件、ログ
仕様整理開発依頼前に決めること対象銘柄、対象時間足、判定タイミング、ログ

この記事で深く扱わないこと

本記事では、個別の売買ロジック、運用成績の評価、推奨パラメータ、推奨銘柄、推奨ロットは扱いません。また、複数銘柄を使った具体的な売買判断ではなく、MQL5で複数データを扱うための技術設計に限定します。

マルチシンボルとマルチタイムフレームの違い

マルチシンボルとは、1つのEAやインジケーターが複数の銘柄を参照する設計です。たとえば、現在チャートとは別の銘柄の価格、スプレッド、ローソク足、インジケーター値を確認する場合が該当します。

マルチタイムフレームとは、1つのEAやインジケーターが複数の時間足を参照する設計です。たとえば、現在チャートはM5でも、H1やH4のローソク足や移動平均を参照する場合が該当します。

単一・複数構成の比較

構成参照対象主な難しさ確認すること
単一銘柄・単一時間足現在チャートのみ比較的単純現在足、確定足、インジ値
単一銘柄・複数時間足同一銘柄の別時間足時間足ごとの確定タイミング上位足更新、CopyRates、CopyBuffer
複数銘柄・単一時間足複数銘柄の同じ時間足銘柄名と履歴データSymbolSelect、サフィックス、同期状態
複数銘柄・複数時間足複数銘柄 × 複数時間足負荷、同期、ログ複雑化取得対象一覧、更新頻度、失敗時reason

設計時に先に決めること

複数銘柄・複数時間足を扱う場合は、最初に対象範囲を固定します。あとから銘柄や時間足を自由に増やす設計にすると、データ取得、負荷、ログ、バックテスト、ポジション管理が複雑になります。

決める項目理由
参照銘柄現在チャートのみ / 指定リスト / Market Watch全体取得範囲と負荷が変わる
参照時間足M5、M15、H1など確定タイミングと履歴量が変わる
取得方法CopyRates、iMA + CopyBufferなど価格データか指標データかで変わる
更新頻度毎tick、新バー時、OnTimer処理負荷に関係する
失敗時の扱いskip、warning、安全停止、表示のみ静かに壊れる状態を避ける
ログ粒度初期化時、状態変化時、summaryログ過多と確認不足を避ける

チャート銘柄と参照銘柄の違い

現在EAやインジケーターを設置しているチャートの銘柄を、チャート銘柄として扱います。一方で、プログラム内で追加的にデータ取得する銘柄を参照銘柄として扱います。

たとえば、チャート銘柄が現在のチャートで、参照銘柄が外部リストやinputで指定された銘柄です。チャート銘柄と参照銘柄を混同すると、ログやポジション管理で誤認が起きやすくなります。

チャート銘柄と参照銘柄の分離

分類意味取得例注意点
チャート銘柄EAやインジを設置している銘柄_Symbol常に参照対象全体とは限らない
参照銘柄プログラムが追加で見る銘柄input配列、固定リスト存在確認と履歴確認が必要
取引対象銘柄発注や管理対象にする銘柄仕様で固定参照だけの銘柄と混同しない
表示対象銘柄パネルやログへ出す銘柄summary用リスト表示対象が多すぎると見づらい

_Symbolだけに依存しない

単一チャートEAでは _Symbol を使う場面が多くあります。しかし、マルチシンボルEAでは _Symbol は現在チャートの銘柄を示すだけです。参照銘柄ごとの処理では、必ず対象銘柄を引数として渡す構造にします。

bool LoadRatesForSymbol(const string symbol,
                        const ENUM_TIMEFRAMES tf,
                        MqlRates &rates[])
{
   ArraySetAsSeries(rates,true);
   int copied = CopyRates(symbol, tf, 0, 10, rates);
   return (copied > 0);
}

この例では、対象銘柄と時間足を引数で渡しています。現在チャートだけに依存しない形にしておくと、複数銘柄・複数時間足へ拡張しやすくなります。

複数銘柄の価格を取得する基本

複数銘柄の価格やローソク足を取得する場合、まず対象銘柄がターミナル上で認識されているかを確認します。銘柄名が間違っている、サフィックスが違う、Market Watchに表示されていない、履歴データが不足している場合、取得に失敗することがあります。

SymbolSelectの役割

SymbolSelect は、指定した銘柄をMarket Watchに追加または削除するために使います。複数銘柄EAでは、参照銘柄がMarket Watchに存在するかを起動時に確認する設計が重要です。

bool EnsureSymbolReady(const string symbol)
{
   if(!SymbolSelect(symbol,true))
   {
      Print("SYMBOL_CHECK: failed symbol=", symbol);
      return false;
   }

   Print("SYMBOL_CHECK: ok symbol=", symbol);
   return true;
}

この例では、銘柄をMarket Watchへ選択できるかを確認しています。実務では、銘柄名、サフィックス、digits、point、volume stepなども合わせて確認します。

複数銘柄取得時の基本チェック

確認項目確認内容ログ例
銘柄名実際のMT5上の名称と一致しているかSYMBOL_CHECK: name=…
Market Watch参照可能な状態かSYMBOL_SELECT: ok=Y/N
サフィックス末尾文字や口座種別差があるかSYMBOL_SUFFIX: detected=…
digits / point価格桁とpointが想定通りかSYMBOL_FMT: digits=… point=…
履歴データCopyRatesで必要本数が取れるかRATES_CHECK: copied=…
取得失敗時reason銘柄名不備か、履歴不足か、同期待ちかDATA_SKIP: reason=…

複数時間足のデータを取得する基本

複数時間足を参照する場合は、現在チャートの時間足と、参照する時間足を分けて扱います。現在チャートがM5でも、H1やH4のローソク足を参照できます。ただし、時間足ごとにローソク足の更新タイミングが違います。

上位足の未確定足を使うのか、確定足だけを使うのかによって、表示結果や判定結果が変わる可能性があります。開発依頼時には、必ず「確定足で見るのか」「現在進行中の足も見るのか」を整理してください。

時間足参照方式比較表

方式内容向いている用途注意点
現在足参照shift 0の足を参照リアルタイム表示、現在状態の確認未確定のため値が変化する
確定足参照shift 1以降を参照確定後の条件確認、再現性重視反応は遅くなる
上位足参照H1、H4、D1などを参照背景状態、フィルター、表示補助更新頻度が低い
下位足参照M1、M5などを参照細かい変化確認データ量と負荷が増えやすい
複数時間足一覧複数TFをまとめて確認パネル表示、状態一覧同期とログ設計が重要

時間足ごとの新バー確認

マルチタイムフレームでは、現在チャートの新バーだけでなく、参照時間足ごとの新バーを確認する場合があります。すべてを現在チャートのバー更新だけに合わせると、上位足の更新タイミングを見落とす場合があります。

bool IsNewBarFor(const string symbol,
                 const ENUM_TIMEFRAMES tf,
                 datetime &last_bar_time)
{
   MqlRates rates[];
   ArraySetAsSeries(rates,true);

   int copied = CopyRates(symbol, tf, 0, 2, rates);
   if(copied < 2)
      return false;

   if(rates[0].time != last_bar_time)
   {
      last_bar_time = rates[0].time;
      return true;
   }

   return false;
}

この例では、銘柄と時間足ごとに最新バー時刻を確認しています。実務では、参照対象が増えるほど処理回数が増えるため、OnTimerや新バー時だけの取得に分けることも検討します。

CopyRatesとindicator handleの使い分け

複数銘柄・複数時間足でデータを扱う場合、価格そのものを取りたいのか、インジケーター値を取りたいのかで使う関数が変わります。

ローソク足のOHLC、時刻、tick volumeなどを取得したい場合は CopyRates が関係します。移動平均などの標準インジケーター値を取得したい場合は、iMA などでhandleを作成し、CopyBuffer で値を取得します。

CopyRatesとindicator handleの比較

方式取得できるもの代表関数注意点
CopyRatesローソク足データCopyRates取得本数と履歴不足を確認する
価格系列取得Open、High、Low、CloseなどCopyOpen、CopyCloseなど必要な系列だけ取る時に使う
標準指標handleMA、ATR、BandsなどiMA、iATR、iBandshandle作成失敗を確認する
指標値取得インジケーターバッファCopyBufferbuffer番号と取得本数を確認する
handle解放不要handleの解放IndicatorReleaseOnDeinitでの扱いを決める

CopyRatesの最小例

bool GetLastClosedBar(const string symbol,
                      const ENUM_TIMEFRAMES tf,
                      MqlRates &bar)
{
   MqlRates rates[];
   ArraySetAsSeries(rates,true);

   int copied = CopyRates(symbol, tf, 0, 3, rates);
   if(copied < 3)
   {
      Print("COPY_RATES_FAIL: symbol=", symbol,
            " tf=", EnumToString(tf),
            " copied=", copied);
      return false;
   }

   bar = rates[1];
   return true;
}

この例では、shift 1の確定足を取り出しています。実務では、shift 0を使うのか、shift 1を使うのかを仕様として明示してください。

iMA handleとCopyBufferの最小例

int CreateMaHandle(const string symbol,
                   const ENUM_TIMEFRAMES tf,
                   const int period)
{
   int handle = iMA(symbol, tf, period, 0, MODE_SMA, PRICE_CLOSE);

   if(handle == INVALID_HANDLE)
      Print("MA_HANDLE_FAIL: symbol=", symbol, " tf=", EnumToString(tf));

   return handle;
}

bool GetMaValue(const int handle, double &value)
{
   double buffer[];
   ArraySetAsSeries(buffer,true);

   int copied = CopyBuffer(handle, 0, 0, 2, buffer);
   if(copied < 2)
      return false;

   value = buffer[1];
   return true;
}

handleは作成して終わりではありません。作成失敗、CopyBuffer失敗、不要時の解放、再初期化時の扱いを設計します。

データ不足と同期待ち

マルチシンボル・マルチタイムフレームでよく起きる問題が、データ不足と同期待ちです。現在チャートのデータは見えていても、参照銘柄や参照時間足の履歴が十分に読み込まれていない場合があります。

この状態でCopyRatesやCopyBufferを呼ぶと、想定本数が取得できないことがあります。取得できない時に、0や古い値をそのまま使うと、静かに壊れる設計になります。

データ不足原因表

原因症状確認方法対応方針
銘柄名が違うCopyRatesが失敗するSymbolSelect、ログのsymbol名実際のMT5上の名称を確認する
サフィックス不一致特定口座でだけ失敗Market Watch上の銘柄名inputや自動検出で整理する
Market Watch未登録参照できないSymbolSelect結果起動時に選択確認する
履歴不足必要本数が取れないCopyRates戻り値取得本数不足としてskipする
indicator handle未準備CopyBuffer失敗handle値、BarsCalculated準備できるまで待つ
時間足データ未同期一部TFだけ取得できないSeriesInfoInteger同期状態をログに出す
バックテストデータ不足テスターでだけ失敗テストログ、参照銘柄履歴テスト前にデータ準備を確認する

取得失敗時はreasonを分ける

取得できなかった時に、単に「NG」とするだけでは原因が分かりません。銘柄名不備、Market Watch未登録、履歴不足、handle未準備、CopyBuffer失敗、同期待ちなどを分けてログに残します。

enum DataStatus
{
   DATA_OK,
   DATA_SYMBOL_SELECT_FAIL,
   DATA_RATES_NOT_READY,
   DATA_HANDLE_INVALID,
   DATA_BUFFER_NOT_READY
};

reasonを分けることで、問い合わせ時に「どこで止まっているか」を確認しやすくなります。

参照銘柄のサフィックス確認

MT5の銘柄名は、環境によって末尾に文字が付く場合があります。同じ通貨ペアや商品名に見えても、実際のシンボル名が完全一致していなければ、データ取得に失敗します。

マルチシンボル設計では、表示名や一般的な名称ではなく、MT5上の実シンボル名を仕様として扱います。開発依頼時も、スクリーンショットやMarket Watch上の正確な銘柄名を共有すると確認しやすくなります。

サフィックス確認表

確認項目注意点
実シンボル名Market Watch上の表示名大文字小文字や末尾文字も確認する
input指定名EAに入力する銘柄名実シンボル名と一致させる
チャート表示名チャート左上の名称省略表示と実名が違う場合がある
口座種別差同じ銘柄でも名称が違う場合環境別に確認する
ログ出力SYMBOL_CHECKどの名称で取得したか記録する

自動補正は慎重に扱う

銘柄サフィックスを自動補正する設計も考えられますが、誤った銘柄を選んでしまうと確認が難しくなります。まずはinputで明示指定し、起動時ログで実際に選択された銘柄名を確認できる構成が安全です。

マルチシンボルEAで重くなる原因

複数銘柄・複数時間足を扱うと、取得対象が増えます。銘柄数、時間足数、取得本数、indicator handle数、CopyBuffer回数、ログ量、Object表示数が増えるため、単一チャートEAよりも負荷管理が重要になります。

負荷が増える主な原因

原因負荷が増える理由整理方針
毎tickで全銘柄取得tickごとに取得回数が増える新バー時、OnTimer、throttleへ分ける
全時間足を毎回取得TF数に比例して重くなる必要TFだけ取得する
取得本数が多い配列処理と履歴アクセスが重くなる必要最小本数にする
handleを毎tick作るindicator生成が重いOnInitで作成し再利用する
CopyBufferを大量実行指標数 × 銘柄数 × TF数で増える更新タイミングを制御する
ログを出しすぎる確認しづらく、テスターも重くなる状態変化時とsummaryに分ける
表示Objectが多いパネル更新が重くなる一覧表示と詳細表示を分ける

更新頻度を分ける

すべての参照データを毎tick取得する必要はありません。現在価格だけはOnTickで確認し、上位足データや外部参照一覧はOnTimerや新バー時だけ更新する構成が扱いやすくなります。

処理更新候補理由
現在チャートの軽量状態OnTick価格変化に連動するため
参照銘柄のローソク足OnTimer / 新バー時毎tick取得の必要が薄い場合がある
上位足データ上位足新バー時更新頻度が低いため
indicator handle作成OnInit毎回作らない
表示パネル差分更新ちらつきと負荷を抑える
詳細ログdebug時のみ通常運用ではsummary中心

Magic Numberとポジション管理

複数銘柄EAで発注やポジション管理を行う場合、Magic Number、symbol、direction、strategy idなどを分けて管理する必要があります。参照だけの銘柄と、実際に管理対象にする銘柄を混同しないことが重要です。

この記事では売買ロジックは扱いませんが、EA設計上は、複数銘柄を参照するだけなのか、複数銘柄でポジション管理も行うのかを明確に分けます。

ポジション管理で分けるべき項目

項目役割確認内容
symbolどの銘柄のポジションかPositionGetString(POSITION_SYMBOL)等
magicどのEA・ロジックの管理対象かEAごとの識別
directionBUY / SELLの方向集計や表示で分ける
strategy idロジック別の分類複数ロジック時に有効
chart symbol設置チャート管理対象全体とは限らない
reference symbol参照だけの銘柄ポジション操作対象と混同しない

銘柄別にログを分ける

複数銘柄EAでは、ログに必ず対象銘柄を含めます。対象銘柄がないログは、あとから原因を追いにくくなります。

void PrintSymbolState(const string symbol,
                      const string state,
                      const string reason)
{
   Print("SYMBOL_STATE: symbol=", symbol,
         " state=", state,
         " reason=", reason);
}

ログでは、symbol、timeframe、magic、reasonを分けて出すと、複数銘柄でも確認しやすくなります。

バックテスト時の注意点

複数銘柄・複数時間足EAは、バックテスト時に注意が必要です。現在チャートのデータだけでなく、参照銘柄や参照時間足のデータも必要になります。テスト条件によって、ライブ環境と同じように取得できない場合があります。

バックテストで確認する時は、対象銘柄、対象時間足、参照データの取得成否、取得本数、テスト期間、スプレッド条件、ログ量を記録してください。

バックテスト注意表

確認項目確認内容ログ例
テスト銘柄EAを設置するチャート銘柄BT/INIT: chart_symbol=…
参照銘柄EA内で追加参照する銘柄BT/SYMBOLS: count=…
参照時間足取得対象TFBT/TFS: M5,H1,H4
取得本数CopyRatesやCopyBufferの戻り値BT/DATA: copied=…
履歴不足期間内で必要本数が取れるかBT/DATA_SKIP: reason=…
ログ量テスターが重くならないかBT/SUMMARY
ライブ差ライブとテスターで取得条件が違わないかBT/LIVE_DIFF_NOTE

テスターではsummaryログを使う

複数銘柄・複数時間足の状態を毎tick詳細ログに出すと、バックテストのログが膨大になります。テスターでは、起動時の対象一覧、取得失敗時、状態変化時、終了時summaryを中心にすると確認しやすくなります。

ログ種別出力タイミング内容
BT/INIT開始時対象銘柄、時間足、取得方式
BT/DATA_WARN取得失敗時symbol、tf、reason
BT/SYMBOL_SUMMARY一定間隔または終了時取得成功数、失敗数
BT/EXIT_SUMMARY終了時全体の確認結果

ログで確認すること

マルチシンボル・マルチタイムフレーム設計では、ログの整理が重要です。対象が増えるほど、どの銘柄、どの時間足、どの関数、どのreasonで失敗したかが分かりにくくなるためです。

イベント別・対象別ログ表

ログ名目的含める項目
MS_INIT起動時の対象確認symbol_count、tf_count、mode
SYMBOL_CHECK銘柄確認symbol、select結果、digits、point
TF_CHECK時間足確認symbol、timeframe、bars
RATES_LOADCopyRates確認symbol、tf、requested、copied
HANDLE_INITindicator handle確認symbol、tf、period、handle
BUFFER_LOADCopyBuffer確認handle、buffer、copied
DATA_SKIP取得見送りsymbol、tf、reason
MS_SUMMARY全体summaryok_count、warn_count、fail_count

ログに入れたい最小項目

最低限、symbol、timeframe、function、requested、copied、reasonを入れると、確認しやすくなります。ログに対象がないと、複数銘柄のどこで問題が起きたか判断しにくくなります。

Print("RATES_LOAD: symbol=", symbol,
      " tf=", EnumToString(tf),
      " requested=10 copied=", copied,
      " reason=", reason);

ログは多ければよいわけではありません。通常時はsummary、異常時はreason付き詳細、検証時はdebug inputで詳細化する構成が扱いやすくなります。

開発依頼前に整理する仕様

複数銘柄・複数時間足を扱うEAやインジケーターを開発依頼する場合は、対象銘柄と対象時間足だけでなく、何を参照し、どのタイミングで確認し、失敗時にどう扱うかを整理してください。

仕様整理表

整理項目記入内容補足
対象種別EA / インジケーター / パネルEA発注機能の有無も分ける
チャート銘柄設置する銘柄現在チャート基準か確認
参照銘柄追加で見る銘柄一覧実シンボル名で記載する
参照時間足M5、M15、H1など複数ある場合は一覧化する
取得データOHLC、MA、ATR、独自インジなどCopyRatesかCopyBufferかに関係
判定タイミング毎tick、新バー、OnTimer負荷と再現性に関係
確定足/未確定足shift 0 / shift 1以降結果が変わるため明記する
失敗時処理skip、warning、停止、表示のみ静かに壊れないようにする
ログINIT、DATA_SKIP、SUMMARYなど問い合わせ前確認に使う
バックテスト条件期間、銘柄、時間足、初期条件再現性のために記録する

スクリーンショットとログも整理する

既存EAや既存インジケーターの改修依頼では、対象ファイル名、バージョン、setファイル、Expertsログ、Journalログ、スクリーンショット、発生時刻を整理してください。特に複数銘柄・複数時間足では、どの銘柄・時間足で問題が出ているかを明確にします。

次に読む技術講座

この講座とあわせて確認すると、MT5・MQL5開発、検証、不具合調査の流れを整理しやすくなります。

No講座確認できること
LEARN-010MQL5時系列データ・価格取得完全ガイドCopyRates・時系列データ取得を確認する
LEARN-017MQL5ロット・証拠金・銘柄仕様完全ガイド銘柄仕様・volume step・tick valueを確認する
LEARN-020MQL5イベント処理完全ガイドOnTimer更新とイベント分離を確認する
LEARN-022MQL5長時間稼働・安定化完全ガイド複数銘柄EAの長時間稼働を確認する

次に確認するページ

技術講座を確認した後、導入・商品確認・開発相談・不具合報告へ進む場合は、以下のページも確認してください。

ページ確認できること
技術講座一覧MT5・MQL5・EA開発に関する技術講座を順番に確認できます。
導入ガイドEA、インジケーター、補助ツールを導入する前の確認事項を整理できます。
商品一覧EAファンクラブで扱う補助ツール、インジケーター、コピーEAなどを確認できます。
開発代行ページEA、インジケーター、補助ツールの新規作成・改修相談を確認できます。
不具合報告・サポート依頼ログ、スクリーンショット、再現手順を整理して相談する場合に確認できます。

よくある質問

複数銘柄EAは1つのチャートで動かせますか?

技術的には、1つのチャートに設置したEAから複数銘柄のデータを参照できます。ただし、参照銘柄名、Market Watch、履歴データ、ポジション管理、ログ設計を整理する必要があります。

他時間足のデータはいつ確定しますか?

時間足ごとにローソク足の確定タイミングが異なります。上位足を参照する場合は、未確定足を使うのか、確定足だけを使うのかを仕様として決めてください。

複数銘柄にするとEAは重くなりますか?

参照銘柄数、時間足数、取得本数、indicator handle数、CopyBuffer回数、ログ量が増えるため、単一銘柄より負荷は増えやすくなります。更新頻度や取得対象を整理することが重要です。

バックテストで複数銘柄EAは注意が必要ですか?

注意が必要です。テスト銘柄だけでなく、参照銘柄や参照時間足のデータ取得状態を確認してください。ログでは、どの銘柄・時間足の取得に成功または失敗したかを記録すると確認しやすくなります。

サフィックスがある銘柄はどう扱いますか?

MT5上の実シンボル名を使います。一般的な銘柄名ではなく、Market Watchやチャート上で確認できる正確な名称を仕様として記録してください。

Magic Numberは銘柄ごとに分けるべきですか?

EA仕様によります。複数銘柄でポジション管理を行う場合は、symbol、magic、direction、strategy idなどを分けて管理できる設計が必要です。参照だけの銘柄と管理対象の銘柄も分けてください。

CopyRatesとiMAはどう使い分けますか?

ローソク足のOHLCや時刻を取得する場合はCopyRates、移動平均などのインジケーター値を取得する場合はiMAでhandleを作成し、CopyBufferで値を取得します。

開発依頼時にどの銘柄と時間足を伝えるべきですか?

チャート銘柄、参照銘柄、参照時間足、取得したいデータ、確定足か未確定足か、更新タイミング、失敗時の扱いを伝えてください。実シンボル名、setファイル、ログ、スクリーンショットもあると確認しやすくなります。

現在チャート以外の銘柄でエラーが出た場合、どこを見ればよいですか?

まず銘柄名、サフィックス、Market Watch登録、CopyRatesの戻り値、CopyBufferの戻り値、履歴データ不足、ログのDATA_SKIP reasonを確認します。

複数時間足の表示パネルを作る時の注意点は何ですか?

時間足ごとの確定タイミング、更新頻度、表示項目数、Object数、ログ量を整理してください。表示だけの状態と内部判定状態を分けることも重要です。

まとめ

MQL5で複数銘柄・複数時間足を扱う場合は、現在チャートだけを前提にした設計では不十分です。チャート銘柄、参照銘柄、参照時間足、取得方法、データ不足、同期状態、サフィックス、負荷、バックテスト条件を分けて整理する必要があります。

ローソク足データにはCopyRates、インジケーター値にはindicator handleとCopyBufferを使います。取得できなかった場合は、銘柄名不備、履歴不足、handle未準備、同期待ちなどのreasonを分けてログに残します。

学習内容を確認しても整理が難しい場合は、EA名、バージョン、setファイル、Expertsログ、Journalログ、発生時刻、スクリーンショットを整理したうえで相談してください。

ABOUT ME
記事URLをコピーしました