English Русский 中文 Español Deutsch Português
preview
自動で動くEAを作る(第01回):概念と構造

自動で動くEAを作る(第01回):概念と構造

MetaTrader 5エキスパートアドバイザー | 28 2月 2023, 10:07
3 449 0
Daniel Jose
Daniel Jose

はじめに

この間、私の「一からの取引エキスパートアドバイザーの開発」稿を読んだ方から、「EAを作ってほしい」「作り方のガイドラインを教えてほしい」という連絡が何件かありました。そのようなすべてのご要望に対して、自動で動くEAをプログラミングすることは、決して難しいことではないと返答させていただきました。マニアであれ、完全自動で一定の操作プロセスをおこなうEAを自作したい方であれ、実際に学んで知識を深めたい方には、常に励ましと適切なガイドラインを差し上げたいと思います。

また、そのような方の多くが、プログラミングの始め方について、基本的に同じ疑問を持たれていることにも気づきました。ただ、私が最も驚いたのは、多くの方が、何らかの理由で、この種のEAの実装方法について完全に間違った考えをお持ちだということです。また、自動化されたシステムを作る過程、使う過程でのリスクを正しく理解していない方もいらっしゃります。ここで言う「自動化されたEAシステム」は、トレーダーが直接または間接的に介入することなく、何のコントロールもなく動作し、資産を売買できるシステムのことです。

そこで、このテーマについて、誰もが理解し、議論できるように説明することにしました。ステップごとに、アマチュアでもこのトピックの初心者でも、基本的にネイティブのMQL5のみを使用して、簡単かつ安全に一から自動売買EAをプログラミングできる方法を紹介します。奇跡の解決策などはありません。

この初期段階では、複雑な詳細には触れませんし、美しく派手なチャートも使いません。統計数学の知識が十分でない方を騙すつもりはありませんし、ここで紹介するEAが奴隷トレーダーの役割を果たし、あなたの生活の糧になるとは言いません。これの正反対です。本当に価値のあるEAを作りたいのであれば、EAの作成は多くの研究と献身を必要とする非常に長い作業なのです。プログラミングのためではなく、ここで検討する運用やその他の問題のためです。

多くの方が誤解されていますが、プログラミングの部分そのものが大きな問題なのではありません。問題は、多くの場合、実質的な利益よりも損失の方が多くなってしまうことです。繰り返しますが、問題はプログラミングにあるのではなく、EAで実行されるオペレーティングシステムの種類を設計する人の経験不足にあるのです。 プログラマーが「自分はすごいプログラマーだ」と盲信し、他の人がこれを信用すれば必ず問題が起きますが、決してプログラマーに責任はありません。 ただし、自分のやっていることを理解していれば、極めて冷静に仕事をすることができます。このことから、問題はプログラミングにあるのではなく、自動売買EAの開発を依頼した人が設計した取引システムにある可能性があります。


自動化されたEAを分割する方法と自動化されたEAの仕組み

コードを書くことに直接関係することを始める前に、この短い連載を読んでくださる皆様のために、物事をはっきりさせておく必要があります。自動化されたEAが実際にどのように動作するのかを既にご存じの場合、この連載で知識が増えることはないでしょう。しかし、どのように動作するのかやEAを動作させるために何が必要なのかをご存じでない場合は、少なくとも基本的な知識としてこの連載をご覧ください。なぜなら、この知識がなければ、完全に分からなくなってしまうからです。最初の一歩を踏み出したい方、何を勉強し分析すればいいのか知りたい方、この連載を通して一緒に考えてみませんか。

説明を始めるにあたり、以下の図01をご覧ください。

図1

図01:自動EA動作の模式図


この画像は、自動売買EAが実際にどのように機能するかを非常にシンプルかつ一般化した形で示しています。EAには2つの内部構造があることに注意してください。オーダーシステムはすべてのEAで常に同じであり、2番目の構造はトリガーシステムで、EAを自動的に動作させる役割を担っています。

上記の通り、オーダーシステムは常に同じです。したがって、システムの作成が終わり、それが安定的に動作し、完全に信頼できるようになれば、それはあなたが作成したEAの一部であるので、最も問題となるトリガーシステムに移ることができます。

ただし、構築したいシステムを検討する前に、その分け方を理解する必要があります。自動EAを作ろうとすると、多くの方が混同して完全に分からなくなってしまうので、この点にはご注意ください。特に初心者の場合は、最も基本的な概念を理解していないため、注意が必要です。


