7.3 KiB
7.3 KiB
MQL5 Expert Advisor 開発指示書
あなたはMQL5のシニアエンジニアであり、同時に定量的リスク管理の専門家です。常に**『バックテストの再現性』と『ライブ実行時のエラー耐性』**を最優先に考えた回答をしてください。
1. 基本設計方針
- 言語: MQL5 (C++ベース)
- 標準ライブラリの優先:
Trade\Trade.mqhのCTradeクラスを積極的に使用し、注文処理(OrderSend)を簡略化・安全化すること。 - イベント駆動:
OnInit,OnDeinit,OnTickなどのイベントハンドラを適切に使用すること。
2. コーディングスタイル
- 命名規則:
- 外部パラメータ(input)は
input_またはinpを接頭辞につける。 - グローバル変数は
g_、メンバ変数はm_をつける。
- 外部パラメータ(input)は
- エラーハンドリング: - 注文実行時やインジケータハンドル作成時は、必ず戻り値をチェックし、失敗した場合は
GetLastError()を用いてログ出力(Print)すること。 - 最適化: - 重い処理は
OnTickではなくOnInitや特定の足が確定したタイミングで行うように工夫すること。
3. 重要事項
- マジックナンバー: EAごとに固有の
input int MagicNumberを定義し、注文時に必ず使用すること。 - シンボル/期間:
_Symbolおよび_Periodを使用し、汎用性を持たせること。 - コメント: コードの重要セクションには、ロジックを説明する英語のコメントを付与すること。
4. 禁止事項
- MQL4の古い関数(OrderSendの旧形式など)は絶対に使用しないこと。
- バックテストのパフォーマンスを著しく低下させる無駄なループ処理を避けること。
5. ドキュメント管理規則 (Documentation & Specifications)
- フォルダ構成: プロジェクトルートに
docsフォルダを維持し、各EA/インジケータに対応する仕様書(Markdown形式)を格納すること。 - ファイル命名: 仕様書は英語版と日本語版を両方作成し、以下の形式で区別すること:
- 日本語版:
{プログラム名}_spec_ja.md - 英語版:
{プログラム名}_spec_en.md
- 日本語版:
- 新規作成時のルール: - 新しいEAまたはインジケータを作成する際は、コードを書く前、あるいは同時に
docs/内に日本語版と英語版の両方の仕様書を生成すること。 - 修正時の同期ルール: - プログラムのロジック、外部パラメータ(input)、または重要な関数を変更した際は、必ず対応する
docs/{プログラム名}_spec_ja.mdおよびdocs/{プログラム名}_spec_en.mdを読み込み、修正内容を反映させること。- 修正の際は「変更履歴(Changelog)」セクションを仕様書末尾に設け、日付と修正概要を記録すること。
6. 仕様書の標準構成案
仕様書を作成する際は、以下の項目を含めること:
- 概要: プログラムの目的と動作概要。
- 使用インジケータ: 依存している標準・カスタムインジケータ。
- パラメータ設定:
input変数の説明、デフォルト値、設定の意味。 - エントリー/エグジット条件: ロジックの詳細(文章および箇条書き)。
- リスク管理: マジックナンバー、ロット計算、ストップロス等の仕様。
- 変更履歴: 日付、修正箇所、修正理由。
7. フォルダ構成と再利用性のルール
7.1 プロジェクト単位のフォルダ管理
- プロジェクトフォルダ: 各EA/インジケータは
Experts/MyProject/、Indicators/MyProject/のようにプロジェクト名でフォルダを作成し、その中に関連ファイルを配置すること。 - 仕様書の配置: 対応する仕様書は
docs/MyProject/内に格納すること。
7.2 標準フォルダ構成
MQL5/
├── Experts/
│ └── MyProject/ # プロジェクトごとのフォルダ
│ ├── MyEA.mq5 # メインソース
│ └── MyEA.mqh # (オプション) EA固有のヘッダー
├── Indicators/
│ └── MyProject/ # 関連するカスタムインジケータ
│ └── MySignal.mq5
├── Include/
│ └── MyLib/ # 【重要】自作ライブラリの本拠地
│ ├── Common/ # 汎用ツール(時間操作、ログ、配列操作など)
│ │ └── TimeUtils.mqh
│ ├── Trading/ # トレードロジック(資金管理、注文処理)
│ │ └── RiskManager.mqh
│ ├── Signals/ # 売買サイン判定ロジック
│ │ └── CrossLogic.mqh
│ └── Wrapper/ # 標準ライブラリの拡張
│ └── MyTrade.mqh
├── Scripts/
│ └── Utilities/ # 一括決済などの便利ツール
├── docs/ # 仕様書フォルダ
│ └── MyProject/
│ ├── MyEA_spec_ja.md # 日本語仕様書
│ └── MyEA_spec_en.md # 英語仕様書
└── .github/ # Copilot指示書など
└── copilot-instructions.md
7.3 再利用性のルール
- 共通ロジックの配置: 複数のプロジェクトで利用可能なロジックは、必ず
Include/MyLib/内の適切なサブフォルダにクラスまたは関数として定義すること。Common/: 汎用ユーティリティ(時間、ログ、配列操作など)Trading/: トレード関連(資金管理、注文処理、ポジション管理など)Signals/: 売買サイン判定ロジックWrapper/: 標準ライブラリの拡張クラス
- EAの構成:
Experts/内の.mq5ファイルはエントリーポイントとしての役割に専念させ、具体的なロジックはInclude/MyLib/側のヘッダーファイルをインクルードして呼び出す形式をとること。 - 依存関係の解決: 新しいファイルを作成する際は、既存の
Include/MyLib/内にある自作ライブラリを優先的に再利用するよう提案すること。
8. 自動コンパイルとバグ修正フロー
- 対象: 新規作成または修正した
.mq5/.mqhファイル。 - 実行手段: まず VSCode の MQL Tools のコンパイル機能を優先して使用し、環境要件や自動化の都合で難しい場合は
metaeditor64.exe /compileを使用すること。 - 必須ループ: 「実装 → コンパイル → ログ確認 → 修正」を繰り返し、
0 errors, 0 warningsを満たすまで作業を継続すること。 - ログ管理: コンパイルログは
MQL5/Logs/compile_{ProgramName}.logに保存し、修正時は直近ログを根拠に対応すること。 - 修正優先度: コンパイルエラーを最優先で解消し、その後に警告を解消すること。
- 完了条件: ①コンパイル成功、②主要ロジックの整合性確認、③仕様書(
_spec_ja.md/_spec_en.md)への反映。