今回は、MetaTrader 5における新しいマルチ通貨モードの実装についてお話しします。この機能は、拡張されたOnTick(string symbol)関数で実現されています。
この機能のメリット:
- デモ口座およびリアル口座で本物のマルチ通貨モードを提供します。
- 設定がシンプルで分かりやすいです。
- OnTick(string symbol)のイベントリストを設定可能で、NewTickやNewBarを選べます。
- シンボルのリストも設定でき、Market Watchの全シンボルまたは指定したシンボルを使用できます。
- Market Watchのシンボルを使用する際、OnTick(string symbol)内でイベントをリアルタイムで管理できます。
- その動作の詳細を理解する必要はありません。全てのコードはインクルードファイルに含まれています。
- ストラテジーテスターでも使用可能です。
Expert Advisorのテンプレートは以下のようになります:
//+------------------------------------------------------------------+ //| OnTick(string symbol).mq5 | //| Copyright 2010, Lizar | //| https://www.mql5.com/ru/users/Lizar | //+------------------------------------------------------------------+ #define VERSION "1.00 Build 1 (01 Fab 2011)" #property copyright "Copyright 2010, Lizar" #property link "https://www.mql5.com/ru/users/Lizar" #property version VERSION #property description "Expert Advisorのテンプレート" #property description "マルチ通貨OnTick(string symbol)イベントハンドラー付き" //+------------------------------------------------------------------+ //| マルチ通貨モード設定 | //| OnTick(string symbol)イベントハンドラーの設定 | //| 1.1 イベント処理に必要なシンボルリスト: | #define SYMBOLS_TRADING "EURUSD","GBPUSD","USDJPY","USDCHF" //| 1.2 Market Watchの全シンボルを使用したい場合は、これを使用: | //#define SYMBOLS_TRADING "MARKET_WATCH" //| 注意: 1.1または1.2のいずれか一方を選択してください。 | //| 2. OnTick(string symbol)のイベントタイプ: | #define CHART_EVENT_SYMBOL CHARTEVENT_TICK //| 注意: イベントタイプは | //| ENUM_CHART_EVENT_SYMBOL列挙体に対応しています。 | //| 3. インクルードファイル: | #include <OnTick(string symbol).mqh> //+------------------------------------------------------------------+ //+------------------------------------------------------------------+ //| Expertの初期化関数 | //| この関数は宣言する必要があります。たとえ空でも。 | //+------------------------------------------------------------------+ int OnInit() { //--- ここにコードを追加... return(0); } //+------------------------------------------------------------------+ //| Expertのマルチティック関数 | //| 標準のOnTick()関数の代わりにこの関数を使用します。 | //+------------------------------------------------------------------+ void OnTick(string symbol) { //--- ここにコードを追加... Print("シンボルの新しいイベント: ",symbol); } //+------------------------------------------------------------------+ //| ChartEvent関数 | //| この関数も宣言する必要があります。たとえ空でも。 | //+------------------------------------------------------------------+ void OnChartEvent(const int id, // イベントID const long& lparam, // long型のイベントパラメータ const double& dparam, // double型のイベントパラメータ const string& sparam) // string型のイベントパラメータ { //--- ここにコードを追加... } //+------------------------------------------------------------------+ //| Expertのデイニシャライズ関数 | //+------------------------------------------------------------------+ void OnDeinit(const int reason) { //--- ここにコードを追加... } //+------------------------------ 終了 -------------------------------+
いくつかの機能:
1. 設定
全ての設定は、#defineディレクティブを使って設定できます。OnTick(string symbol)関数の正しい動作には、SYMBOLS_TRADINGとCHART_EVENT_SYMBOLの2つのパラメータを指定する必要があります。最初のSYMBOLS_TRADINGはイベントに使用されるシンボルリストを定義し、次のCHART_EVENT_SYMBOLは全シンボルのイベントタイプを定義します。
SYMBOLS_TRADINGには、例えば以下のようにシンボルリストを設定します:
#define SYMBOLS_TRADING "EURUSD","GBPUSD","USDJPY","USDCHF"リストはカンマで区切られた文字列として準備し、行末で終了します。
SYMBOLS_TRADINGは以下のように定義できます:
#define SYMBOLS_TRADING "MARKET_WATCH"この方法では、Market Watchの全シンボルが使用されます。この方法を使えば、必要なシンボルをMarket Watchに追加したり削除したりすることで、リアルタイムでシンボルのリストを変更できます。
CHART_EVENT_SYMBOLイベントタイプは、ENUM_CHART_EVENT_SYMBOL列挙体からのフラグまたはその組み合わせで定義されます。詳細はこちらをご覧ください(ロシア語)。
以下はイベントタイプの例です:
//--- 例1. OnTickイベント: #define CHART_EVENT_SYMBOL CHARTEVENT_TICK //--- 例2. NewBar M1とNew Bar H1: #define CHART_EVENT_SYMBOL CHARTEVENT_NEWBAR_H1|CHARTEVENT_NEWBAR_M1
2. インクルードファイル。
#include OnTick(string symbol).mqhは必要です。このファイルにはOnTick(string symbol)関数の実装が含まれています。これにより、OnTick(string symbol)関数を簡単に使用できます。標準のいくつかの関数は、たとえ空でもExpert Advisorのコード内で宣言する必要があります。
3. ストラテジーテスター。
ご存知の通り(現在のところ)、OnChartEventはストラテジーテスターではサポートされていません。この問題を解決するために、グローバル変数を使用してイベントを扱います。この方法はストラテジーテスター専用で、他のすべてのケース(リアル/デモ口座)では、OnChartEventを介してイベントが処理されます。
ストラテジーテスターでは、OnTick(string symbol)がストラテジーテスターの設定で指定されたシンボルのティックで動作します。言い換えれば、OnTick()のように動作しますが、選択されたシンボルの新しいティックでも呼び出されます。ストラテジーテスターで動作させるためには、SYMBOLS_TRADINGはシンボルのリストとして指定する必要があります。
4. 「スパイ」。
「スパイ」(エージェントインジケーター)を使用します。「Spy Control panel MCM.ex5」ファイルは、\MQL5\Indicators\フォルダ内に配置する必要があります。
5. アーカイブからのファイルは、\MQL5フォルダに抽出する必要があります。必要なファイルは以下の通りです:
- /MQL5/Experts/OnTick(string symbol).mq5 - Expert Advisorの例、テンプレートのソースコード;
- /MQL5/Experts/OnTick(string symbol).ex5 - Expert Advisorのコンパイル済みファイル;
- /MQL5/Indicators/Spy Control panel MCM.mq5 - エージェントインジケーター、ソースコード;
- /MQL5/Indicators/Spy Control panel MCM.ex5 - エージェントインジケーター、コンパイル済みファイル;
- /MQL5/Include/OnTick(string symbol).mqh - OnTick(string symbol)関数の実装に必要な全関数を含むインクルードファイル。
コメント 0