MQL5を初体験

MetaQuotes | 2 10月, 2015

なぜMQL5が必要なのでしょうか?

MQL5のトレーディングストラテジーのプログラム言語を学ぶと決めた理由は、たくさんあるでしょうが、私たちはその決定を歓迎します!経験のあるユーザーは言語のドキュメントや、このサイトの記事やサービスを有効に活用できるでしょう。しかし、もしあなたがMetaTrader 5のクライアントターミナルを目にしたばかりであれば、多くのことが初めて見るもので、混乱するでしょう。

MQL5を知る利点はどこにあるでしょうか?それは多分、学ぶことに決めたのが最新のOOP (オブジェクト指向プログラミング)言語であるということでしょう。MQL5を学んだ後には、C++、 С#、 Javaなどの高レベルの言語を簡単にマスターできるでしょう。もちろん、それらがとても良く似ているという意味ではありませんが、基本の多くは同じです。

あるいは、その言語のうち1つを知っていて、独自のトレードロボットや金融市場の情報分析システムを作るアイデアを持っているかもしれません。そういった目的があれば、そのために特別に作られたMQL5をマスターするのは簡単かもしれません。

もしくは、トレードロボットやMetaTrader 4ターミナルのインディケーターを作るために使われているMQL4をすでに知っているのかもしれません。もしそうであれば、MQL5 言語と新しいMetaEditor 5の開発環境の利点を理解するのはわずかな労力で済むでしょう。.

MQL5を学ぶ理由は多くあるでしょうが、どこから学び、何に注意をすればよいかのヒントをお教えしたいと思います。それでは始めましょう。

MQL5を初体験


言語の可能性と機能

MetaQuotes Language 5 (MQL5) はMetaQuotes Software Corpにより同社の何世紀にも及ぶオンライントレードのプラットフォーム開発における経験に基づいて開発されました。以下はこの言語の主な強みです。

初心者のためのプログラミング

高レベルの言語でのプログラミングの経験がない場合は、C++のマニュアルをサンプルとして使いMQL5言語の基本(構文、データタイプ、変数、オペレーション、関数やOOPなど)を勉強することができます。MQL5の開発者は、人気の高いC++言語との互換性を最大化しようと努力してきました。

経験から、数か月かけてMQL5を1から勉強することは可能です。1年以内にそのすべての機能をマスターするユーザーもいるでしょう。MetaTrader 5とMQL5の限りない可能性を見てみてください。もしかしたら、何か素晴らしいものを作成してみたくなるかもしれません。

MQL4ユーザーへ

まず初めに、新しいインディケーターのアプローチは不便に感じるかもしれません。多くの新しいイベント処理関数には驚くかもしれません。C言語に似た構文や、新しいデータ型は最初見慣れないかもしれません。

しかし、少し時間が経てば、MQL5がMQL4よりも優れている点を喜ぶようになるでしょう。また、チャートやグラフィックオブジェクトを使った豊富な可能性ややキャンバスに描くように使えることをどう感じるでしょうか?MQL5になれれば、そのすべてを試してみることができます。

プロのプログラマーの方たちへ

最新の言語でプログラミングをしていれば、MQL5をマスターするのは簡単です。ООPやイベントモデルについては理解できています。次の、アルゴリズムトレーディングのための特別な機能について学ぶだけで済むはずです。

他にもコードを安全に書く為とアプリケーションのオペレーションタイムを最適化する理由から、言語のインプリメントされる構文に、次に上げる小さな違いがあります。

まだ、トレーディングオペレーションをしたことがなければ、トレードの専門用語や、トレードロボットを書いている時に出てくるストラテジーテスターについて疑問があるかもしれません。記事 セクションにはその疑問の答えになる出版物が含まれています。次のようなものです。

このように、MQL5言語はプロのプログラマーにとって問題ではありません。主な問題はトレードとそれに関わるコンセプトの理解です。


MetaTrader 5ターミナルのインストール

MetaTrader 5ターミナルのWebインストーラーは次のリンクからhttps://download.mql5.com/cdn/web/metaquotes.software.corp/mt5/mt5setup.exe公式Webサイトでダウンロードできます。MetaTrader 5ターミナルのインストールはとても簡単です。数クリックで終了します。どのドライブにインストールしても構いませんが、ウインドウズのOSがインストールされている場所以外へのインストールを推奨します。その理由は、MicrosoftがVistaから、ユーザーのアクションコントロールUACに対する新しいシステムを導入したからです。

