技術講座

MQL5クラス・構造体・配列設計完全ガイド|EA開発で使うデータ整理の基本

EAファンクラブ

MQL5でEA、インジケーター、スクリプト、補助ツールを作る時、最初は変数と関数だけでも実装できます。

しかし、機能が増えてくると、ロジックごとの状態、ポジション情報、インジケーター値、外部連携状態、通知状態、ログ設定、UI表示状態、バックテスト用の一時情報などを整理する必要が出てきます。

これらをすべてグローバル変数だけで扱うと、どの関数がどの状態を変更しているのか分かりにくくなり、改修時の影響範囲も追いにくくなります。

この記事では、MQL5でEAやインジケーターを保守しやすく作るために、変数、配列、構造体、クラス、includeファイル、mqh、runtime状態、複数ロジックEAの状態管理、position snapshot、配列範囲エラー対策を整理します。

このページは、MT5 / MQL5の技術学習記事です。特定の取引判断、売買タイミング、ロット、銘柄、運用結果を案内するものではありません。

この記事で確認すること

確認項目確認する内容
変数・配列・構造体・クラスの違い単一値、複数値、関連データ、状態と処理のまとまりをどう使い分けるか確認します。
配列を使う場面価格データ、インジケーターバッファ、複数ロジック、ポジション一覧、ログ集計を整理します。
構造体を使う場面LogicState、PositionSnapshot、SignalResult、RiskResultなど、関連する値をまとめる方法を確認します。
クラスを使う場面注文処理、ログ管理、外部連携、UI表示、状態管理など、データと処理をまとめる考え方を確認します。
include / mqhEA本体を肥大化させず、責務ごとにファイルを分ける考え方を整理します。
runtime状態管理input初期値、OnInit初期化、稼働中状態、永続化状態、リセット処理を分けて確認します。
複数ロジックEALogic ID、Magic Number、signal、risk、exit、ログタグをロジック別に分ける方法を確認します。
配列範囲エラー対策CopyRates、CopyBuffer、ArraySize、ArrayResize、AS_SERIES、index範囲を確認します。
開発依頼前の整理mq5、mqh、setファイル、Expertsログ、Journalログ、再現条件を整理します。

変数・配列・構造体・クラスの違い

MQL5では、単一の値を扱う変数、同じ型の値を複数扱う配列、関連する値をまとめる構造体、データと処理をまとめるクラスを使い分けます。

どれを使うかは、コードの規模、扱うデータの種類、将来の改修予定、ログ確認のしやすさによって変わります。

種類主な役割向いている場面注意点
変数1つの値を保持するロット値、ON/OFF、カウント、価格、時刻数が増えすぎると影響範囲を追いにくくなります。
配列同じ型の値を複数保持する価格データ、インジケーター値、複数ロジック状態、履歴範囲外アクセスや取得本数不足に注意します。
構造体関連する複数の値をまとめるポジション情報、signal結果、risk結果、ロジック状態処理までまとめたい場合はクラス化も検討します。
クラスデータと処理をまとめる注文管理、ログ管理、外部連携、UI管理、状態管理過剰にクラス化すると逆に読みにくくなる場合があります。
include / mqhコードを別ファイルへ分ける共通型、クラス、ユーティリティ、ログ処理、注文処理依存関係と読み込み順を整理する必要があります。

小さなEAでは、変数と関数だけで十分な場合があります。一方で、複数ロジック、複数ポジション、外部連携、通知、パネル表示、ログ制御を扱うEAでは、構造体やクラスを使って状態を整理すると保守しやすくなります。

配列を使う場面

配列は、同じ種類の値を複数まとめて扱う時に使います。

MQL5では、価格データ、インジケーターバッファ、複数ロジックの状態、複数ポジションの情報、ログ用の集計値などで配列を使う場面があります。

用途配列で扱う例確認すること
価格データ終値、高値、安値、MqlRates配列取得本数、shift、時系列順、AS_SERIES
インジケーター値CopyBufferで取得した値バッファ番号、取得本数、EMPTY_VALUE
複数ロジックロジック別ON/OFF、Magic、状態ロジック番号と配列indexの対応
複数ポジションticket、volume、price、profit件数、symbol、magic、direction
ログ集計GATE通過数、エラー数、通知数初期化、リセット、出力タイミング
最適化・検証条件別のカウント、検証結果、内部統計テスト開始時の初期化と終了時の集計