オーダーシステムの作り方

ここで、「一からの取引エキスパートアドバイザーの開発」の連載をお読みになってください。この連載では、このオーダーシステムの開発に必要なすべてのステップを示しました。この連載では、オーダーシステムに存在しうる(必ずしも存在しないとは限らない)いくつかの事柄は説明しませんでした。

詳細の2つは、EAが自動的にストップ ロス値を利益を受け取るリスクを掛けない位置に移動させる損益分岐点と、最初に損益分岐点 を作成してからそれを移動して利益を確保するトレーリングストップです。.

多くの方がご存じないのですが、MetaTrader 5プラットフォームにはトレーリングストップメカニズムがデフォルトで存在します。ただし、これを使うには、各ポジションごとに1つずつ有効にし、適宜値を調整しなければなりません.。これをおこなうことはあまり有望に思えずまったくやりがいがないように思えることは承知の上ですが、トレーリングストップが実際に開発およびテストされているオーダーシステムがない場合、最良の選択は、安定性と信頼性に優れたMetaTrader 5プラットフォームに存在するメカニズムを使用することです。

つまり、チャートに表示されて何が起こっているかを分析するための行から始まり、トレーリングストップのメカニズムに至るまで、これらはすべてオーダーシステムの一部であり、完全に別に作成して手動でテストし、適切と思われる期間に使用する必要があります。

この間、起こりうるあらゆる不具合やエラーを調整、修正、テストする必要があります。オーダーシステムがクラッシュしたり、EAがおこなっていることを実際に表していない情報をチャート上に生成したりすることは避けたいものです。この場合、EAがおこなうすべてのことを自分で取り消し、変更できるようにしたいと思うでしょう。

これらのテストは、実際の資金を失ったり得たりするリスクのないデモ口座で長期間にわたって実行する必要があります。テストは非常に集中的におこなう必要があります。

そのシステムが信頼でき、快適で使いやすい、つまり簡単に活用できると思えるまで、すべてを絶対的にテストしてください。次のステップに進まず、ここでオーダーシステムの調整とテストをおこなってください。また繰り返しますが、最低限まともなオーダーシステムを作る方法がチンプンカンプンでしたら、上で紹介した記事連載をお読みになってください。コードを勉強し、すべてがどのように動くのか、そしてどのように修正・調整すればシステムが快適になるのかを理解し、自動化できるようにします。

ゆっくりでいいのです。信じてほしいのは、実際の取引の最中にオーダーシステムが壊れては困るということです。これは全く面白くないでしょう。プラットフォームや市場のせいにするのではなく、実際に責任を負うのは自分だけだからです。

希望どおりに操作できて期待どおりに動作するオーダーシステムが完成したら、次のステップに進むことができます。かなりシンプルになりましたが、だからといって作業時の注意点をおろそかにしてはいけません。トリガーシステムのことです。


トリガーシステム

トリガーシステムはおそらく、プログラミングや数学の知識がない多くの方が、金融市場を勉強してフォローし始めるときに最もエキサイティングだと思われる部分です。トリガーシステムは、一度オーダーシステムに接続されると、EAが真のトレーダーであり、1日24時間、週7日、1年52週間、疲れることなく、ストレスなく、取引を開始または終了できるような印象を与え、「魔法」を起こす部分です。

実は、トリガーシステムは非常に面白く、これはプログラミングそのものではなく、数学的に何を表現できるかによってです。市場をフォローする人は誰でも、超クールなトレーディングシステムを持っていて、ものすごく儲かっているトレーダーの話を聞いたことがあるはずです。例えばラリー・ウィリアムズの話を聞いて自分もトレーダーになりたいと思わない人はいないでしょう。

残念なことに、今日の市場には、ラリー・ウィリアムズが使って儲け、認められたアルゴリズムよりも効率的な、たくさんの種類のアルゴリズムがあります。これは、彼が使っていたトリガーシステムが使えなくなったということではありません。逆に言えば、それでも利益が出るわけで、リスクコントロールが十分であれば、同じアルゴリズムでたくさん稼ぐことができるようになります。トリガーシステムは、EAが活用できるようにシンプルであるべきです。さらに、シンプルなシステムの方がテストもしやすいです。

