MQL5開発入門|MetaEditor・EA・インジケーター・イベント関数・コンパイルエラーの基本
MQL5開発を始める時は、いきなり複雑なEAやインジケーターを作ろうとするよりも、MT5とMetaEditorの関係、データフォルダ、MQL5フォルダ構成、ファイル種類、イベント関数、コンパイルエラー、ログ確認の流れを先に整理しておくことが重要です。
MQL5は、MT5上でEA、インジケーター、スクリプト、通知ツール、診断ツール、外部連携ツール、補助ツールなどを作るために使われる開発言語です。EAの売買ロジックだけでなく、チャート表示、アラート、CSV出力、WebRequest、Discord通知、Google Sheets連携、バックテスト補助、設定診断など、幅広い用途で使われます。
このページでは、MQL5を学び始める方、既存EAやインジケーターの改修を相談したい方、MetaEditorやコンパイルエラーの見方を確認したい方に向けて、MQL5開発の入口を体系的に整理します。既存記事の基本内容を残しつつ、開発環境、フォルダ構成、初回コンパイル、EAとインジケーターの違い、開発依頼前の整理まで含めて確認できるようにしています。
なお、この記事はMT5 / MQL5の開発画面、ファイル構成、イベント関数、エラー確認、ログ確認、開発依頼前整理を目的とした技術学習記事です。投資判断、売買タイミング、利益、勝率、損失回避、推奨ロット、特定ブローカーへの誘導を目的とした内容ではありません。
この記事で確認すること
- MQL5とは何か
- MT5とMetaEditorの関係
- MQL5開発環境を整える時の確認項目
- データフォルダとMQL5フォルダの違い
- Experts / Indicators / Scripts / Include / Libraries の使い分け
.mq5、.mqh、.ex5、.setの違い- EA、インジケーター、スクリプトの違い
- OnInit、OnTick、OnCalculate、OnTimerなどのイベント関数
- 初回コンパイルとコンパイルエラーの確認方法
- EA開発で分けて考える signal / filter / execution / risk / exit / notification
- インジケーター開発で確認するバッファ、表示、CopyBuffer
- 開発依頼前に整理する情報と送らない方がよい情報
MQL5を学ぶ前に知っておくこと
MQL5とは
MQL5は、MetaTrader 5上で動作するプログラムを作成するための言語です。MT5用のEA、インジケーター、スクリプト、ライブラリ、補助ツールを作る時に使われます。MT4用のMQL4とは似ている部分もありますが、注文処理、ポジション管理、イベント処理、データ取得の考え方には違いがあります。
MQL5を使うと、チャート上の情報を取得したり、インジケーターを表示したり、条件に応じて通知したり、ファイルへ記録したり、EAとして注文処理や決済処理を扱ったりできます。さらに、OnTimerによる定期処理、OnTradeTransactionによる取引イベント確認、OnChartEventによるパネル操作なども扱えます。
ただし、MQL5を学ぶ目的は、いきなり売買判断を作ることだけではありません。EAやインジケーターを正しく導入し、設定やログを確認し、エラー発生時に原因を切り分け、開発依頼前に必要な情報を整理できるようになることも重要です。
MQL5で作れる主なもの
MQL5で作れるものは、EAだけではありません。表示用のインジケーター、単発処理のスクリプト、共通部品として使うincludeファイル、通知や記録を補助するツール、WebRequestを使う外部連携ツールなども作成できます。
| 種類 | 主な役割 | 初心者が見るポイント |
|---|---|---|
| EA | チャート上で継続的に動作するプログラムです。自動売買、半裁量補助、通知、診断、ポジション管理などに使われます。 | 発注・決済の有無、Inputs、Magic Number、ログ、バックテスト可否を確認します。 |
| カスタムインジケーター | チャート上にライン、矢印、サブウィンドウ、計算結果などを表示するプログラムです。 | 表示、バッファ、描画、アラート、EAから値を取得できるかを確認します。 |
| スクリプト | 一度だけ実行する処理に向いています。ファイル出力、確認処理、一括操作などで使われます。 | 常時動作ではなく、一回実行で完了する処理かを確認します。 |
| ライブラリ | 共通処理をまとめる部品として使われます。 | 単体で動かすものではなく、他のファイルから呼び出す部品かを確認します。 |
| includeファイル | 関数、構造体、共通定義などを分割管理するためのファイルです。 | .mq5だけでなく、関連する.mqhも必要か確認します。 |
| 通知・診断ツール | Discord通知、CSV出力、Google Sheets連携、ログ診断などを補助します。 | 売買処理と通知処理を混同せず、送信失敗時のログを確認します。 |
公式リファレンスと学習記事の使い分け
MQL5を正確に学ぶには、公式リファレンスで関数名、イベント名、引数、戻り値、仕様を確認することが重要です。一方で、公式リファレンスだけでは、EA開発の責務分離、ログ設計、バックテスト確認、開発依頼前の整理までは分かりにくい場合があります。
そのため、公式リファレンスでは個別関数の正確な仕様を確認し、学習記事では「どの場面で使うのか」「どの順番で確認するのか」「失敗時にどこを見るのか」を整理するのがよいです。EAファンクラブでは、関数辞書、イベント処理、注文処理、ログ設計、開発依頼前資料を分けて確認できるように整理しています。
MQL5開発環境を整える前に確認すること
MQL5開発環境を整える時は、MT5本体、MetaEditor、データフォルダ、MQL5フォルダ、コンパイル結果、ログの確認場所を分けて理解する必要があります。コードの文法より先に、どこへ保存し、どこでコンパイルし、どのMT5で読み込むのかを確認してください。
複数のMT5をインストールしている場合、別のMT5のデータフォルダへファイルを保存してしまうことがあります。MetaEditorでコンパイルはできているのに、普段使っているMT5側のNavigatorに表示されない場合は、まずデータフォルダの対応関係を確認してください。
| 確認項目 | 内容 | 注意点 |
|---|---|---|
| MT5本体 | EA、インジケーター、スクリプトを実行するプラットフォームです。 | 自動売買許可、チャート、銘柄、時間足、Expertsログ、Journalログを確認します。 |
| MetaEditor | MQL5のソースコードを編集・コンパイルする開発環境です。 | 実際に使うMT5と同じデータフォルダを見ているか確認します。 |
| データフォルダ | MQL5ファイル、設定、ログ、コンパイル済みファイルが置かれる場所です。 | Windows上の見た目ではなく、MT5から開いたデータフォルダを基準にします。 |
| MQL5フォルダ | Experts、Indicators、Scripts、Include、Librariesなどを含むフォルダです。 | EAとインジケーターで配置先が違います。 |
| コンパイル結果 | .mq5などのソースをMT5で読み込める.ex5へ変換した結果です。 | エラーが残っている場合、通常は正常に実行できません。 |
| ログ | EAやインジケーターの実行結果、エラー、注文結果、通知結果を確認する場所です。 | Expertsログ、Journalログ、Testerログを分けて見ます。 |
MT5とMetaEditorの関係
MT5はEAやインジケーターを動かす側、MetaEditorはMQL5コードを作成・編集・コンパイルする側です。MT5のメニューからMetaEditorを開くと、そのMT5のデータフォルダに対応した開発環境を開けます。
複数のMT5を使っている場合、MetaEditorの起動元を間違えると、別のデータフォルダへファイルを保存してしまうことがあります。開発中は、MT5の「ファイル」からデータフォルダを開き、対象フォルダとMetaEditorの保存先が一致しているか確認してください。
特に開発依頼や検証でファイルを受け渡す時は、「どのMT5のデータフォルダに置いたか」「どのフォルダへ配置したか」「コンパイル後に.ex5が生成されたか」を記録しておくと、確認がしやすくなります。
データフォルダとMQL5フォルダの関係
MT5のMQL5関連ファイルは、通常、データフォルダ内のMQL5フォルダに整理されます。EAはExperts、インジケーターはIndicators、スクリプトはScripts、共通部品はInclude、ライブラリはLibrariesへ置くのが基本です。
ファイルを正しい場所へ置いても、コンパイルしていない場合や、MT5側でNavigatorを更新していない場合は、一覧に表示されないことがあります。ファイル配置、コンパイル、MT5側表示、ログ確認は、別々の確認項目として扱ってください。
MQL5フォルダの基本構成
MQL5開発では、ファイルの保存場所を間違えないことが重要です。EA、インジケーター、スクリプト、共通部品、ライブラリは、それぞれ役割が違います。フォルダの意味を先に理解しておくと、コンパイル後にMT5側へ表示されない問題を減らせます。
| フォルダ | 主な用途 | 確認ポイント |
|---|---|---|
MQL5/Experts | EAを配置するフォルダです。 | 自動売買EA、半裁量EA、パネルEA、通知EA、診断EAなどは通常ここに置きます。 |
MQL5/Indicators | カスタムインジケーターを配置するフォルダです。 | チャート表示、サブウィンドウ表示、アラート用インジ、EAから読み込むインジなどを置きます。 |
MQL5/Scripts | 一回実行型のスクリプトを配置するフォルダです。 | 一括処理、確認用、データ出力、補助操作などに使います。 |
MQL5/Include | 共通化した.mqhファイルを配置するフォルダです。 | EAやインジケーターから読み込む共通関数、構造体、定義、部品を置きます。 |
MQL5/Libraries | ライブラリファイルを配置するフォルダです。 | 入門段階では無理に使わず、必要な場合だけ整理します。 |
MQL5/Files | CSVやテキストなどの入出力に使われることがあるフォルダです。 | ログ、検証データ、CSV出力で使う場合は、口座情報や認証情報の混入に注意します。 |
MQL5/Logs | ログ確認に関係するフォルダです。 | MT5上のExperts / Journal表示と、実ファイルのログを混同しないようにします。 |
MQL5で扱う主なファイル種類
MQL5開発では、.mq5、.mqh、.ex5、.setなど、複数のファイルを扱います。それぞれ役割が異なるため、開発依頼や不具合確認の時も、どのファイルを送るべきかを分けて考える必要があります。
特に、.ex5しかないEAやインジケーターは、通常、ソースコードとして中身を編集することはできません。改修や原因調査を依頼する場合は、.mq5や関連する.mqhがあるかを確認してください。
| ファイル | 意味 | 確認内容 |
|---|---|---|
.mq5 | MQL5のソースコードです。 | EA、インジケーター、スクリプト本体の編集対象になります。 |
.mqh | 共通部品や関数をまとめるインクルードファイルです。 | 複数ファイルで共通利用する関数、構造体、定義が含まれる場合があります。 |
.ex5 | コンパイル後に生成される実行用ファイルです。 | MT5側で読み込まれる形式ですが、通常はソース編集には使いません。 |
.set | EAやインジケーターのinput設定を保存したファイルです。 | バックテスト条件や実行設定を再現するために重要です。 |
| Expertsログ | EAやインジケーターの実行ログです。 | 初期化、シグナル、注文、決済、通知、エラーの確認に使います。 |
| Journalログ | MT5全体の操作や環境に関係するログです。 | 接続状態、取引許可、プラットフォーム側の動作確認に使います。 |
| バックテストレポート | Strategy Testerの検証結果です。 | 結果だけでなく、銘柄、時間足、期間、スプレッド、setファイルを併せて確認します。 |
EA・インジケーター・スクリプトの違い
MQL5では、EA、インジケーター、スクリプトを作成できます。どれもMQL5で作れますが、動き方と目的が違います。開発前に、作りたいものがEAなのか、インジケーターなのか、スクリプトなのかを分けておくことが重要です。
たとえば、売買注文を出すものはEAとして扱うのが基本です。一方、チャートに値を表示したり、ラインを描画したりするものはインジケーターとして作ることが多くなります。単発の確認処理や一括出力であれば、スクリプトが向いている場合もあります。
| 種類 | 主な用途 | 中心になる処理 | 確認ポイント |
|---|---|---|---|
| EA | 自動売買、半裁量補助、ポジション管理、通知、診断など。 | OnInit、OnTick、OnTimer、OnTradeTransactionなど。 | 自動売買許可、Magic Number、発注前チェック、ログを確認します。 |
| インジケーター | チャート表示、ライン描画、サブウィンドウ表示、アラートなど。 | OnInit、OnCalculateなど。 | バッファ、表示、再計算範囲、EAから値を取る場合のCopyBufferを確認します。 |
| スクリプト | 一回だけ実行する確認処理、出力処理、補助操作など。 | OnStartなど。 | 常時動作ではなく、実行後に終了する処理か確認します。 |
| 共通部品 | EAやインジケーターから読み込む関数、構造体、共通処理。 | .mqhとして整理することがあります。 | 本体ファイルだけでなく、関連includeが必要か確認します。 |
MQL5の主なイベント関数
MQL5では、イベント関数を起点に処理が実行されます。EA、インジケーター、スクリプトでは使うイベント関数が異なるため、どのタイミングで処理が動くのかを理解しておく必要があります。
イベント関数は、単なる関数名ではなく、MT5側から呼び出される入口です。OnTickにすべてを書き込む、OnCalculateの再計算範囲を考えない、OnInitで失敗を返さない、OnDeinitでObjectを削除しすぎる、といった設計は後から問題になりやすいため、役割を分けて考えてください。
| イベント関数 | 主な用途 | よくある確認ポイント |
|---|---|---|
OnInit | 起動時の初期化処理です。 | input確認、ハンドル作成、設定不正、初期化失敗時の戻り値を確認します。 |
OnDeinit | 終了時、時間足変更時、EA削除時などの後処理です。 | Object削除、ハンドル解放、終了理由のログを確認します。 |
OnTick | EAで価格更新ごとに実行される処理です。 | 毎ティックで重い処理を入れすぎないようにします。 |
OnCalculate | インジケーターの計算処理です。 | 計算範囲、バッファ、表示更新、再計算範囲を確認します。 |
OnTimer | 一定間隔で実行される処理です。 | 定期ログ、外部連携、表示更新、監視処理などを整理して使います。 |
OnTradeTransaction | 注文や約定などの取引イベントを確認する処理です。 | 注文結果、約定、履歴確認、取引ログの追跡に使います。 |
OnChartEvent | チャート上のクリック、キー操作、Object操作などを扱います。 | パネルEA、ボタン操作、手動補助ツールで使うことがあります。 |
OnStart | スクリプトで一回実行される処理です。 | 一括処理、確認処理、出力処理に向いています。 |
初回コンパイルで確認すること
MQL5コードを書いた後は、MetaEditorでコンパイルします。コンパイルに成功すると、通常は.ex5ファイルが生成され、MT5側でEAやインジケーターとして読み込めるようになります。
コンパイル時にエラーが出ている場合は、該当箇所を修正するまでMT5側で正常に使えません。警告だけの場合でも、型変換、未使用変数、暗黙変換、精度低下の可能性など、後から不具合につながる内容が含まれることがあります。
- MetaEditorで対象ファイルを開く
- 保存先が正しいMQL5フォルダ内か確認する
- 関連する
.mqhファイルが揃っているか確認する - Compileを実行する
- Errors欄にエラーが出ていないか確認する
- Warnings欄の警告内容も確認する
.ex5が生成されているか確認する- MT5側のNavigatorで更新または再起動して表示を確認する
- 実行後はExpertsログやJournalログを確認する
エラーと警告の違い
エラーは、コンパイルが完了できない問題です。文法ミス、関数名の誤り、引数の数違い、型の不一致、セミコロン忘れ、括弧の閉じ忘れ、includeファイル不足などが原因になります。
警告は、コンパイル自体は通るものの、確認した方がよい注意です。未使用変数、型変換、精度低下の可能性などが表示される場合があります。警告を放置しても動くことはありますが、検証や配布前には内容を確認してください。
コンパイル済みなのにMT5へ表示されない場合
コンパイルは通ったのにMT5へ表示されない場合、まず保存先を確認します。EAならExperts、インジケーターならIndicators、スクリプトならScriptsに配置されているかを見ます。次に、MT5側のNavigatorを更新したか、対象MT5とMetaEditorのデータフォルダが一致しているかを確認してください。
また、コンパイルしたファイル名とMT5に表示される名前が違って見える場合もあります。ファイル名、保存フォルダ、コンパイル日時、MT5の再起動有無を整理して確認すると、原因を追いやすくなります。
MQL5開発でつまずきやすいポイント
MQL5開発でつまずいた時は、コードのロジックだけでなく、ファイル配置、コンパイル結果、MT5側の表示、ログ、権限、外部連携設定を順番に確認します。特に初期段階では、単純な配置ミスやコンパイル未実施が原因になることもあります。
| 症状 | 主な原因 | 確認する場所 |
|---|---|---|
| MT5にEAが表示されない | Experts以外に保存している、コンパイルしていない、Navigator未更新。 | データフォルダ、Expertsフォルダ、MetaEditorのErrors欄。 |
| インジケーターが表示されない | Indicators以外に保存している、バッファ設定やOnCalculateに問題がある。 | Indicatorsフォルダ、Expertsログ、チャート上の表示。 |
| コンパイルエラーが出る | 文法ミス、関数名ミス、引数違い、型不一致、括弧の不足。 | MetaEditorのErrors欄、エラー行、該当関数。 |
| includeファイルが見つからない | .mqhの配置先が違う、ファイル名やパスが一致していない。 | Includeフォルダ、#includeの指定、関連ファイル一式。 |
| EAを入れても注文しない | 自動売買許可、シグナル不成立、発注前チェック停止、取引不可状態。 | Expertsログ、Journalログ、EAのinput設定。 |
| CopyBufferで値が取れない | ハンドル作成失敗、取得本数不足、配列方向、確定足の扱い違い。 | OnInitログ、CopyBuffer戻り値、BarsCalculated。 |
| 通知や外部連携が動かない | WebRequest許可URL、送信ON/OFF、外部側のURLや認証設定。 | MT5オプション、Expertsログ、送信結果ログ。 |
EA開発で分けて考える責務
MQL5でEAを作る場合は、エントリー条件だけでなく、発注前チェック、注文処理、決済、リスク管理、ログ、通知を分けて考えます。これらをすべてOnTickの中へ直接書くと、後から原因を追いにくくなります。
EAが注文しない場合でも、理由は1つではありません。シグナルが成立していないのか、フィルターで止まったのか、ロットや証拠金のチェックで止まったのか、注文送信後にretcodeで失敗したのかを分けてログに残す必要があります。
| 責務 | 内容 | 確認ポイント |
|---|---|---|
| signal | 売買候補や方向を判断します。 | どの足、どの条件、どの値で判定したかをログに残します。 |
| filter | スプレッド、時間帯、ポジション数などの見送り条件を確認します。 | シグナル不成立とフィルター停止を分けます。 |
| precheck | ロット、証拠金、SL/TP距離、取引可能状態などを確認します。 | 発注直前に止めた理由を項目別に記録します。 |
| execution | CTradeやOrderSendで注文を送ります。 | retcode、GetLastError、発注条件を確認します。 |
| risk | ロット、最大ポジション、停止条件などを管理します。 | input初期値と実行時の状態を混同しないようにします。 |
| exit | TP/SL、トレーリング、建値、時間決済などを管理します。 | 決済理由と対象ポジションをログで追います。 |
| notification | アラート、Discord通知、CSV出力などを扱います。 | 通知失敗と売買処理を混同しないようにします。 |
| validation | input不正、環境不一致、銘柄仕様の不足を確認します。 | OnInit時点で止めるべき条件を整理します。 |
このように責務を分けておくと、バックテスト、デモ環境、実運用前確認、不具合調査のいずれでも原因を追いやすくなります。特に配布用EAや開発依頼品では、注文が出ない時の理由をログで追えることが重要です。
インジケーター開発で確認すること
インジケーター開発では、値の計算、チャート表示、バッファ、サブウィンドウ、アラート、Object表示などを確認します。EAと違い、注文処理ではなく表示や計算が中心になります。
インジケーターをEAから読み込む場合は、iCustomやCopyBufferで値を取得する構成になります。この場合、インジケーター単体で表示できるか、EA側でハンドルを作成できるか、CopyBufferで値を取得できるかを分けて確認します。
- インジケーター単体でチャート表示できるか確認する
- メインチャート表示かサブウィンドウ表示かを決める
- バッファの数、色、線種、EMPTY_VALUEを確認する
- アラートや通知を出す条件を分ける
- EAから読み込む場合はiCustomとCopyBufferの戻り値を確認する
- 確定足と現在足のどちらを使うか決める
- 表示系と売買判定系を混同しない
- 表示だけのインジなのか、EA判定にも使うインジなのかを分ける
CopyBufferとインジケーター値の確認
MQL5でEAからインジケーター値を使う場合、CopyBufferを使って値を取得することがあります。CopyBufferで値が取れない場合、インジケーターハンドルの作成失敗、取得本数不足、配列方向の理解不足、確定足と現在足の混同などが原因になることがあります。
EA側でインジケーター値を使う時は、まずOnInitでハンドルが正しく作られているか、次にBarsCalculatedで計算済み本数が足りているか、CopyBufferの戻り値が想定どおりかを確認します。値が0だから条件不成立なのか、値そのものが取得できていないのかをログで分けてください。
| 確認項目 | 見る内容 | 注意点 |
|---|---|---|
| ハンドル作成 | iMA、iATR、iRSI、iCustomなどで有効なハンドルが返っているか。 | INVALID_HANDLEの場合はOnInit時点で原因を確認します。 |
| 計算済み本数 | BarsCalculatedで必要本数が揃っているか。 | 起動直後や履歴不足では値が取れないことがあります。 |
| CopyBuffer戻り値 | 要求本数どおり値を取得できたか。 | 戻り値が不足している場合は判定に使わないようにします。 |
| 配列方向 | 現在足と過去足の参照位置を正しく扱っているか。 | ArraySetAsSeriesの扱いに注意します。 |
| 確定足 | 現在足ではなく確定足を使うのか。 | シグナルの再描画や判定ブレを避けるために先に決めます。 |
MQL5開発でログ確認を前提にする
MQL5開発では、動いたかどうかだけでなく、なぜ動いたのか、なぜ動かなかったのかを追えることが重要です。特にEAでは、シグナル不成立、発注前チェック停止、注文失敗、決済失敗、通知失敗、設定不正を同じログ表現にしないようにします。
ログは後から慌てて追加するものではなく、開発時点で仕様の一部として考えるのが望ましいです。OnInitで主要設定を出す、シグナル判定で見送り理由を出す、注文処理ではretcodeとGetLastErrorを分ける、外部連携では送信結果だけを出し、認証情報やURLの実値は出さない、といった設計が必要です。
| ログ対象 | 残したい内容 | 注意点 |
|---|---|---|
| 初期化ログ | EA名、バージョン、主要設定、OnInit結果。 | 認証情報や外部URLの実値を出さないようにします。 |
| シグナルログ | BUY候補、SELL候補、見送り理由、使用した足。 | 毎ティックで過剰に出しすぎないようにします。 |
| 発注前チェックログ | スプレッド、ロット、証拠金、SL/TP距離。 | どの条件で止まったかを分けて出します。 |
| 注文結果ログ | retcode、GetLastError、注文方向、ロット、価格。 | 注文要求と注文結果を混同しないようにします。 |
| 決済ログ | 決済理由、対象チケット、決済ロット、成功/失敗。 | 手動決済、EA決済、SL/TP決済を分けて見ます。 |
| インジケーターログ | ハンドル作成、CopyBuffer戻り値、取得本数、確定足。 | 値が0なのか、取得できていないのかを分けます。 |
| 外部連携ログ | WebRequest、Discord通知、CSV出力、Google Sheets連携の結果。 | Webhook URL、APIキー、トークンをログに出さないようにします。 |
バックテスト前に確認すること
EA開発では、コンパイルが通ることと、バックテストで意図した条件を確認できることは別です。バックテストを行う場合は、銘柄、時間足、期間、スプレッド、モデル、初期残高、setファイル、最適化条件を記録してください。
バックテスト結果は将来の結果を保証するものではありません。あくまで、EAの処理が想定どおり動いているか、発注、決済、ログ、停止条件、通知、エラー時の挙動を確認するための検証材料として扱います。
- EA名とバージョンを記録する
- 使用したsetファイルを保存する
- 銘柄、時間足、期間を記録する
- スプレッド、初期残高、モデルを記録する
- 最適化と単体バックテストを分ける
- Tester結果だけでなくExpertsログも確認する
- 注文されない理由、決済されない理由、通知されない理由をログで分ける
MT4からMT5へ移行する時の注意点
MT4で使っていたEAやインジケーターをMT5へ移したい場合、単純なファイルコピーでは動かないことがあります。MQL4とMQL5では、注文処理、ポジション管理、イベント関数、インジケーターの扱い、コンパイル環境が異なるためです。
移植というより、MT5向けに再設計する前提で考えた方が安全です。特に、OrderSend、Position、History、Deal、TradeTransaction、CopyBuffer、iCustom、Magic Number管理、複数ポジション管理は、MT5の構造に合わせて見直す必要があります。
MT4版のソースがある場合でも、そのまま貼り付けてコンパイルできるとは限りません。MT5側でどの機能を再現したいのか、どの機能は不要なのか、ログや通知をどう扱うのかを整理してから進めてください。
開発依頼前に整理すること
MQL5開発を依頼する場合は、「EAを作りたい」「インジケーターを作りたい」だけでは仕様が不足しやすくなります。作りたいものの種類、目的、使用するインジケーター、対象銘柄、時間足、判定タイミング、ログ、表示、通知、検証条件を分けて整理してください。
また、依頼時には、必要な情報と送らない方がよい情報を分けることも重要です。仕様確認に必要なのは、ロジック、設定、ログ、スクリーンショット、setファイル、発生条件です。口座番号、パスワード、認証トークン、Webhook URL、APIキーなどの実値は、そのまま送らないようにしてください。
| 整理する情報 | 内容 |
|---|---|
| 作りたいものの種類 | EA、インジケーター、スクリプト、パネル、通知ツール、補助ツールのどれかを整理します。 |
| 利用環境 | MT5の種類、ブローカー、銘柄、時間足、VPS利用有無を確認します。 |
| ロジック | エントリー条件、決済条件、見送り条件、使用するインジケーターを整理します。 |
| 判定タイミング | 確定足、現在足、新バー、毎ティック、手動操作のどれを使うか確認します。 |
| 設定ファイル | setファイル、input一覧、初期値、変更したい項目を整理します。 |
| ログ | Expertsログ、Journalログ、バックテストログ、エラー時のスクリーンショットを用意します。 |
| 通知・外部連携 | Discord通知、WebRequest、CSV、Google Sheetsなどの有無を整理します。 |
| 送らない情報 | 口座番号、パスワード、認証トークン、Webhook URL、APIキーの実値は共有しないようにします。 |
送る情報・送らない方がよい情報
開発依頼や不具合相談では、情報が不足していると原因確認に時間がかかります。一方で、機密情報をそのまま送ってしまうと安全上の問題があります。送る情報と送らない方がよい情報を分けて整理してください。
| 送るとよい情報 | 理由 |
|---|---|
| 対象ファイル名 | どのEA、インジケーター、スクリプトを確認するか特定するため。 |
| ソースコードの有無 | .mq5や.mqhがあるかで改修可否が変わるため。 |
| setファイル | input設定を再現するため。 |
| Expertsログ | EAやインジケーター側のエラーや実行状況を確認するため。 |
| Journalログ | MT5側の操作、接続、環境の問題を確認するため。 |
| スクリーンショット | 表示状態、エラー表示、設定画面、チャート状況を確認するため。 |
| 再現手順 | どの操作で問題が起きるかを確認するため。 |
| 送らない方がよい情報 | 理由 |
|---|---|
| 口座番号 | 個人情報や口座情報に該当するため。 |
| 取引パスワード | 第三者が口座へアクセスできる可能性があるため。 |
| 投資家パスワード | 閲覧権限であっても共有は避けるべき情報です。 |
| Webhook URL | 外部通知先へ不正送信される可能性があるため。 |
| APIキー | 外部サービスの認証情報として悪用される可能性があるため。 |
| GAS URLや外部エンドポイントの実値 | 外部連携先を特定できるため、必要時はマスクして共有します。 |
記事固有の実務チェック表
- MT5とMetaEditorの対応関係を確認した
- 正しいデータフォルダを開いているか確認した
- EA、インジケーター、スクリプトのどれを作るか決めた
- Experts / Indicators / Scripts / Include の保存先を確認した
.mq5、.mqh、.ex5、.setの違いを確認した- 関連するincludeファイルがあるか確認した
- 初回コンパイルでエラーと警告を確認した
- MT5側のNavigatorに表示されるか確認した
- ExpertsログとJournalログを分けて確認した
- EA開発ではsignal、filter、precheck、execution、risk、exit、notificationを分けた
- インジケーター開発では表示、バッファ、OnCalculate、CopyBufferを分けた
- 開発依頼前に仕様、setファイル、ログ、スクリーンショットを整理した
- 口座情報、認証情報、Webhook URL、APIキーを共有資料に入れていない
よくある質問
MQL5開発を始めるには何を用意すればよいですか?
MT5とMetaEditorが使える環境を用意し、データフォルダ、MQL5フォルダ、Experts / Indicators / Include の違いを確認してください。最初は小さなEAやインジケーターを作り、保存、コンパイル、MT5側表示、ログ確認までの流れを確認すると進めやすくなります。
MetaEditorだけを開けば開発できますか?
MetaEditorでコードを書くことはできますが、実際に動かすMT5のデータフォルダと一致しているか確認する必要があります。複数のMT5を使っている場合は、別のデータフォルダへ保存していることがあります。
EAとインジケーターは何が違いますか?
EAは自動売買、ポジション管理、通知、診断などに使われることが多く、OnTickやOnTimerなどを中心に動きます。インジケーターはチャート表示や計算が中心で、OnCalculateを使う構成が基本です。
コンパイルエラーが出た場合はどうすればよいですか?
MetaEditorのErrors欄で、エラー行、エラー内容、関数名、引数、型、括弧、セミコロン、includeファイルの有無を確認してください。エラーが残っている場合は、通常.ex5が生成されず、MT5側で実行できません。
コンパイルは通ったのにMT5に表示されないのはなぜですか?
保存先が違う、ExpertsではなくIndicatorsへ置いている、MT5側のNavigatorが更新されていない、別のMT5データフォルダを見ている、などが考えられます。まずはMT5からデータフォルダを開き、保存先とコンパイル結果を確認してください。
MQL5を知らなくても開発依頼できますか?
可能です。ただし、作りたい機能、対象銘柄、時間足、既存ソースの有無、setファイル、ログ、スクリーンショットを整理しておくと確認しやすくなります。MQL5の文法を説明するよりも、期待する動作と確認できる資料を整理することが重要です。
ex5ファイルだけでも改修できますか?
通常、.ex5はコンパイル済みの実行用ファイルであり、ソースコードとして編集することはできません。改修を依頼する場合は、.mq5や関連する.mqhがあるか確認してください。
MQL5開発でログはどの程度必要ですか?
EAや通知ツールでは、ログは重要です。シグナル不成立、発注前チェック停止、注文失敗、決済失敗、通知失敗、設定不正を分けて確認できるようにすると、不具合調査や検証がしやすくなります。
関連ページ
MQL5開発を進める時は、開発環境、関数辞典、エラーコード、EA設計、注文処理、ログ設計、開発依頼前資料を分けて確認すると、作業の抜け漏れを減らしやすくなります。
| 確認したい内容 | 関連ページ |
|---|---|
| MT5の基本操作や環境を確認する | MT5の使い方完全ガイド |
| MQL5関数を調べる | MQL5関数辞書 |
| エラーコードを確認する | MQL5エラーコード辞典 |
| EA設計の責務分離を確認する | MQL5 EA設計パターン完全ガイド |
| イベント関数の使い分けを確認する | MQL5イベント処理完全ガイド |
| 注文、ポジション、履歴管理を確認する | MQL5注文・ポジション・履歴管理完全ガイド |
| CTradeを使った注文処理を確認する | MQL5標準ライブラリ・CTrade完全ガイド |
| ロット、証拠金、銘柄仕様を確認する | MQL5ロット・証拠金・銘柄仕様完全ガイド |
| インジケーター値をEAに取り込む方法を確認する | MQL5でインジケーター値をEAに取り込む方法 |
| ログファースト開発を確認する | MQL5デバッグ・ログファースト開発完全ガイド |
| バックテスト実務を確認する | MQL5バックテスト実務ノート |
| MT4資産をMT5へ作り直す時の考え方を確認する | MT4資産をMT5へ作り直す実務ノート |
| 開発依頼前に用意する資料を確認する | MT5開発依頼前に用意する資料まとめ |
| 開発・改修相談の入口を確認する | 開発・改修の相談ページ |
まとめ
MQL5開発を学ぶ時は、いきなり複雑なEAや売買ロジックを作るのではなく、MetaEditor、データフォルダ、MQL5フォルダ構成、ファイル種類、EAとインジケーターの違い、イベント関数、コンパイルエラー、ログ確認を順番に整理することが重要です。
.mq5、.mqh、.ex5、.setファイルは、それぞれ役割が異なります。改修や不具合確認を行う場合は、実行用ファイルだけでなく、ソースコード、includeファイル、設定ファイル、ログの有無も確認してください。
EAではOnInit、OnTick、OnDeinit、OnTimer、OnTradeTransactionが重要になり、インジケーターではOnCalculateやバッファ管理が重要になります。表示系、判定系、売買実行系、通知系、外部連携系を混同しないことが、開発や改修を進める上で大切です。
開発依頼や不具合相談を行う場合は、対象ファイル、setファイル、ログ、スクリーンショット、発生条件、改修したい内容を整理してください。APIキー、Webhook URL、認証トークン、口座番号などの実値は、そのまま送らないよう注意してください。
