今回は、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の初期化関数 |//| この関数は宣言する必要があります。たとえ空でも。 |//+------------------------------------------------------------------+intOnInit() { //--- ここにコードを追加... return(0); } //+------------------------------------------------------------------+//| Expertのマルチティック関数 |//| 標準のOnTick()関数の代わりにこの関数を使用します。 |//+------------------------------------------------------------------+voidOnTick(string symbol) { //--- ここにコードを追加... Print("シンボルの新しいイベント: ",symbol); } //+------------------------------------------------------------------+//| ChartEvent関数 |//| この関数も宣言する必要があります。たとえ空でも。 |//+------------------------------------------------------------------+voidOnChartEvent(constint id, // イベントID constlong& lparam, // long型のイベントパラメータ constdouble& dparam, // double型のイベントパラメータ conststring& sparam) // string型のイベントパラメータ { //--- ここにコードを追加... } //+------------------------------------------------------------------+//| Expertのデイニシャライズ関数 |//+------------------------------------------------------------------+voidOnDeinit(constint 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