配列を使う時は、配列サイズとindex範囲の確認が重要です。特に、CopyRatesやCopyBufferの戻り値が想定本数より少ない時に、そのまま配列を参照すると問題につながる場合があります。

構造体を使う場面

構造体は、関連する複数の値を1つのまとまりとして扱いたい時に使います。

たとえば、ロジック状態、ポジション情報、signal判定結果、risk判定結果、ログ出力用の状態などは、構造体にまとめると読みやすくなる場合があります。

struct LogicState
{
   int      logic_id;
   long     magic;
   bool     enabled;
   datetime last_signal_time;
   string   last_reason;
};

上記は、状態をまとめる考え方を示す最小例です。取引条件や運用設定を示すものではありません。

構造体にまとめる候補含める値の例メリット
LogicStatelogic_id、magic、enabled、last_reasonロジック別状態をまとめて確認できます。
PositionSnapshotticket、symbol、magic、volume、profit保有状態を一覧化しやすくなります。
SignalResultdirection、score、gate_ok、reason判定結果と理由を分けて渡せます。
RiskResultallowed、block_reason、normalized_lot新規許可と停止理由を整理できます。
ExitStatetrail_active、close_reason、last_exit_time保有後の決済管理を追いやすくなります。
NotifyStatelast_send_time、last_result、throttle_state通知状態と通知抑制を管理しやすくなります。

構造体は、関連する値をまとめたい時に便利です。ただし、1つの構造体にすべてを詰め込みすぎると意味が分かりにくくなるため、目的ごとに小さく分ける方が確認しやすくなります。

クラスを使う場面

クラスは、データと処理をひとまとまりにしたい時に使います。

MQL5では、注文管理、ポジション管理、ログ管理、外部連携、UIパネル管理、設定管理などでクラスを使うことがあります。

class CLogLimiter
{
private:
   datetime m_last_time;

public:
   CLogLimiter()
   {
      m_last_time = 0;
   }

   bool CanPrint(const int interval_sec)
   {
      datetime now_time = TimeCurrent();

      if(now_time - m_last_time >= interval_sec)
      {
         m_last_time = now_time;
         return true;
      }

      return false;
   }
};

上記は、ログ出力間隔を管理する考え方を示す最小例です。特定のEA運用や取引設定を示すものではありません。

クラス化しやすい処理まとめる内容注意点
注文処理注文送信、retcode確認、実行ログsignal層とexecution層を混同しないようにします。
ポジション管理保有検索、snapshot作成、Magic別集計Hedging / Nettingの違いを確認します。
ログ管理カテゴリ、抑制、出力形式、集計ログ過多を避ける設計にします。
外部連携WebRequest、CSV、送信結果、外部状態取得URLやtokenの実値をログに出さないようにします。
UIパネルボタン、ラベル、表示更新、クリック処理表示系と判定系を分けます。
設定管理input値、runtime値、保存値の整理input初期値と稼働中状態を混同しないようにします。

クラスは便利ですが、すべてをクラス化すればよいわけではありません。小さな処理まで過度にクラス化すると、かえって追いにくくなる場合があります。

includeファイルとmqhの役割

EA本体のmq5ファイルが大きくなる場合、共通処理やクラス定義をincludeファイルへ分けることがあります。

MQL5では、mqhファイルを使って、共通定義、構造体、クラス、ユーティリティ関数、ログ処理などを分離できます。

分割対象ファイル例入れる内容確認すること
共通定義CommonTypes.mqhenum、struct、共通常数、型定義他ファイルから参照される基本型をまとめます。
ログ処理LogUtil.mqhPrintFormat補助、ログ抑制、カテゴリ管理ログ形式と出力量を揃えます。
注文処理TradeExecutor.mqh注文リクエスト、retcode確認、実行ログsignal判定と注文実行を分けます。
ポジション管理PositionSnapshot.mqh保有検索、snapshot作成、Magic別集計riskやexitへ渡すデータを整理します。
外部連携ExternalControl.mqhWebRequest、CSV、外部状態取得機密値をログへ出さない設計にします。
UI表示PanelView.mqhボタン、ラベル、ステータス表示表示系と判定系を分離します。

include分割では、ファイルを分けること自体が目的ではありません。責務ごとに分け、どこを見ればよいか分かる状態にすることが目的です。

グローバル変数を増やしすぎない考え方

MQL5では、グローバル変数を使うこと自体は珍しくありません。