複雑怪奇なルールと贅沢な分析に満ちたトリガーシステムを作っても、それをプログラムできる単純な数式に落とし込めなければ意味がありません。そのため、売りポジションまたは買いポジションに入るために、攻撃性レベルPを監視しながら、資産Xにリンクされた指標Zを見て、Kの時点でYを取引し、板情報を分析し、意図Wの発生を探して..といった異様なことは忘れてください。忘れるのです。こういうことをしてもうまくいかないし、少なくとも異様に複雑になって、アルゴリズムのテストができなくなります。

常にシンプルなものを選ぶということを忘れないでください。 常に、できるだけシンプルであることを心がけてください。起こりうる失敗の数がレベルまで下がるようにします。トリガーシステムがトリガー効果を生成して、大量の一連の注文が買いまたは売りの呼び出しのシステムに送信され始めないようにします。これが起これば、口座のみではなくあなたのすべての資産が破壊されます。

ここでひとつ、注意点を述べておきたいと思います。この種のトリガーは多くの問題を引き起こすことが多いので、EAがポジションの増加、すなわち価格の上昇または下降を平均化して売買を開始するようなトリガーシステムを作成することはできるだけ避けてください。EAの理想は、買いであれ売りであれ、新しいポジションを持とうとする前に、ポジションに入って決済することです。

さらに、一定期間注文の送信をブロックしたり、すでにポジションがある場合はEAが注文を送信しないようにする方法がいくつかあります。トリガーシステムを作成し設計するときに、このことについて考えてください。多くのEAが無限ループに入ってしまいます。そして、これが起こるとき、あなたの資金がすべて、数分または数秒のうちに失われるのです。

もうひとつ、トリガーシステムで重要なのは、背景の重要性です。勉強されていない方は、することをお勧めします。「ブラックマンデー」とも呼ばれる1987年の大暴落をご存じでしょうか。

ご存じでない場合は、EAの作成に進む前に、この暴落について調べてください。それはまさにトリガーシステムによって引き起こされたからです。まず勉強するのです。あなたは、前の人と変わらないのです。少なくとも、必要な知識をすべて持っているわけではないかもしれません。クオンツトレーディングのすばらしさや、EAが今後市場を席巻するという話に騙されないでください。いかなる情報、意見も鵜呑みにすることなく、慎重に判断してください。

少し立ち止まって考えてみてください。多くの人が主張するように、クオンツトレーディングが本当にシンプルで効果的だったとしたら、経済力と収益性をさらに高めることに関心を持っている大企業は、そのようなメカニズムを使用するのではないでしょうか。絶対に負けないトリガーシステムにお金を払い、誰にも複製できないように契約条項を加えることができるならば、なぜ最高のプログラマー、数学者、統計学者を雇うのでしょう。聖杯を見つけたと思う前に、よく勉強してください。真剣に研究している人なら誰でも、聖杯は単に存在しないことを知っています。

さて、ここまでで警告を出し、自動EAを生成する方法とそれに必要なものを示しましたが、次は最も興味深い部分に移りましょう。コードです


初期計画

さて、プログラマーであれ、初心者であれ、あるいはプロのトレーダーであれ、生涯にわたって覚えておくべき考え方や概念を理解していただいたところで、次のステップに進みましょう。ここからは、プログラミングスキルが本当に重要になるところです。これは、多くの人が間違いを犯す場所です。なぜなら、プログラミングは明らかに論理的な意味を持たずに一連のコマンドを書いていると考えるからです。これらの人は、物事がうまくいくことを望むだけで、すべてがうまくいくと考えます。

プログラミングは、複雑でも神秘的でもなく、コンピュータサイエンスの博士号を持ち、幅広い学問的背景を持つ大先生だけが、実際に何かを生み出すことに成功するものではありません。これは、知識レベルの低い人が、他人より賢く見せたいがための戯言です。

プログラミング、特にMQL5のようにCやC++に非常に近い言語では、多くの知識は必要ありません。実は、4つの基本的なことを知っていて、2つの本質的な資質を持っていればいいのです。知っておきたい4つのことはこれです。

  • 簡単なコマンドで実行できないプログラムはないので、簡単なコマンドを覚えてから複雑なコマンドを使うようにする。
  • 以下のコマンドの使い方を学ぶ:IF、FOR、等号(=)、加算(+)、減算(-)、除算(/)、乗算(*)、モジュロ(%)の基本的な演算子。
  • BitsとBytesの違いや、Boolean演算子について理解する:Not (!)、Or (|)、And (&)、Xor (^)。
  • 関数とプロシージャの違い、グローバル変数とローカル変数、イベント処理とプロシージャ呼び出しについて理解する。

