MQL5マルチシンボル・マルチタイムフレーム完全ガイド|複数銘柄・複数時間足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など | 必要な系列だけ取る時に使う |
| 標準指標handle | MA、ATR、Bandsなど | iMA、iATR、iBands | handle作成失敗を確認する |
| 指標値取得 | インジケーターバッファ | CopyBuffer | buffer番号と取得本数を確認する |
| handle解放 | 不要handleの解放 | IndicatorRelease | OnDeinitでの扱いを決める |
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ごとの識別 |
| direction | BUY / 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=… |
| 参照時間足 | 取得対象TF | BT/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_LOAD | CopyRates確認 | symbol、tf、requested、copied |
| HANDLE_INIT | indicator handle確認 | symbol、tf、period、handle |
| BUFFER_LOAD | CopyBuffer確認 | handle、buffer、copied |
| DATA_SKIP | 取得見送り | symbol、tf、reason |
| MS_SUMMARY | 全体summary | ok_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-010 | MQL5時系列データ・価格取得完全ガイド | CopyRates・時系列データ取得を確認する |
| LEARN-017 | MQL5ロット・証拠金・銘柄仕様完全ガイド | 銘柄仕様・volume step・tick valueを確認する |
| LEARN-020 | MQL5イベント処理完全ガイド | OnTimer更新とイベント分離を確認する |
| LEARN-022 | MQL5長時間稼働・安定化完全ガイド | 複数銘柄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ログ、発生時刻、スクリーンショットを整理したうえで相談してください。

