MQL5でEA(Expert Advisor、自動売買プログラム)を自作するには、プログラミングの基礎からトレーディングロジックの構築、バックテストまで段階的な知識が必要です。以下に、初心者から中級者向けに必要な知識を細分化し、学習のステップを明確に解説します。各ステップには具体的な内容と学習リソースも含めます。
【免責事項】私は投資アドバイザーではありません。投資判断はご自身で行い、必要に応じてファイナンシャルアドバイザーに相談してください。この記事は自身の勉強を目的としており、EAの動作保証や生じた損失に対しても一切の責任を負いません。
ステップ1: MQL5とMetaTrader 5の基礎理解必要な知識:
- MetaTrader 5(MT5)の基本操作:
- MT5のインストールとアカウント設定(デモ口座推奨)。
- チャート操作(時間足変更、インジケーター追加)。
- ストラテジーテスターの使い方(バックテストの基本)。
- MQL5の概要:
- MQL5はC++ベースの言語で、EA、スクリプト、カスタムインジケーターを開発可能。
- EAは自動売買ロジックを動かすプログラム。OnInit()、OnTick()、OnDeinit()が主要関数。
- MetaEditorの使い方:
- MT5付属の開発環境。コード入力、デバッグ、コンパイル方法を学ぶ。
- テンプレート(EA、スクリプト、インジケーター)から始める。
学習アクション:
- MT5を公式サイト(https://www.metatrader5.com)からインストール。
- MetaEditorを開き、「新規作成」からEAテンプレートを生成して構造を確認。
- MQL5公式ドキュメント(https://www.mql5.com/en/docs)の「Introduction to MQL5」を読む。
- YouTubeの「MQL5 Tutorial」チャンネルで基本動画を視聴(例:「Getting Started with MQL5」)。
例: 最小限のEAテンプレート:
mql5
void OnInit() {
Print("EAが初期化されました");
}
void OnTick() {
Print("新しいティックを受信: ", Symbol(), " 価格: ", SymbolInfoDouble(_Symbol, SYMBOL_BID));
}
void OnDeinit(const int reason) {
Print("EAが終了しました。理由コード: ", reason);
}
- このコードをMetaEditorでコンパイルし、MT5で実行。ログにメッセージが出力されることを確認。
ステップ2: MQL5プログラミングの基礎必要な知識:
- 基本構文:
- 変数(int, double, string)、配列、ループ(for, while)、条件分岐(if-else)。
- 関数定義と呼び出し。
- MQL5特有の関数:
- 価格取得:SymbolInfoDouble()(例:SYMBOL_BID, SYMBOL_ASK)。
- 時間データ:TimeCurrent()。
- 注文管理:OrderSend(), OrderClose()。
- イベントハンドリング:
- OnTick(): 新しい価格データごとに実行。
- OnInit(): EA起動時に実行。
- OnDeinit(): EA終了時に実行。
学習アクション:
- MQL5ドキュメントの「Basics」セクション(https://www.mql5.com/en/docs/basis)で変数や制御構造を学習。
- 簡単なスクリプトを作成(例:現在の価格と時間を表示)。mql5
void OnStart() { double price = SymbolInfoDouble(_Symbol, SYMBOL_BID); datetime time = TimeCurrent(); Print("通貨ペア: ", _Symbol, " 現在価格: ", price, " 時間: ", time); }
- Code Base(https://www.mql5.com/en/code)から簡単なEAをダウンロードし、コードを読んで改造。
練習課題:
- 5分ごとに現在価格をログに記録するスクリプトを書く。
ステップ3: トレーディングロジックの構築必要な知識:
- テクニカル指標の利用:
- MQL5標準インジケーター(例:iMA()で移動平均、iRSI()でRSI)。
- カスタムインジケーターの作成方法。
- 取引ロジックの設計:
- 買い/売り条件の設定(例:移動平均クロス、RSIの過買/過売)。
- ポジション管理(ロットサイズ、ストップロス、テイクプロフィット)。
- 注文送信:
- OrderSend()でポジションを開く。
- PositionSelect()やPositionClose()でポジション管理。
学習アクション:
- MQL5ドキュメントの「Trade Functions」(https://www.mql5.com/en/docs/trading)を読み、`OrderSend()`の使い方を理解。
- シンプルな移動平均クロス戦略のEAを作成:mql5
input int maFastPeriod = 10; // 短期MA input int maSlowPeriod = 20; // 長期MA void OnTick() { double maFast = iMA(NULL, 0, maFastPeriod, 0, MODE_SMA, PRICE_CLOSE); double maSlow = iMA(NULL, 0, maSlowPeriod, 0, MODE_SMA, PRICE_CLOSE); double prevMaFast = iMA(NULL, 0, maFastPeriod, 0, MODE_SMA, PRICE_CLOSE, 1); double prevMaSlow = iMA(NULL, 0, maSlowPeriod, 0, MODE_SMA, PRICE_CLOSE, 1); if(prevMaFast < prevMaSlow && maFast > maSlow) { OrderSend(_Symbol, OP_BUY, 0.1, SymbolInfoDouble(_Symbol, SYMBOL_ASK), 10, 0, 0); } if(prevMaFast > prevMaSlow && maFast < maSlow) { OrderSend(_Symbol, OP_SELL, 0.1, SymbolInfoDouble(_Symbol, SYMBOL_BID), 10, 0, 0); } }
- MQL5コミュニティの記事「MQL5 Wizard」(https://www.mql5.com/en/articles)を参考に、ウィザードを使ったEA生成を試す。
練習課題:
- RSIが70以上で売り、30以下で買いするEAを作成。
ステップ4: リスク管理とポジション管理必要な知識:
- リスク管理:
- ロットサイズ計算(例:口座残高の1-2%をリスク)。
- ストップロス(SL)とテイクプロフィット(TP)の設定。
- ポジション管理:
- 複数ポジションの管理(PositionsTotal(), PositionGetInteger())。
- ポジションのクローズ(PositionClose())。
- エラーハンドリング:
- 注文失敗時のエラーコード処理(GetLastError())。
学習アクション:
- ドキュメントの「Position Properties」(https://www.mql5.com/en/docs/position)を読み、ポジション管理を学ぶ。
- リスク管理を追加したEAを作成:mql5
input double riskPercent = 1.0; // リスク割合(%) input int slPoints = 50; // ストップロス(ポイント) void OnTick() { double balance = AccountBalance(); double riskAmount = balance * (riskPercent / 100.0); double lotSize = riskAmount / (slPoints * SymbolInfoDouble(_Symbol, SYMBOL_TRADE_TICK_VALUE)); if(ConditionsForBuy()) { double sl = SymbolInfoDouble(_Symbol, SYMBOL_ASK) - slPoints * _Point; OrderSend(_Symbol, OP_BUY, lotSize, SymbolInfoDouble(_Symbol, SYMBOL_ASK), 10, sl, 0); } }
- エラーハンドリングを追加:mql5
if(!OrderSend(...)) { Print("注文失敗、エラーコード: ", GetLastError()); }
練習課題:
- 口座残高の2%リスクでロットサイズを計算し、50ピップスのSLを持つEAを改良。
ステップ5: バックテストと最適化必要な知識:
- ストラテジーテスターの使い方:
- テスト期間、時間足、スプレッド設定。
- バックテスト結果の分析(利益率、ドローダウン、勝率)。
- パラメータ最適化:
- 入力パラメータ(例:MA期間)を最適化。
- 過剰最適化(カーブフィッティング)の回避。
- フォワードテスト:
- デモ口座でのリアルタイムテスト。
学習アクション:
- MT5のストラテジーテスターでEAをテスト(例:1年間のデータでテスト)。
- 最適化機能を使い、MA期間(例:10-20)をテスト。
- MQL5の記事「How to Test an Expert Advisor」(https://www.mql5.com/en/articles/575)を参考に。
- バックテスト結果を確認(例:プロフィットファクター > 1.5を目指す)。
練習課題:
- ステップ3の移動平均EAを1年間のデータでバックテストし、MA期間を最適化。
ステップ6: デバッグと改良必要な知識:
- デバッグ技術:
- MetaEditorのデバッグ機能(ブレークポイント、変数監視)。
- Print()やComment()でログ出力。
- パフォーマンス改善:
- コードの効率化(例:不要なループの削減)。
- スリッページやスプレッドの考慮。
- 高度な機能:
- トレーリングストップや時間フィルターの追加。
- マルチ通貨ペア対応。
学習アクション:
- デバッグ例:Print()で変数値を出力し、ロジックの動作を確認。mql5
Print("MA Fast: ", maFast, " MA Slow: ", maSlow);
- トレーリングストップを追加:mql5
void TrailStop() { for(int i = 0; i < PositionsTotal(); i++) { ulong ticket = PositionGetTicket(i); if(PositionSelectByTicket(ticket)) { double sl = PositionGetDouble(POSITION_SL); double currentPrice = SymbolInfoDouble(_Symbol, SYMBOL_BID); if(PositionGetInteger(POSITION_TYPE) == POSITION_TYPE_BUY && currentPrice - sl > 20 * _Point) { PositionModify(ticket, currentPrice - 20 * _Point, PositionGetDouble(POSITION_TP)); } } } }
- MQL5フォーラム(https://www.mql5.com/en/forum)で質問し、コードを共有。
練習課題:
- トレーリングストップを追加したEAを作成し、デバッグ。
ステップ7: 実運用とコミュニティ活用必要な知識:
- デモ口座でのテスト:
- リアルタイム環境でのEA動作確認。
- MQL5コミュニティの活用:
- Code Baseで他者のEAを参考に。
- マーケット(https://www.mql5.com/en/market)でEAを購入/販売。
- メンテナンス:
- 市場環境変化への対応(例:ボラティリティ変動)。
- 定期的なバックテストと最適化。
学習アクション:
- デモ口座でEAを1か月運用し、ログを分析。
- MQL5コミュニティで質問投稿(英語推奨)。
- 「MQL5 Programming for Traders」(無料PDF、MQL5公式)を読み、高度なテクニックを学ぶ。
練習課題:
- 作成したEAをデモ口座で運用し、1か月のパフォーマンスをレポート。
学習のコツとリソースまとめ
- 段階的に進める: 各ステップをクリアしてから次へ。焦らず小さな成功を積み重ねる。
- 実践重視: コードを書き、動かしながら学ぶ。エラーは成長のチャンス。
- リソース:
- 公式ドキュメント(https://www.mql5.com/en/docs)
- MQL5記事(https://www.mql5.com/en/articles)
- Code Base(https://www.mql5.com/en/code)
- YouTube「MQL5 Tutorial」や日本語の「FX 自動売買 入門」動画。
- コミュニティ: MQL5フォーラムや日本のFXコミュニティ(例:ブログ、Discord)で情報交換。
次のステップ
- 具体的なEAのアイデア(例:RSI+MA戦略、ニュースフィルター付きEAなど)を教えてください。サンプルコードを提供します。
- 特定のステップ(例:デバッグ、注文送信)で詳しい解説やコード例が必要ならリクエストを!
どの部分を深掘りしたい?