ただし、EAの規模が大きくなるにつれて、グローバル変数が増えすぎると、どの関数がどの状態を変更しているのか分かりにくくなります。

状態問題点整理方法
グローバル変数が多い影響範囲が追いにくい関連する値を構造体やクラスにまとめます。
似た名前の変数が多い誤参照しやすい命名ルールを決めます。
runtime状態が混在再起動時の挙動が分かりにくいinput、runtime、persistを分けます。
複数ロジックが同じ変数を使うロジック間で干渉するロジック別stateを用意します。
表示用と判定用が混在UI不具合が判定に影響する表示系と判定系を分離します。
外部連携状態が散在通信失敗や認証状態を追いにくいExternalStateやAuthStateとして整理します。

すべてのグローバル変数をなくす必要はありません。重要なのは、何をグローバルに置くのか、何を構造体やクラスへまとめるのかを意図的に決めることです。

EAの状態管理を構造化する方法

EAでは、現在の稼働状態、認証状態、外部制御状態、signal結果、risk結果、exit状態、通知状態などを管理することがあります。

これらを1つずつ別変数にすると、規模が大きくなった時に追いにくくなります。状態を目的別に構造化すると、ログ確認や改修がしやすくなります。

状態カテゴリ含める値の例確認するログ
RuntimeStateinitialized、paused、last_tick_timeINIT、RUNTIME
SignalStatedirection、score、gate_ok、reasonSIGNAL、GATE、SCORE
RiskStateallowed、block_reason、normalized_lotRISK
ExitStatetrail_active、close_reason、last_exit_timeEXIT
AuthStateauth_ok、masked_account、expiry_stateAUTH
NotifyStatelast_send_time、last_result、throttle_stateNOTIFY
PanelStatevisible、selected_tab、last_update_timeUI、OBJECT

EAの状態管理では、input初期値とruntime状態を混同しないことが重要です。Inputs欄に表示される値と、稼働中に変化した状態は分けて管理してください。

複数ロジックEAでのデータ分離

複数ロジックEAでは、ロジックごとにsignal、ポジション、Magic Number、risk、exit、ログ、設定を分ける必要があります。

ロジック1とロジック2が同じ変数や同じMagic Numberを使っていると、どちらの処理でエントリーしたのか、どちらのexit条件で決済したのかが分かりにくくなります。

分離する項目理由確認すること
Logic IDロジックを識別するため配列indexとLogic IDの対応を固定します。
Magic Numberポジション識別のためロジックごとに重複していないか確認します。
SignalState判定結果を分けるためBUY / SELL / NO ENTRYの理由を分けます。
RiskState停止理由を分けるためロット、最大数、外部停止を分けます。
ExitState保有後の管理を分けるためトレール、時間決済、反対条件を分けます。
PositionSnapshot保有状態を分けるためsymbol、magic、direction、ticketを分けます。
LogTagログ追跡しやすくするためLOGIC01、LOGIC02などの表記を揃えます。
struct LogicRuntime
{
   int    logic_id;
   long   magic;
   bool   enabled;
   string last_signal_reason;
};

LogicRuntime g_logic_states[4];

この例は、複数ロジックの状態を配列で持つ考え方を示すものです。実際のEAでは、初期化、index範囲、Magic Numberの重複確認、ログ出力をあわせて設計してください。

position snapshotの考え方

position snapshotとは、現在保有しているポジション情報を、ある時点の状態として整理しておく考え方です。

MQL5では、保有ポジションをその場で毎回探すだけでなく、symbol、magic、ticket、volume、price、profit、directionなどを一度整理してから、riskやexitで使う設計にすることがあります。

snapshot項目内容使う場面
ticketポジションまたは注文識別決済、変更、ログ照合
symbol対象銘柄チャート銘柄・対象銘柄の確認
magicロジック識別EA別・ロジック別管理
directionBUY / SELL方向別集計、方向別決済
volume保有量ロット集計、部分決済確認
open_price建値損益、距離、exit条件
profit現在損益risk、exit、表示
comment注文コメントEAやロジック識別の補助

snapshotは、保有状態を固定的に記録するというより、特定時点の状態を整理して後続処理へ渡す考え方です。最新状態が必要な処理では、取得タイミングと更新タイミングを明確にしてください。

配列範囲エラーを避ける方法

配列範囲エラーは、配列の存在しないindexへアクセスした時に発生します。