そのため、システム管理の経験がないか、多くの隠しフォルダを経由したくなければ、ターミナルのインストレーションフォルダをプログラムファイルから離し、データターミナルがMetaTrader 5のターミナルと同じディレクトリに保存できるように指定しましょう。例えば、もしもOSがC:\ドライブにインストールされていたら、ターミナルをドライブD:\にインストールしましょう。

インストレーションパスに依るMetaTrader 5の動作モードの違いは、内蔵のユーザーガードで始める(Getting started) → ターミナルの開始で詳しく説明されています。


インディケーター、スクリプト、とExpert Advisors

MQL5言語では3つの基本的なプログラムタイプが実現されています。それぞれのタイプは次に上げている、特別なタスクを解決するのに適しています。

MetaTrader 5 インディケーターサンプル

MQL5の基礎を学ぶには、MQL5ドキュメントやコードベースのサンプルを見て、スクリプトの書き方から始めるのが良いでしょう。その次に、オブジェクト関数 やデモアカウントでトレードオペレーションを試してみるのが良いでしょう。

次のステージは、自分独自のカスタムインディケーターを書き、コードベースや記事のサンプルの分析です。インディケーターをマスターする頃には、イベント処理関数を学ぶ準備ができていることでしょう。

最終的なごゴールは、シンプルなExpert Advisorを作成しMetaTrader 5 ターミナルのストラテジーテスターを使い、過去のデータでEAを使用してみることです。エキスパートテスタートレーディングシステムには多くのそれを対象にした記事があります。

そして、もちろんMQL5プログラミングに関するもっともエキサイティングな機能は、MQL5ウィザードを介したExpert Advisorのカスタムモジュールの開発であるということにも触れるべきでしょう。これに関する多くの記事がありますし、コードベースには多様な既製のMQL5ウィザードモジュールがあります。


イベントモデル

MQL5は何かイベントが起きた時のみ動作します。それはMQL5プログラムのダウンロードや初期化、新しいティックの登場(通貨ペア価格の変化)チャートプロパティの変更、通貨ペアやチャートのタイムフレームの変更、 指値注文の作動などを表します。

そのため、イベントモデルを使うと、インタラクティブなプログラムをもっとも簡単な方法で書くことができます。カスタムグラフィカルパネルや、自分の要求を満たす使いやすいユーザーインターフェースなどの作成の大きな可能性があります。必要性に合った便利なユーザーインターフェースを作成する. グラフィックを扱う組込関数を使うと、フル装備でよく設計されたアプリケーションを作成することができます。

MQL5プログラムでのイベント処理の簡単な例

EventChartCustom()関数を使い、MetaTrader 5のアクティブチャートでカスタムイベントを作成できることで、複雑なインタラクティブシステムを作成できるようになります。イベントトラップとイベント処理はOnChartEvent()関数によって実行されます。紹介した機能は取引履歴に基づいたトレードのプレイヤーEventChartCustom()関数サンプルで示されています。


デバッグとユーザーガイド

MetaTrader 5ターミナルとMetaEditor 5にはしっかりとしたユーザーガイドが組み込まれており、F1を押すとみることができます。すべてのドキュメントはLiveUpdateを介して自動的にアップデートされます。また、多言語対応のユーザーガイドをMetaTrader 5トレーディングプラットフォームの公式サイトで見ることができます。

MQL5ドキュメントを学ぶことがもっとも重要です。オンラインのhttps://www.mql5.com/ja/docsだけではなく。多言語対応のユーザーガイドをCHM とPDFフォーマットでダウンロードすることが可能です。

クライアントターミナルとMetaEditor 5は互いに密接に統合されています。F4を押すことで、交互に切り替えることができます。これはコードの編集時にとても便利な機能です。特に複数のターミナルで同時に行っているときに便利です。

すべてのMQL5プログラムはF5を押すことでエディターから直接デバッグすることができます。チャートは自動的に開き、プログラムは (スクリプト、インディケーター、Expert Advisor)チャート上で実行されます。スクリプトをデバックする時は、OnStart()オペレーションが完了すると、自身でアンロードするということを考慮しなければなりません。ですから、デバッグのプロセスはこの段階で自動的に完了し、”デバッグ”チャートはスクリプトによって作成されたグラフィカルオブジェクトを保存することなく閉じられます。従って、ブレイクポイントや大きな値を持つSleep()を、スクリプトの最後のreturn()オペレータの前に入れます。

