ライブラリ: TradeStateは、時間に応じたエキスパートアドバイザの取引モードのスイッチャーです。

 

TradeStateは、時間に応じたエキスパートアドバイザの取引モードのスイッチャーです。:

クラスは時間によって、エキスパートアドバイザの取引を制限します。任意の時間帯数を設定すること、また特定の曜日での取引を許可することで、柔軟な設定の可能性を有しています。

//+------------------------------------------------------------------+
//| 取引状態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);

作者: Vasiliy Sokolov

 

盗まれた。これで1週間のスケジュールが立てられる。

こんな状況だ。週間スケジュールを作るのに時間がかかった。すべてがうまくいく。突然、こんにちは、大晦日。祝日だ。休日を考慮したスケジュールが必要だ。週間スケジュールを崩すのは残念だ。解決策:休日の取引を禁止した週間スケジュールのインスタンスを追加作成する。質問:m_stateを100年 分のサイズに拡張する必要がありますか?あるいは、1週間を超えるこの問題をどのように解決しますか?

 
Konstantin Gruzdev:

盗まれた。これで1週間のスケジュールが立てられる。

こんな状況だ。週間スケジュールを作るのに時間がかかった。すべてがうまくいく。突然、こんにちは、大晦日。祝日だ。休日を考慮したスケジュールが必要だ。週間スケジュールを崩すのは残念だ。解決策:休日の取引を禁止した週間スケジュールのインスタンスを追加作成する。質問:m_stateを100年 分のサイズに拡張する必要がありますか?あるいは、1週間を超えてこの問題を解決する方法は?

はい、そのようなタスクがあります。どうすればいいかまだ考えているところです。まだ美しい解決策には至っていません。でも、どうあるべきかは理解している。

  1. SetTradeState(...)インターフェイス自体は、time_beginとtime_endの変数にD'hh:mm'のフォーマットで日付を設定すれば、day_of_weekの条件を満たすすべての日について、このモードが常に有効になることを示唆している。もし日付がD'YYYY.MM.DD hh:mm'のフォーマットで年、月、日を指定して特別に設定されている場合、設定されたモードはこの時間範囲に特別に作用しなければならない。
  2. どうやら、2つ目の時間バリアントは別のデータ型(構造体の配列か何か)に入れなければならないようだ。そして、2つの異なるコレクションで2つの異なる方法でトレードモードを検索し、モードを比較して、どちらのモードが作用すべきかを決定しなければなりません。この場合、GetTradeState インターフェースは変更しない。

さらに、XML からトレード状態をロードすることもできます。XMLにすべての祝日を1年分あらかじめ入力しておけば、すべてのExpert Advisorに自動的にロードされます。MQL5にはXMLを扱うための優れたライブラリがすでにあるため、これを行うのは非常に簡単です。
 

+5

day_of_week - PN...PTまたは "except Friday "または "except Monday and Friday "というように、曜日を表すことが多い。

 
Alexander Puzanov:

+5

day_of_week - PN...PTまたは "except Friday "または "except Monday and Friday"。

例えば、月曜日、火曜日、金曜日に取引をしたいとします。そして水曜日と木曜日の取引を禁止する:

//+------------------------------------------------------------------+
//|TestTradeState.mq5
//|著作権 2015, Vasiliy Sokolov.|
//|http://mql5.commql5.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);  // デフォルト・モードの設定 売買
//+------------------------------------------------------------------+
//| スクリプト番組開始機能|
//+------------------------------------------------------------------+
void OnStart()
{
   TradeState.SetTradeState(D'00:00', D'23:59', WEDNESDAY, TRADE_STOP);
   TradeState.SetTradeState(D'00:00', D'23:59', THURSDAY, TRADE_STOP);
}
つまり、各曜日は 分単位で個別に設定される。
 
了解した。
 
mql5マスターは それを見ていない。
 
典型的なスプレッドの分野を導入すべきだと思います。例えば、ロールオーバー中やロールオーバー後の最初の1時間は、スプレッドが2-3倍になることがあります。夜間スキャルパーはこのようなスプレッドの拡大を処理し、より正確な取引を行うことができます。
クラスにはありませんが、私はこれをエキスパート・アドバイザーに導入しています。
 

how to replaceD'00:00' with normal digits00:00 ??????datetime is annoying(((((

TradeState.SetTradeState(D'00:00:00', D'23:59', WEDNESDAY, TRADE_STOP);

 
ponochka:

D'00:00'00:00に変更するには?

TradeState.SetTradeState(D'00:00:00', D'23:59', WEDNESDAY, TRADE_STOP)

お願いします:

TradeState.SetTradeState(0, 86399, WEDNESDAY, TRADE_STOP);
 
#include <Strategy\TradeState.mqh>
CTradeState TradeState(TRADE_BUY_AND_SELL);

void OnTick()
  {
     ......здесь работаем с закрытием (тралом и прочим)....
 TradeState.SetTradeState(ontime, offtime, ALL_DAYS_OF_WEEK, TRADE_NO_NEW_ENTRY);
     ......остальной код, в частности для открытия....
  }

コードの正しい位置は?

間抜けな質問で先に謝っておきます!!!ただの初心者です)))))。