プログラミングのすべては、この4つに集約されます。プログラムがどんなに複雑であっても、あるいは複雑になりそうであっても、コードをこの4つに煮詰めることができなければ、間違った方法で何かを作ろうとしていることになります。次は、2つの本質的な資質です。

  • 言語のドキュメント(この場合はMQL5のドキュメント)を読む。これは、あなたを助けるためにあります。
  • タスクを分割すること、整理整頓すること、まだ理解できないコード部分はコメントすること、そして結果がどうであれ必ずテストすることを学ぶ。とにかくテストして、テスト結果を書き留める。

このような前提のもと、時間をかければ必ず優秀なプログラマーになれますが、献身的に勉強することが必要です。誰かが教えてくれるのを待つのではなく、常に知識を求め、学ぶことで、物事はよりシンプルに、よりクリアになります。でも、肝心なのは次のことです。

謙虚になりましょう。あなたはすべてを知っているわけではありませんし、これからも知ることはないでしょう。自分よりもっと知っている人が必ずいることを受け入れるのです。

さて、最初の自動EAを作るために必要なことがわかったので、そのコードを書き始めましょう。まず、私たちのニーズに最も適合し、安全で安定的かつ堅牢なオーダーシステムを構築する必要があるということを忘れないでください。美しくても意味のないものでなく、機能するものを作ります。


真の計画

いよいよコードに進みましょう。と言いたいのですが、まだです。急いではいけません。MetaEditorコードエディターを開いてください。まず、一からEAを作成する必要があります。これは、友人から借りたものやWebからダウンロードしたものではなく、クリーンなコードであるべきです。本当に一から始めましょう。

やり方がわからない方のために:MetaEditorを開くと、左隅にブラウザと呼ばれるウィンドウが表示されます。そこに、MQL5で始まるディレクトリの構造が表示されることになります。このウィンドウをファイルエクスプローラのように扱うと、説明がわかりやすくなります。

同じウィンドウの中に、Expertsというフォルダがあります。ここには、作成するEAのコードを配置します。他の目的のためのフォルダもありますが、ここでは「Experts」のみに絞って説明します。このフォルダーをクリックすると、その中に入っているコードが表示されます。ほとんどの場合、既存のコードは関連する順番で整理され、それぞれが異なるEAを表しています。この構造に慣れることです。一定の構造を維持することが重要です。そうしないと、そこに存在するすべてのファイルの中で完全に分からなくなってしまい、必要なときに必要なコードを見つけることができなくなります。

最初の一歩を踏み出しましょう。とても簡単なので、以下の画像にしたがって操作してください。

図1

図02:何を作成するかを選択する

図03

図03:コードが配置されるディレクトリを指定する

図04

図4:EAに名前を付ける(拡張子は任意)

図05

図05:[次へ]をクリックする

図06

図06:[完了]をクリックする


上の図のような手順を踏むと、MetaEditorは絶対的に明確で安全なコードを作成します。以下のコードのようなものが表示されます。

#property copyright "Daniel Jose"
#property link      "https://www.mql5.com/pt/articles/11216"
#property version   "1.00"
//+------------------------------------------------------------------+
int OnInit()
{
        return INIT_SUCCEEDED;
}
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
}
//+------------------------------------------------------------------+
void OnTick()
{
}
//+------------------------------------------------------------------+

#propertyコンパイルディレクティブについては気にしないでください。ここでやろうとしていることには影響を与えません。チャート上でEAを起動したときに開くウィンドウを設定するためのものです。気にしなくて大丈夫です。ただし、他のことを気にするべきです。

ご覧のように、MetaEditorで3つのプロシージャが作成されています。OnInitOnDeInitOnTickです。これらのプロシージャは、実はイベント管理関数です。MQL5のプログラミングは、他の言語とは異なります。MQL5は、手続き的に動作する他の言語とは異なり、イベント処理言語です。イベントベースの言語は、最初は分かりにくいかもしれませんが、時間が経つにつれて、どうすればいいのかが分かってきます。

ここでは、あまり細かいことには触れず、次のように作業します。MetaTrader 5プラットフォームはイベントを生成し、あなたはこのイベントに反応します。つまり、EAをチャートに配置すると、MetaTrader 5はInitイベントを起動します。これにより、プラットフォームはそのコードでOnInit関数を探し、(この場合)EAが読み込まれ、起動されます。一度この操作をおこなうと、この関数は二度と呼び出されません。MetaTrader 5がEAをチャート上に配置するたびに関数が呼び出されるので、これは一般的な説明です。覚えておいてください。