MQL5では、CopyRatesやCopyBufferで取得できた本数が不足しているのに、想定本数がある前提で配列を読むと、実行時エラーや誤判定につながる場合があります。

原因起きやすい場面対策
取得本数不足CopyRates / CopyBufferの戻り値未確認戻り値を確認してから参照します。
index計算ミスロジック番号と配列indexのずれindex変換ルールを固定します。
配列初期化漏れ起動直後やリセット後ArrayResizeや初期値設定を確認します。
ループ条件ミスfor文の終了条件i < ArraySize(array)を確認します。
時系列配列の向きAS_SERIESの扱い違いshift 0と配列indexの意味を確認します。
空配列参照対象ポジションがない時件数0の場合の分岐を用意します。
削除中の配列参照要素削除後に同じindexを読む時削除順序や再取得を確認します。
double close_values[];

int copied = CopyClose(_Symbol, PERIOD_M15, 0, 3, close_values);

if(copied &lt; 3)
{
   PrintFormat("DIAG/DATA close_not_enough requested=%d copied=%d", 3, copied);
   return;
}

double last_closed_bar = close_values[1];

この例は、配列を読む前に取得本数を確認する考え方を示すものです。実際の処理では、配列の向き、shift、必要本数、データ不足時の扱いを仕様として決めてください。

初期化・リセット・runtime状態の分離

EAでは、input初期値、OnInitで作る初期状態、稼働中に変わるruntime状態、再起動後も保持する状態を分けて考えます。

これらを混同すると、設定を変えていないのに状態が変わる、リセット後に一部だけ古い状態が残る、時間足変更後に挙動が変わる、といった問題につながる場合があります。

分類意味確認すること
input初期値EA起動時に読み込む設定ロット、時間、ON/OFF、Magic NumberInputs欄とsetファイルで確認します。
OnInit初期化起動時に作る内部状態handle、配列、state初期化INITログで確認します。
runtime状態稼働中に変わる状態ボタンON/OFF、last signal、last send time再起動時の扱いを決めます。
persist状態再起動後も保持したい状態一部のUI状態、許可状態、前回選択タブ保存・復元ルールを決めます。
リセット処理状態を初期化する処理配列クリア、オブジェクト削除、カウンタ初期化削除対象と保持対象を分けます。

input初期値とruntime状態の分離は、不具合調査やサポート対応でも重要です。再現条件を確認する時は、setファイルだけでなく、稼働中に変更された状態がないかも確認してください。

保守しやすい命名とコメント

変数、構造体、クラス、includeファイルを整理しても、命名が曖昧だと保守しにくくなります。

名前は、何を表すのか、どの層のデータなのか、runtime状態なのか、input設定なのかが分かるように付けると確認しやすくなります。

対象分かりにくい例整理した例
ロジック状態flag1、state2logic_state、signal_state
停止理由msg、reasonrisk_block_reason、gate_skip_reason
配列arr、dataclose_values、logic_states
クラスCMain、CWorkCTradeExecutor、CLogLimiter
includecommon.mqhPositionSnapshot.mqh、LogUtil.mqh
runtime状態enabledruntime_entry_enabled
表示状態text、colorpanel_status_text、panel_status_color

コメントは、多すぎても少なすぎても読みづらくなります。何をしているかではなく、なぜその処理が必要なのか、どの責務に属するのかを補足するコメントが有効です。

悪い設計と整理された設計の比較

MQL5の設計では、動くことだけを優先すると、後から改修しにくいコードになることがあります。

特に、大規模EA、複数ロジックEA、外部連携EA、パネル付きEAでは、状態管理と責務分離が重要になります。

項目整理しにくい設計例整理された設計例
状態管理グローバル変数が散らばっているRuntimeStateやLogicStateにまとめる
複数ロジックロジックごとの状態が混在しているlogic_idとMagicで分離する
ログPrintが大量に散在しているカテゴリ別ログにする
配列戻り値を見ずにindex参照している取得本数を確認してから読む
include何でも1ファイルへ詰め込む責務ごとにmqhへ分ける
UI表示状態と判定状態が同じ変数になっている表示系と判定系を分ける
初期化一部の状態がリセットされないOnInit、reset、persistを分ける
外部連携URLや送信状態が各所に散らばっているExternalStateやNotifyStateにまとめる

整理された設計とは、必ず複雑なクラス構成にすることではありません。変更点、影響範囲、ログ、再現条件を追いやすい構造にすることです。

開発依頼時に伝えるべき構造情報

