私たちのファンページに参加してください
TradeStateは、時間に応じたエキスパートアドバイザの取引モードのスイッチャーです。 - MetaTrader 5のためのライブラリ
- ビュー:
- 961
- 評価:
- パブリッシュ済み:
- 2016.01.08 12:43
- このコードに基づいたロボットまたはインジケーターが必要なら、フリーランスでご注文ください フリーランスに移動
時間に応じて自身のエキスパートアドバイザの取引を制限することになったことはありますか?例えば、夜中のセッションにエキスパートアドバイザが取引活動をしないようにするにはどうしたらよいか?もしくは、あなたがモスクワ証券取引所のデリバティブセクションで取引をしていて、市場が終了する前、または休日前に全てのポジションを閉じなければならなかったことはありますか?より複雑な構成の場合にはどうでしょうか?例えば、午後7時まであなたのエキスパートアドバイザはポジションを開いたり閉じたりすることができ、午後7時以降は新しい取引を行わないようにするにはどうしたらいいでしょうか?実際には、このような柔軟な設定は可能です。この場合において、特別なモジュールCTradeStateが、あなたの役に立ちます。
CTradeStateはどう動作するか?モジュールは、ENUM_TRADE_STATE構造体を使って書かれた、6つの取引状態のうちの1つを返します。:
//+------------------------------------------------------------------+ //| エキスパートアドバイザの取引状態を判別します | //+------------------------------------------------------------------+ enum ENUM_TRADE_STATE { TRADE_BUY_AND_SELL, // 買いと売りが許可されています。 TRADE_BUY_ONLY, // 買いのみ許可されています。売りは禁止されています。 TRADE_SELL_ONLY, // 売りのみ許可されています。買いは禁止されています。 TRADE_STOP, // 取引は禁止されています。すぐさま全てのポジションを閉じます。エントリーへの新しいシグナルは受け付けません。 TRADE_WAIT, // オープンポジションの制御が失われています。新しいシグナルは無視されます。ニュース受信の際に便利です。 TRADE_NO_NEW_ENTRY // エントリーシグナルは無視されます。しかしながら、すでに開いているポジションは取引ロジックに応じます。 };
自分のエキスパートアドバイザで、この構造体のうちのどの修飾子があなたにCTradeState(値はGetTradeState方式を使い返されます)を返すかによって、特定の一連の動作を行う必要があります。
取引モードを使用する前に、それらを設定する必要があり、それにはSetTradeStateを呼び出す必要があります。SetTradeStateのプロトタイプメソッドは次のようになります:
//+------------------------------------------------------------------+ //| 取引状態TradeStateを設定します。 | //| INPUT: | //| time_begin - | //| その時間から取引状態が有効になる時間。 | //| time_end - その時間まで取引状態が有効になる時間。 | //| day_of_week - | //| 取引状態の設定が反映される曜日。修飾子ENUM_DAY_OF_WEEK、 | //| または修飾子ALL_DAYS_OF_WEEKに相応します。 | //| state - 取引状態。 | //| 注意。time_beginとtime_endの日付組成は無視されます。 | //+------------------------------------------------------------------+ void CTradeState::SetTradeState(datetime time_begin,datetime time_end, int day_of_week, ENUM_TRADE_STATE state);
例えば、取引状態が修飾子TRADE_WAIT(オープンポジションへの制御は一時的に停止し、新しいポジションは開かれません)を18:45から18:49までの時間に返すようにしたい場合、SetTradeStateを次のパラメータと共に呼び出す必要があります。:
TradeState.SetTradeState(D'18:45', D'18:59', ALL_DAYS_OF_WEEK, TRADE_WAIT);
開始と終了の時間だけでなく、このモードが動作する曜日を設定することができます。もし設定するモードが全ての曜日の指定要求する場合、修飾子ALL_DAYS_OF_WEEKを使用する必要があります。もしあなたが特定の曜日だけに取引モードを設定したい場合、変数day_of_weekで、システムリストENUM_DAY_OF_WEEKの値から1つを指定してください。
現在の取引モードを取得するためには、メソッドGetTradeStateを使用してください。
モスクワ証券取引所のデリバティブ市場での取引にとって有益となるかもしれないモードのコンビネーションの例として:
時間 | モード | 記述 |
---|---|---|
10:00 - 10:01 | TRADE_WAIT | 市場開始時間。開始時間は、高いボリタリティと価格の急激な上昇によって特徴づけられます。これらの瞬間の取引活動は、高いリスクを伴うため、取引の最初の数分では取引を避けるために、エキスパートアドバイザをこの時間はスタンバイモードにします。 |
14:00 - 14:03 | TRADE_WAIT | 中間清算実行時間。この時間の間、市場は動いてないため、エキスパートアドバイザは同様にTRADE_WAITモードに設定する必要があります。 |
18:45 - 18:49 | TRADE_WAIT | 主要清算実行時間。この瞬間も市場は閉じていて、取引は行えません。TRADE_WAITモードが作動します。 |
23:50 - 9:59 | TRADE_WAIT | 市場は閉まっていて、取引は行えません。エキスパートアドバイザのモードはTRADE_WAITです。 |
金曜日、15:00から | TRADE_NO_NEW_ENTRY | 金曜日は、週の最後の取引日です。オープンになっているポジションを休日に残さないために、これらを取引最終日に閉じる必要があります。その為、数時間後に閉じる為に、取引最終日に新しいポジションを開くことは意味がありません。まさにこれらの目的の為にNO_NEW_ENTRYモードを使用します。毎週金曜日の15:00以降、エントリーへの新しいシグナルは無視されます。既存のポジションは閉じることのみ可能です。 |
金曜日、23:40-23:50 | TRADE_STOP | 市場終了の先行時間です。この時点で、全てのポジションが閉じている必要があります。エキスパートアドバイザは、23:40にTRADE_STOPモードに移り、開いているポジションを閉じ、スタンバイモードに移行します。 |
土曜日、日曜日 | TRADE_WAIT | 週末は取引は行われません。祝日の振替えの為、場合によっては土曜日は労働日になることがあります。こういった場合に、証券取引所は営業しています。これはとても稀なことであり、こういった″営業日″は、低いボリタリティ性と統計的不確実性により避ける必要があります。これらの日の取引は、営業日であるか否かに関わらず、禁止する必要があります。 |
使用例。このモードのコンビネーションは、次のSetTradeStateの連続呼び出し(スクリプトの例)によって指示されます。
//+------------------------------------------------------------------+ //| TestTradeState.mq5 | //| Copyright 2015, Vasiliy Sokolov. | //| http://www.mql5.com | //+------------------------------------------------------------------+ #property copyright "Copyright 2015, Vasiliy Sokolov." #property link "http://www.mql5.com" #property version "1.00" #include <Strategy\TradeState.mqh> CTradeState TradeState(TRADE_BUY_AND_SELL); // Buy And Sellの初期設定でモードを設定する //+------------------------------------------------------------------+ //| Script program start function | //+------------------------------------------------------------------+ void OnStart() { TradeState.SetTradeState(D'15:00', D'23:39', FRIDAY, TRADE_NO_NEW_ENTRY); TradeState.SetTradeState(D'10:00', D'10:01', ALL_DAYS_OF_WEEK, TRADE_WAIT); TradeState.SetTradeState(D'14:00', D'14:03', ALL_DAYS_OF_WEEK, TRADE_WAIT); TradeState.SetTradeState(D'18:45', D'18:59', ALL_DAYS_OF_WEEK, TRADE_WAIT); TradeState.SetTradeState(D'23:50', D'23:59', ALL_DAYS_OF_WEEK, TRADE_STOP); TradeState.SetTradeState(D'0:00', D'9:59', ALL_DAYS_OF_WEEK, TRADE_WAIT); TradeState.SetTradeState(D'23:40', D'23:49', FRIDAY, TRADE_STOP); TradeState.SetTradeState(D'00:00', D'23:59', SATURDAY, TRADE_WAIT); TradeState.SetTradeState(D'00:00', D'23:59', SUNDAY, TRADE_WAIT); printf("10:00 - " + EnumToString(TradeState.GetTradeState(D'10:00'))); printf("14:01 - " + EnumToString(TradeState.GetTradeState(D'14:01'))); printf("18:50 - " + EnumToString(TradeState.GetTradeState(D'18:50'))); printf("23:50 - " + EnumToString(TradeState.GetTradeState(D'23:51'))); printf("Friday, > 15:00 - " + EnumToString(TradeState.GetTradeState(D'2015.11.27 15:00'))); printf("Saturday - " + EnumToString(TradeState.GetTradeState(D'2015.11.28'))); printf("Sunday - " + EnumToString(TradeState.GetTradeState(D'2015.11.29'))); printf("Default State - " + EnumToString(TradeState.GetTradeState(D'11:40'))); } //+------------------------------------------------------------------+
検査として、このスクリプトで特定の取引モードの印刷時間に対応したモードのプリントアウトが行われます。
提案されているモジュールは、補助ツールでしかないということを理解することが大切です。取引の停止(そして、全てのポジションを閉じること)を判断するのは、エキスパートアドバイザ自身が行う必要があるということです。しかしながら、このモジュールを使用し、様々なタイムゾーンや取引モードを特定のエキスパートアドバイザの為に作成することは十分に簡単です。
MetaQuotes Ltdによってロシア語から翻訳されました。
元のコード: https://www.mql5.com/ru/code/14335
市場の関心で取引を行うエキスパートアドバイザです。
CIsSessionは、時間のインターバル(セッション)を設定するためのクラスです。この簡単なクラスは、取引範囲や時間ごと、または曜日ごとの特定の動作の許可/禁止の設定などに使用することができます。
インディケータ PA_Oscillatorは、入力パラメータのインディケータの時間軸を変更することができます。
LinearMomentum_HTFインディケータ LinearMomentumは、入力パラメータのインディケータの時間軸を変更することができます。