MQL5でEA(自動売買プログラム)を自作したい

この記事は約11分で読めます。

MQL5でEA(Expert Advisor、自動売買プログラム)を自作するには、プログラミングの基礎からトレーディングロジックの構築、バックテストまで段階的な知識が必要です。以下に、初心者から中級者向けに必要な知識を細分化し、学習のステップを明確に解説します。各ステップには具体的な内容と学習リソースも含めます。

【免責事項】私は投資アドバイザーではありません。投資判断はご自身で行い、必要に応じてファイナンシャルアドバイザーに相談してください。この記事は自身の勉強を目的としており、EAの動作保証や生じた損失に対しても一切の責任を負いません。


ステップ1: MQL5とMetaTrader 5の基礎理解必要な知識:

  • MetaTrader 5(MT5)の基本操作:
    • MT5のインストールとアカウント設定(デモ口座推奨)。
    • チャート操作(時間足変更、インジケーター追加)。
    • ストラテジーテスターの使い方(バックテストの基本)。
  • MQL5の概要:
    • MQL5はC++ベースの言語で、EA、スクリプト、カスタムインジケーターを開発可能。
    • EAは自動売買ロジックを動かすプログラム。OnInit()、OnTick()、OnDeinit()が主要関数。
  • MetaEditorの使い方:
    • MT5付属の開発環境。コード入力、デバッグ、コンパイル方法を学ぶ。
    • テンプレート(EA、スクリプト、インジケーター)から始める。

学習アクション:

例: 最小限の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終了時に実行。

学習アクション:

練習課題:

  • 5分ごとに現在価格をログに記録するスクリプトを書く。

ステップ3: トレーディングロジックの構築必要な知識:

  • テクニカル指標の利用:
    • MQL5標準インジケーター(例:iMA()で移動平均、iRSI()でRSI)。
    • カスタムインジケーターの作成方法。
  • 取引ロジックの設計:
    • 買い/売り条件の設定(例:移動平均クロス、RSIの過買/過売)。
    • ポジション管理(ロットサイズ、ストップロス、テイクプロフィット)。
  • 注文送信:
    • OrderSend()でポジションを開く。
    • PositionSelect()やPositionClose()でポジション管理。

学習アクション:

  • MQL5ドキュメントの「Trade Functions」(https://www.mql5.com/en/docs/trading)を読み、`OrderSend()`の使い方を理解。
  • シンプルな移動平均クロス戦略のEAを作成:mql5input 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を作成:mql5input 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); } }
  • エラーハンドリングを追加:mql5if(!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()で変数値を出力し、ロジックの動作を確認。mql5Print("MA Fast: ", maFast, " MA Slow: ", maSlow);
  • トレーリングストップを追加:mql5void 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コミュニティの活用:
  • メンテナンス:
    • 市場環境変化への対応(例:ボラティリティ変動)。
    • 定期的なバックテストと最適化。

学習アクション:

  • デモ口座でEAを1か月運用し、ログを分析。
  • MQL5コミュニティで質問投稿(英語推奨)。
  • 「MQL5 Programming for Traders」(無料PDF、MQL5公式)を読み、高度なテクニックを学ぶ。

練習課題:

  • 作成したEAをデモ口座で運用し、1か月のパフォーマンスをレポート。

学習のコツとリソースまとめ

  • 段階的に進める: 各ステップをクリアしてから次へ。焦らず小さな成功を積み重ねる。
  • 実践重視: コードを書き、動かしながら学ぶ。エラーは成長のチャンス。
  • リソース:
  • コミュニティ: MQL5フォーラムや日本のFXコミュニティ(例:ブログ、Discord)で情報交換。

次のステップ

  • 具体的なEAのアイデア(例:RSI+MA戦略、ニュースフィルター付きEAなど)を教えてください。サンプルコードを提供します。
  • 特定のステップ(例:デバッグ、注文送信)で詳しい解説やコード例が必要ならリクエストを!

どの部分を深掘りしたい?

まるもと愉快な仲間たち
いつもありがとうございます!
365日カウントダウン日記
投資
割箸マルモ商品サイト・X(旧Twitter)・YouTube
割箸まるもと愉快な仲間たち