デバッグモードはプログラムのエラーを検知するのと、MQL5を学ぶのとの両方にとって必要なものです。コードにブレイクポイントを使う他に、特別なDebugBreak()関数があります。プログラムがデバッグモードの時だけ動く関数です。

そして、もちろんMetaTrader 5に統合されたパワフルな検索エンジンを忘れてはいけませんソースファイルやフォルダだけではなく、MQL5.communityのWebサイト(記事、フォーラム、コードベース)からも検索できます。

MetaEditor 5でのサーチパラメータの設定

得られた結果はカテゴリーでフィルターをかけられます。そのため、開発環境では、エディターやMQL5言語の組み込み式ユーザーガイドの利用だけではなく、mql5.comのWebサイトから有用な情報を探してくることもできます。


コードプロファイリング

MetaEditor 5の開発環境では、プログラマーはコードライティングとデバッグを簡単にする豊富な機能が利用できます。デバッグ機能以外にプログラマーが必要なものは何でしょうか?コードプロファイリングです、当然ですね。プロファイリングは、個々(関数、行)の実行時間など、アプリケーション機能を使いやすい形に集めることです。

プロファイリングにより、アプリケーションのうち、どの部分に一番時間がかかっているかを見つけることができます。インプリメントされた変化を動作速度という点から評価し、もっとも効率的なアルゴリズムを選ぶことができます。プロプログラマーはこの機能で何ができるかをしっかりと理解しています。初心者は、この機能で自分のプログラムを違う角度から調べることができます。

MetaTrader 5のコードプロファイリング

