【MT5 API シストレ開発①】ルールベース戦略の概要
この記事は、システムトレードを自身のPCで実装し運用するためのガイドです。
複数の記事に分けて、運用までのプロセスを詳しく解説します。
今回は第1回としてシステムトレード開発の概要をまとめ、具体的な実装方法については第2回以降で取り上げます。
システムトレードとは
システムトレードは、価格データ、テクニカルデータ、ファンダメンタルズデータなど定量的な情報に基づいて作成されたルールに従って売買判断を行うルールベースのトレード戦略です。
また、複数のデータから構造や傾向、パターンを抽出する仕組み(機械学習)を用いて最終的な売買判断につなげるトレード戦略もシステムトレードの一環と言えます。
どちらにも共通する要素として、プログラミングで実装可能な定量的トレード戦略である点が挙げられます。
ルールベースの戦略と機械学習を使った戦略では、システムトレード構築のプロセスが異なりますが、この記事では主にルールベース戦略を想定して解説します。
システムトレードをするメリット
システムトレードは、実際に資金をリスクにさらしてトレードする前に、過去データを使って検証(バックテスト)できる点が、大きなメリットです。
「理論的に自信がある戦略でも、実際には優位性が見られなかった」というような事象は、誰の身にも起こり得ますが、プログラムされた戦略であれば「その戦略が過去にどのようなパフォーマンスを示していたのか」を知ることができます。
バックテストで事前に優位性の有無を評価できることは、トレーダーにとって大きなアドバンテージとなります。

どうやって自動売買する仕組みを作るか
定期実行と常時稼働
Pythonプログラムとして実装する場合、そのやり方は非常に自由度が高いですが、大まかに分けると定期実行と常時実行の2つのスタイルがあります。
例えば、欧州市場のオープン時間に特定の条件を満たしているときのみポジションを持つという戦略であれば、プログラムは毎日「欧州市場のオープン時間」に一度のみ実行すればいいので定期実行プログラムで問題ないです。
一方で、トレンドが発生したときに仕掛けるトレンドフォローのような戦略は価格変動を常時監視する必要があるため、常時稼働プログラムを組まなければなりません。
拡張性
1つのシステムトレード戦略のみを運用するのであれば、1つのPythonファイルを作成すればいいのですが、戦略を後から追加しやすい設計にするなら、役割を分けたいつくかのPythonファイルを作成する方が適切となる可能性もあります。

このような構成で、「常時稼働して戦略を呼び出すメインファイル」と「ルールが定義された戦略ファイル」を分割することで、戦略を後から増やしたり、減らしたりする管理が容易になります。

また、上記のように後から機能を追加することも可能です。
全ての機能と全ての戦略を搭載した1つのプログラムを作成すると、プログラムを追加する際にシステム全体を破損させてしまう恐れがあります。
しかし、役割を分けた複数のファイルで構成することで、「今正常に動いているプログラムは変更しない」状態のまま新規でプログラムを追加できるようになり、より安全な管理が可能です。
バックテスト方法
Pythonでバックテストを行うには、過去データの取得、戦略のプログラミング、バックテスト用のプログラム作成が必要です。
Pythonにはルールベース戦略のバックテストに適したライブラリがいくつか存在しているため、それらを活用することで楽に実行できます。
バックテストのオーバーフィッティング
システムトレードの戦略開発では、オーバーフィッティングが最も大きな課題となります。
バックテストにて事前に優位性の有無を評価できる点をシステムトレードのメリットと説明しましたが、「本来は優位性がない戦略」であるにもかかわらず、あたかも優位性が高いかのようなバックテスト結果となる現象が頻繁に発生します。
金融市場のデータは、非常にノイズが強く「繰り返し再現される傾向、パターン」を見つけることは容易ではありません。
過去データに含まれる「再現性のないノイズ」に都合よく戦略を作ってしまうと、バックテスト結果だけ良くて、その後のトレードで全く再現できない場合があります。
戦略は「今後も繰り返し再現される傾向、パターン」を捉えるルールを作成できなければ、バックテストだけ良くても意味がないのです。
「再現性のないノイズ」に合わせてルールや条件を作ってしまうことを、カーブフィッティングやオーバーフィッティングといいます。
オーバーフィッティング対策
ルールベースのシステムトレードにおける一般的なオーバーフィッティング対策を紹介します。
1.ルールはシンプルに
ルールが複雑だと、過去データの「再現性のないノイズ」に対応してしまう柔軟性が生まれます。
シンプルなルールであえて柔軟性をなくすことで、ノイズへのフィッティングを防ぎます。
2.理論駆動
経済的に納得のできる理由を基に理論を立ててルールを作り、その理論に統計が伴っているかどうかをバックテストにて評価します。
なぜ「繰り返し再現されるデータのパターン」が発生するのかという理由が先にあってバックテストを行うことで、バックテスト結果を都合よく解釈してしまうバイアスを防ぎます。
3.バックテストは堅牢性を評価する
バックテストの評価では、「バックテスト上でどれくらい稼げたか」だけでなく、「どれくらい堅牢な戦略か」に注目します。
バックテストの成績が良くても、戦略のパラメーターが少し変化しただけで大幅に悪化するような戦略は堅牢とは言えません。
わずかな変化で大きく成績が左右される戦略は、過去データのノイズにフィットしている可能性があり、運用してから少し市場環境が変われば成績が悪化するかもしれないのです。
4.アウトオブサンプルで評価する
「戦略のパラメーターは何を採用するか」「複数ある候補のうち、どのロジックを採用するか」といった判断をするために、条件を変更しながらバックテストを行って「最も適切な条件」を見つけることを戦略の最適化といいます。
最適化の評価は、必ず評価期間(アウトオブサンプル)で行う必要があります。

戦略の最適化は過去データを全て使うのではなく、評価するための期間を残しておくことが非常に重要です。
次回について
第1回となるこの記事では、ルールベースのシステムトレード構築の概要を解説しました。
次回以降は、Pythonコードを交えながら具体的な解説を行っていきます。
第2回では、実際に戦略を作成して単一のバックテストを行う方法を取り上げる予定です。
本記事の執筆者:藍崎@システムトレーダー
| 本記事の執筆者:藍崎@システムトレーダー | 経歴 |
|---|---|
![]() |
個人投資家としてEA開発&システムトレード。 トレードに活かすためのデータサイエンス / 統計学 / 数理ファイナンス / 客観的なデータに基づくテクニカル分析 / 機械学習 / MQL5 / Python |
EA(自動売買)を学びたい方へオススメコンテンツ

OANDAではEA(自動売買)を稼働するプラットフォームMT4/MT5の基本的な使い方について、画像や動画付きで詳しく解説しています。MT4/MT5のインストールからEAの設定方法までを詳しく解説しているので、初心者の方でもスムーズにEA運用を始めることが可能です。またOANDAの口座をお持ちであれば、独自開発したオリジナルインジケーターを無料で利用することもできます。EA運用をお考えであれば、ぜひ口座開設をご検討ください。
本ホームページに掲載されている事項は、投資判断の参考となる情報の提供を目的としたものであり、投資の勧誘を目的としたものではありません。投資方針、投資タイミング等は、ご自身の責任において判断してください。本サービスの情報に基づいて行った取引のいかなる損失についても、当社は一切の責を負いかねますのでご了承ください。また、当社は、当該情報の正確性および完全性を保証または約束するものでなく、今後、予告なしに内容を変更または廃止する場合があります。なお、当該情報の欠落・誤謬等につきましてもその責を負いかねますのでご了承ください。