既存EAの改修、大規模EAの整理、複数ロジック化、外部連携追加を相談する場合は、現在の構造情報を整理しておくと確認しやすくなります。

ソースコードがある場合は、mq5本体、includeファイル、setファイル、ログ、再現条件をセットで整理してください。ソースコードがない場合でも、Inputs欄、画面表示、ログ、動作説明から構造を推定できる場合があります。

伝える情報内容注意点
対象ファイルmq5、mqh、ex5など最新版か確認します。
include構成分割ファイル一覧不足ファイルがないか確認します。
ロジック数Logic1〜LogicNなどMagic Numberとの対応を整理します。
状態管理グローバル変数、構造体、クラスどこで更新されるか確認します。
setファイルinput設定認証情報やURLを確認してから送ります。
ExpertsログINIT、GATE、RISK、EXECUTIONなど発生前後を含めます。
再現条件銘柄、時間足、発生時刻、操作同条件で確認できるようにします。
要望内容何を整理・追加・改修したいか表示変更か判定変更かを分けます。

送ってはいけない情報

ソース、setファイル、ログ、スクリーンショットを送る場合でも、機密情報はそのまま送らないでください。

送らない情報理由対応
口座番号の全桁確認に不要な範囲まで共有される可能性があります。必要に応じて一部をマスクします。
ログインパスワード口座へアクセスできる情報です。送らないでください。
投資家パスワード閲覧専用であっても共有不要です。送らないでください。
Webhook URL第三者が通知先へ送信できる可能性があります。全文をマスクします。
GAS URL外部連携先に関係する情報です。全文をマスクします。
APIキー・認証トークン外部サービスや認証に関係します。送らないでください。
個人情報確認に不要な情報が含まれる可能性があります。スクリーンショットやログから削除します。
第三者の情報関係者以外の情報が含まれる場合があります。共有前に削除します。

送ってよいか判断できない情報は、そのまま送らず、伏せ字にするか削除してください。

MQL5クラス・構造体・配列設計チェック表

クラス・構造体・配列設計を見直す時は、以下を確認してください。

チェック項目確認内容
変数、配列、構造体、クラスの役割を分けている単一値、複数値、関連データ、処理付き状態を混同していないか確認します。
グローバル変数を増やしすぎていない関連する値を構造体やクラスへまとめられるか確認します。
関連する値を構造体へまとめているLogicState、PositionSnapshot、RiskResultなどのまとまりを確認します。
必要な箇所だけクラス化している注文処理、ログ管理、外部連携、UI管理などを目的ごとに確認します。
include / mqhの分割目的が明確になっているファイルを分ける理由と責務を説明できるか確認します。
複数ロジックEAではロジック別stateを分けているLogic ID、Magic Number、signal、risk、exitを分離します。
position snapshotの項目を整理しているticket、symbol、magic、direction、volume、profitを確認します。
配列を読む前に戻り値を確認しているCopyRates、CopyBuffer、CopyCloseなどの取得本数を確認します。
input初期値、runtime状態、persist状態を分けているInputs欄と稼働中に変化する状態を混同しないようにします。
表示系と判定系を分けているUIの表示更新が判定ロジックへ不要に影響しないようにします。
命名とコメントが責務に沿っている何の値か、どの層の状態か、どこで更新されるかを追えるようにします。
setファイル、Expertsログ、Journalログを保存している再現条件を後から確認できるようにします。
口座番号や認証情報をマスクしている共有前に機密情報を確認します。

よくある質問

クラスを使わなくてもEAは作れますか?

作れます。小規模なEAでは、変数と関数だけで十分な場合もあります。ただし、複数ロジック、外部連携、通知、UI、ログ管理が増えると、クラスや構造体で整理した方が保守しやすくなる場合があります。

構造体とクラスはどう使い分けますか?

関連する値をまとめたいだけなら構造体が向いています。状態に加えて、その状態を操作する処理もまとめたい場合はクラスを検討します。過剰にクラス化すると読みにくくなるため、目的に応じて使い分けます。

配列範囲エラーはなぜ起きますか?

存在しないindexを参照した時に起きます。CopyRatesやCopyBufferの取得本数不足、ループ条件ミス、配列初期化漏れ、ロジック番号と配列indexのずれなどが原因になる場合があります。

includeファイルを分けるメリットは何ですか?