上記のスクリーンショットはフォーラム (https://www.mql5.com/en/forum/7134)に投稿されたコードプロファイリングです。このスレッドからコードプロファイリングをダウンロードしてみましょう。


MQL5 ストレージ: 統一された方法であなたの作業を保存、管理します。

MQL5のプログラミングのもう1つの興味深く便利な機能が、パーソナルMQL5ソースコードストレージです。それを使うことで、世界中のどこからでもMetaEditor 5を介し、直接自分のファイルにアクセスすることができます。MQL5プログラムだけではなく、C++ ソース(cpp、 h)やBMP、WAVソースファイルも保管することができます。

MQL5ストレージへのファイルの追加

コードを追加、抽出、変更を元に戻したりできます。 — 簡単に言えば、現代のSVNシステムでできることはすべてできます。MQL5ストレージをMetaEditor 5から直接使う方法に加え、Tortoise SVN.のようなSubversion 1.7をサポートする外部クライアントを使うこともできます。


インディケーター、チャート、グラフィカルオブジェクトの一生について

MetaTrader 5を開発する時には、すべての過去の経験が考慮されました。そのため、いくつかの機能は最初見た時には見慣れないかもしれません。例えば、indicator calculation — 計算パートを表すインディケーターには効率化モデルが使用されています。多くのExpert Advisors、スクリプトやその他のインディケーターが1つのインディケータの結果を使用できます。これは、1つのインディケーターが、1つの通貨の複数のチャートにセットされた場合、計算は実質1つの計算として実行されます。この方法により、時間とメモリが節約できます。

また、1つのインディケーターの値は、他のインディケーターの値やMQL5の配列の値を使って計算できます。その結果、複雑なインディケーターの計算を統一された簡単な方法で行うことができます。前述の通り、MQL5言語での、インディケーター値のグラフ表示 の可能性は計り知れません。

チャートプロパティとグラフィックオブジェクトの管理に関するすべてのオペレーションは非同期のものです。このことで、ターミナルのビデオシステムが、色、サイズなどの変更を表示するのをユーザーが待つことで、時間を浪費するのを防ぎます。オブジェクト関数チャートオペレーションの実行結果をすぐに欲しい場合は、ChartRedraw()を呼び出し、チャートを強制的に再描画します。それ以外の場合は、チャートはターミナルにより、自動的に再描画されます。


トレーディングオペレーション

MQL5でのトレードはOrderSend()関数を使いリクエストを送信することで実行されます。リクエストは特別な MqlTradeRequestストラクチャで、トレードのアクションに応じて必要な値で埋められています。

売買や、いくつかの条件の元で行う指値注文、指値注文の取り消しなどを行うことができます。OrderSend()は正しく実行されれば、トレードの結果がMqlTradeResultストラクチャで固定されます。

MQL5を勉強する時に、まず最初は MqlTradeRequestストラクチャを正しく埋められているかをチェックする必要はありません。標準ライブラリには、トレードオペレーションを実行するための、特別なCTradeクラスがあります。MQL5のプログラミングを簡単にするため特別にデザインされたクラスです。

オーダーの扱い

OrderOpen

パラメータをセットした指値注文を出す。

OrderModify

パラメータをセットした指値注文を変更する。

OrderDelete

保留のオーダーを削除する

ポジションの扱い

PositionOpen

パラメータをセットしたポジションを開く。

PositionModify

パラメータをセットしたポジションの変更。

PositionClose

ポジションを閉じる。

追加のメソッド

Buy

パラメータをセットした買いのポジションを開く。

Sell

パラメータをセットした売りのポジションを開く。

BuyLimit

パラメータをセットした買い指値(現在のマーケットプライスよりも低い価格で買う)オーダーを出す。

BuyStop

パラメータをセットした買い逆指値(現在のマーケットプライスよりも高い価格で買う)オーダーを出す。

SellLimit

パラメータをセットした売り指値(現在のマーケットプライスよりも高い価格で売る)オーダーを出す。

SellStop

パラメータをセットした売逆指値(現在のマーケットプライスよりも低い価格で売る)オーダーを出す。

CTradeクラスのアプリケーションのサンプルは、ターミナルの標準デリバリーのMACDサンプルトレーニングExpert Advisorで見ることができます。Expert Advisor<terminal_directory>\MQL5\Experts\Examples\MACDにあります。オーダー、ポジション、取引などを扱う便利なクラスもCTradeと一緒にトレードクラスセクションに記載されています。


MetaTrader 5 ストラテジーテスター

MetaTrader 5はトレードロボットによる様々な金融市場での取引を行う以外に、過去のデータの異なる範囲における確率と安定性をチェックすることができます。これを行うには、ストラテジーテスターがターミナルにインプリメントされていルことが必要です。

Expert Advisorのテスト/最適化の際には、ターミナルは、エージェントと呼ばれる個別のサービスにタスクを割り振る実行管理者であると考えられます。 そのため、テストはターミナルとエージェントの通信セッションとして実行されます。テスターはエージェントにタスクを送信し、実行結果を受け取ります。

MetaTrader 5ターミナルテスターによるトレーディングシステムの最適化

テスターとエージェントのメッセージはジャーナルに表示されます。テストにエージェントは、Expert Advisor内でPrint()とAlert()関数によって生成された大量のメッセージを送信することができます。ゆえに、エージェントが送信したすべてのメッセージがジャーナルに表示されるわけではなく、一部はスキップされます。すべてのメッセージを表示する必要性によってテスティングがスローダウンするのを防ぐためです。

そのため、ジャーナルは<terminal_folder>\tester\logs\に保管され、すべてのメッセージの詳細はテスターエージェントの適応するフォルダに保存されます。テストの分析のために、詳細ログを検索する際には、これを覚えて置いてください。幸いなことに、テスターにはログビューワーがり、ある一定の期間のログを探すことができます。

テスティングとは別に、Expert Advisorの入力パラメータの最適化モードがあり、テスターは何千ものテスターエージェント (MQL5 クラウドネットワークのものなど)を使うことができます。この場合、メッセージはPrint()によって表示され、Alert()関数はテスターエージェントが置かれているPCのハードディスクへのトラフィックの増加を防ぎ、ディスクスペースを確保するため、完全に抑制されます。唯一の例外はOnInit()関数です。この関数はPrint()を使い、初期化に失敗したりExpertRemove()関数によりテストを拒否された理由を明確にするためのメッセージを送信することができます。

テスターには多くの興味深い情報があります。MetaTrader 5 のクライアントターミナルのストラテジーテスターの可能性を皆さんに喜んでもらえると思っています。


限界に挑戦

あなたがだれであっても、MQL5を学び終えた後には、新しいチャンスを発見できるはずです。その発見には、プログラミング言語の理解や、トレードに対する新たな洞察や新しいテクノロジーの知識が含まれるかもしれません。新しいMetaTrader 5ターミナルは、これまで誰も開発することのなかった多くの新しい機能を備えています。

この記事ではDLLを使った有益な方法や、コードベースからプログラムをエディターにダウンロードしたり、その1クリック起動など、多くの刺激的なことに触れることができませんでした。ターミナルの機能の長いリストを読むことを躊躇しないのであれば、是非MetaTrader 5:想像できる以上のこと!をお読みください。

皆様のご多幸をお祈りし、MQL5.communityで永久会員としてお話できるのを楽しみにしております!