ここには、OnDeInit関数もあります。MetaTrader 5プラットフォームは、DeInitが形成されたときにこれを呼び出し、すべての要素(EAとインジケータ)に何かが起こったことを伝え、それらをチャートから削除します。プログラムが削除された理由を調べるには、MetaTrader 5プラットフォームから返される理由の値を確認してください。

そして最後に、OnTick関数があります。MetaTrader 5プラットフォームでTickイベントが発生するたびに呼び出されることになります。このイベントは、新しいティックが到着するたびに発生します。つまり、どんな操作であっても、トレードサーバーで新しい操作がおこなわれると、Tickイベントが発生するので、OnTick関数がトリガーされ、そこにコードが入るというわけです。

ご想像の通り、OnTick関数は私たちのシステムにとって非常に重要ですが、多くのEAのアキレス腱となることがよくあります。多くのプログラマーが、経験不足や過失によってこの関数内にすべてのコードを入れてしまい、この関数に負荷がかかってEAが不安定になり、クラッシュや重大なエラーが発生しやすくなるためです。最も解決が難しいエラーのひとつが、複雑で再現が困難な相互作用によって引き起こされる実行時エラーですが、これについては、別の記事で詳しく見ていくことにしましょう。

このため、プラットフォームとそのMQL5言語は、最小レベルのセキュリティと信頼性を維持するために、関数を操作する他の方法を促進しています。一般的に物事を改善するために使用できる他のタイプのイベントもあります。MQL5がMetaTrader 5プラットフォームによって引き起こされるイベントを処理することによって機能することを、手続き的なコードを作成せずに、入口点と出口点があり、この2点間のすべてのことはプログラムによって管理され、プログラマーによって処理されなければならないことを知らなかった場合は特に、頭の中に大きな混乱を作りたくないので、これは後で見てみましょう。

ここで、MQL5では、必要なイベントのみを処理することにします。プログラムがEAと見なされるには、2つのイベントが含まれている必要があります。EAの初期化を処理するOnInitと、ティックイベントを処理するOnTickです。OnDeInitイベントはあってもなくても構いませんが、特殊な場合に役立つことがあります。

ドキュメントの読み方を学び、ドキュメントで説明されていることを学ぶことに興味を持つために、トリガーできるイベント、特にEAを作り始めるときにMetaEditorで自動的に作られる3つのイベントについて、どのように書かれているかを見てみましょう。OnInitOnDeInitOnTickです。#propertyコンパイルディレクティブについても忘れずにご覧ください。

この記事で説明されている最初のステップを理解していないと、この連載の他の記事の説明で完全に分からなくなってしまうので、非常に重要です。

次回は、チャートから直接売買注文を出すことができる、シンプルでわかりやすいオーダーシステムの作り方を紹介します。したがって、自動モードで動作するEAを作りたい方にとっては非常に興味深いトピックとなりますので、次回の記事をお楽しみにお待ちください。



MetaQuotes Ltdによりポルトガル語から翻訳されました。
元の記事: https://www.mql5.com/pt/articles/11216

自動で動くEAを作る(第02回):コードを始める 自動で動くEAを作る(第02回):コードを始める
今日は、自動モードでシンプルかつ安全に動作するエキスパートアドバイザー(EA)を作成する方法を紹介します。前回は、自動売買をおこなうEAの作成に進む前に、誰もが理解しておくべき最初のステップについて説明しました。概念と構造が検討されました。
DoEasy - コントロール(第31部):ScrollBarコントロールのコンテンツのスクロール DoEasy - コントロール(第31部):ScrollBarコントロールのコンテンツのスクロール
この記事では、水平スクロールバーのボタンを使用してコンテナのコンテンツをスクロールする機能を実装します。
自動で動くEAを作る(第03回):新しい関数 自動で動くEAを作る(第03回):新しい関数
今日は、自動モードでシンプルかつ安全に動作するエキスパートアドバイザー(EA)を作成する方法を紹介します。前回は、自動売買EAで使用するオーダーシステムの開発に着手しましたが、必要な関数のうち1つしか作っていません。
ティッカーテープパネルの作成:基本バージョン ティッカーテープパネルの作成:基本バージョン
ここでは、通常取引所の相場表示に使われるプライスティッカーを使った画面を作成する方法を紹介します。複雑な外部プログラミングを使わず、MQL5だけでやってみようと思います。