責務ごとにコードを分けることで、注文処理、ログ処理、ポジション管理、外部連携、UIなどの確認場所を整理できます。ただし、分割しすぎると依存関係が追いにくくなるため、目的を明確にして分けることが重要です。

複数ロジックEAでは何を分けるべきですか?

Magic Number、signal状態、risk状態、exit状態、position snapshot、ログタグ、input設定の意味をロジックごとに分ける必要があります。ロジック間で同じ状態を共有すると、調査や改修が難しくなる場合があります。

グローバル変数が多いと何が問題ですか?

どの関数がどの状態を変更しているのか追いにくくなります。影響範囲が広くなり、改修時に予期しない挙動が出る場合があります。関連する値は構造体やクラスにまとめると確認しやすくなります。

配列と構造体を組み合わせてもよいですか?

可能です。複数ロジックの状態を管理する場合などは、構造体を配列で持つ設計が有効な場合があります。ただし、indexとロジック番号の対応、初期化、範囲チェックを明確にしてください。

UIパネルの状態も構造体で管理できますか?

管理できます。ただし、表示用の状態とEAの判定用状態は分けてください。UIの表示更新が遅れたり失敗したりしても、判定ロジックに不要な影響を与えない設計が重要です。

関連する技術講座

クラス、構造体、配列設計を確認する場合は、MQL5開発入門、関数、EA設計、デバッグ、価格データ、注文管理、マルチシンボル設計もあわせて確認してください。

技術講座確認できること
MQL5開発入門MetaEditor、EA、インジケーター、イベント関数、コンパイルエラーの基本を確認できます。
MQL5関数辞書EA・インジケーター開発で使う主要関数と役割を確認できます。
MQL5 EA設計パターン完全ガイドsignal、execution、risk、exit、auth、external control、notificationの責務分離を確認できます。
MQL5デバッグ・ログファースト開発完全ガイドPrint、Expertsログ、再現条件、ログ設計、原因切り分けを確認できます。
MQL5時系列データ・価格取得完全ガイドCopyRates、CopyBuffer、価格配列、shift、現在足と確定足の確認に使えます。
MQL5注文・ポジション・履歴管理完全ガイドOrderSend、Position、Deal、History、MqlTradeRequest、MqlTradeResultの基本を確認できます。
MQL5マルチシンボル・マルチタイムフレーム完全ガイド複数銘柄、複数時間足、CopyRates、データ構造、同期確認を整理できます。

関連する確認ページ

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

確認ページ確認できること
技術講座一覧MT5・MQL5・EA開発に関する技術講座を順番に確認できます。
導入ガイドEA、インジケーター、補助ツールを導入する前の確認事項を整理できます。
MT5開発依頼前に用意する資料まとめ仕様書、setファイル、ログ、スクリーンショットなど、開発相談前の資料整理に使えます。
開発代行ページEA、インジケーター、補助ツールの新規作成・改修相談を確認できます。
不具合報告・サポート依頼ログ、スクリーンショット、再現手順、利用環境を整理して相談する方法を確認できます。

購入前・利用前に確認するページ

EA、インジケーター、補助ツールを利用する前には、商品一覧、動作環境、購入前確認、利用上の注意も確認してください。

ページ確認できること
商品一覧EAファンクラブで扱う補助ツール、インジケーター、コピーEAなどを確認できます。
動作環境MT4 / MT5、Windows PC、VPS、外部連携などの動作環境を確認できます。
購入前確認事項購入前に確認しておきたい対応環境、利用条件、確認事項を整理できます。
免責事項・リスク説明商品の利用上の注意、責任範囲、リスク説明を確認できます。

まとめ

MQL5でEAやインジケーターを保守しやすく作るには、変数、配列、構造体、クラス、includeファイルの役割を分けて考えることが重要です。

配列は複数の値を扱う時に便利ですが、取得本数やindex範囲を確認しないと、配列範囲エラーや誤判定につながる場合があります。構造体は関連する値をまとめる時に、クラスは状態と処理をまとめる時に役立ちます。

大規模EAや複数ロジックEAでは、Magic Number、signal、risk、exit、position snapshot、ログタグをロジックごとに分離すると、検証や改修がしやすくなります。

設計を確認しても整理が難しい場合は、EA名、バージョン、setファイル、Expertsログ、Journalログ、発生時刻、スクリーンショットを整理したうえで相談してください。口座番号、Webhook URL、GAS URL、APIキー、認証トークンなどの実値は、必要に応じてマスクしてください。

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