MQL5を初体験

2 10月 2015, 16:53
MetaQuotes Software Corp.
0
935

なぜ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は他の言語で書かれたアプリケーションを簡単に使うことができます。
  • MQL5プログラムの動作速度はС++ プログラムとほぼ同じです。
  • 豊富な内蔵機能による、テクニカルインディケーター、グラフィックオブジェクト、ユーザーインターフェースの作成。
  • 内蔵OpenCL サポート.
  • 大きな標準ライブラリとコードベースの豊富なサンプル。
  • 特別なコードを書く必要なく、何千ものスレッドの数学的最適化タスクの平行化を行うことができます。

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

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

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

MQL4ユーザーへ

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

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

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

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

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

  • ポインタの算術演算がありません。 MQL5のポインタは、実際はディスクリプタです。
  • exceptionがありません。
  • すべてのタイプの配列はリファレンスによって渡されます。
  • 配列は4次元以上持てません。
  • 配列とオブジェクトを関数から返すことはできませんが、オブジェクトポインタを返すことはできます。
  • goto文がありません。

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

このように、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つの基本的なプログラムタイプが実現されています。それぞれのタイプは次に上げている、特別なタスクを解決するのに適しています。

  • スクリプトはプライスチャートを1つ起動するためのプログラムです。プログラムの実行が、定義済みのOnStart()ハンドラに到達すると、スクリプトは完了しチャートからアンロードされます。OnStart()関数はスクリプト専用の関数です。実行可能なコードが置かれるべき、唯一の起動ポイントです。スクリプトにはiterationの間にpauseを含む無限のループを含む場合があります。ですので、強制的に止められるまでチャート上で動作します。それぞれのチャートでは1つだけのスクリプトが実行可能です。
  • インディケーターは価格データに基づいて値の配列を計算するプログラムです。インディケーターの値を格納する特別な配列をインディケーターバッファと呼びます。1つのインディケーターに許可されるバッファの数は事実上無制限です。
    各チャートはそれぞれ同時に、同じインディケーターのコピーを含む、複数のインディケーターを表示することができます。インディケーターのプロパティを扱う関数はインディケーターからのみ利用可能です。スクリプト、Expert Advisorからは利用可能ではありません。OnCalculate()ハンドラが削除されていると、そのプログラムはインディケーターであると考えられます。インディケーターの有効期間は無制限です。チャートから削除されるまで実行され続けます。OnCalculate() 関数はインディケーター内でのみ呼び出し可能です。
  • Expert Advisorはもう1つの有効期間が無制限なプログラムです。チャート上に必要な期間だけ配置しておけます。Expert Advisorsには大抵、OnTick()イベントハンドラがあります。これはExpert Advisorのソースコードを扱っていることを明確に示しています。同時に配置できるExpert Advisorは1つだけなので、1つのチャート上で実行されます。
    Expert Advisorsの主な目的はトレーディングシステムの自動化です。しかし、マニュアルトレードのためのグラフィカルインターフェースのインプリメンテーションや、現在のマーケット状況の分析とその視覚的プレゼンテーションなど、特別なサービス機能を持つこともできます。

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で永久会員としてお話できるのを楽しみにしております!

MetaQuotes Software Corp.によりロシア語から翻訳された
元の記事: https://www.mql5.com/ru/articles/447

一瞬でトレードロボットを作る方法 一瞬でトレードロボットを作る方法

金融市場でのトレードには深刻なものを含む多くのリスクがあります。すべてのトレーダーの夢は、絶えずいい状態でいて、恐怖、欲望、あせりなどの人間的な弱さを持たないトレードツールを持つことです。

トレーリングストップを採用した利益を生み出すアルゴリズム トレーリングストップを採用した利益を生み出すアルゴリズム

この記事では、異なるエントリーとトレーリングストップを使ったエグジットで利益を生むアルゴリズムの可能性について学んでいきたいと思います。エントリーのタイプとして、ランダムエントリーとリバースエントリーを使用します。使う逆指値注文はトレーリングストップとトレーリングテイクです。この記事では、年間約30%の利益を生み出すアルゴリズムを紹介します。

MQL5 で多色インジケーターを作成する MQL5 で多色インジケーターを作成する

この記事では、多色のインジケーターを作成する方法あるいは既存のものを多色に変える方法を検討する。MQL5 は情報を便利な形で提示することを可能にする。さてインジケーターの付いた十を越えるチャートを見て RSI (相対力指数)あるいは統計レベルの解析を行う必要はない、インジケーターの値に異なった色でローソク足を塗ればよい。

MQL5でのトレードオペレーション - 簡単です MQL5でのトレードオペレーション - 簡単です

ほとんどすべてのトレーダーは利益をあげるためにマーケットに参加しますが、中にはそのプロセス自体を楽しむトレーダーもいます。しかし、手動のトレードだけが、エキサイティングな体験をさせてくれるわけではありません。自動トレードシステムの開発も非常に興味深いものです。トレードロボットの作成は面白いミステリー小説を読むのと同じくらい面白いものです。