市場が閉まっているかどうかを調べるには?(mql4) - ページ 3

 

これらのチェックの実際的な必要性は何でしょうか?

例えば、エキスパートが取引を許可されているかどうかを確認するのはなぜですか?ターゲットは誰ですか?ダウンユーザー?取引許可のフラグを一度端末に設定する、ただそれだけです。なぜ、ティックごとに確認する必要があるのでしょうか?それともn秒ごとにチェックするのか?Expert Advisorは他にやることがないのでしょうか?

なぜ市場が開いているかどうかを確認するのか?市場は開きたいときに開くのか?あるいは、今日は16時、明日は14時に取引される商品もあり、このような混乱は常に起こるのでしょうか?取引スケジュールが既知で変更されない場合、市場が開いていれば、なぜ毎ティックまたはn秒ごとにチェックする必要があるのでしょうか?

そして、マーケットが開いているかどうかを調べるためにトレードのリクエストを 送るという、このおかしな情報?笑いが好きな人向け?それとも、満足したユーザーに対して?

ノーティック、ノートレード。

 
abolk:

これらのチェックの実際的な必要性は何でしょうか?

例えば、エキスパートが取引を許可されているかどうかを確認するのはなぜですか?ターゲットは誰ですか?ダウンユーザー?取引許可のフラグを一度端末に設定する、ただそれだけです。なぜ、ティックのたびにチェックする必要があるのでしょうか?それともn秒ごとにチェックするのか?Expert Advisorは他にやることがないのでしょうか?

なぜ市場が開いているかどうかを確認するのか?市場は開きたいときに開くのか?あるいは、今日は16時、明日は14時に取引される商品もあり、このような混乱は常に起こるのでしょうか?なぜ、取引スケジュールが既知で変更されない場合、市場が開いていれば、毎ティックまたはn秒ごとにチェックする必要があるのでしょうか。

そして、マーケットが開いているかどうかを確認するために、トレードリクエストを 送るというこのトリック?

ノーティック-ノートレード

タスクが違うのです。私は皆のために話すことはできませんが、私の仕事は1つのEAから異なるシンボルのために注文を開くことであり、それらのいくつかは異なる取引セッションを持っていました(私は、アカウントで利用可能なシンボルの任意のセットで動作する可能性を意味します)。

そのため、すべてのチェックはOnTickではなく、OnTimerで行っています。前のページで私のバージョンを説明しました。原則的には、「ノー・ティック-ノー・トレード」チェックのようなものですが。

 
abolk:

...市場は開きたいときに開くものなのでしょうか?それとも、ある楽器は今日の16時から、明日は14時から取引して、ずっと混乱してるんですか?

...

そんなこともあるんだ...。さまざまな休日がある...国が違う。外国為替はうまくいったが、金と銀はうまくいかなかった。

また、FXの上に先物を使う機会があると、セッションの早期終了や、限度額を超えた場合の切り上げなどの仕掛けが起こります。

 
papaklass:

ここで、4人のもうひとつの選択肢を紹介します。

bool flag;
//-----------------------------------------------------------------------------+

bool RealSymbol(string str)
{
   return(MarketInfo(str, MODE_BID) != 0);
}//----------------------------------------------------------------------------+
 
void init()
{
   flag = RealSymbol(Symbol());
         
   return;  
}//----------------------------------------------------------------------------+
 
void deinit()
{
   return;
}//----------------------------------------------------------------------------+
 
void start()
{
   if (!flag)
   {
      return;
   }
   
   //дальше Ваш рабочий код
     
   return;  
}//----------------------------------------------------------------------------+

素晴らしいオプションです。主なものは、市場が開く前にアドバイザーを実行することです。そして、もしあなたがそれをオフにせず、オーバーロードせず、タイムフレームを変更しないなら、フラグは常に「いいえ」の状態なので、アドバイザーは決して動作しません

p.s. 面白アドバイススレッド

p.s.2. 特にクローズドマーケットでそう言われると違和感がある

MarketInfo(Symbol(), MODE_BID)

はZEROを与える。

 

ティック間のラグを確認し、それに基づいてクローズトレードを推論するのは、誤った判断です。

 
avtomat:

ティック間のラグを確認し、それに基づいてクローズトレードを推論するのは、間違った判断です。

しかし
1) 「取引は成立しているか」ではなく、「(現在の条件下で)この価格で取引を開始することは可能か」という回答である場合。
2) もし相場がxx分より古いなら、サーバーは注文を開こうとすると相場から外れたものを返すことが保証されていることを事前に知っておくこと。
であれば、許容範囲でしょう。もちろん、IMHOです。
 

この問題については、MT5でも 議論がなされています。

私にとっては、SymbolInfoSessionTrade() を使用して取引が可能かどうかを判断するのが正しい選択です。


//+------------------------------------------------------------------+
//|Открыта ли торговая сессия                                        |
//|                                                 Copyright,Sergeev|
//|                           https://login.mql5.com/ru/users/sergeev|                 
//+------------------------------------------------------------------+
bool IsTradeSessionOpen()
  {
   MqlDateTime _DateTime;
   datetime _TimeCurrent=TimeTradeServer(_DateTime);

// проверяем время торгов по инструменту
   datetime _TradeEnd=(datetime)SymbolInfoInteger(_Symbol,SYMBOL_EXPIRATION_TIME);
   if(_TimeCurrent>_TradeEnd && _TradeEnd>0) return(false);

   datetime _TradeStart=(datetime)SymbolInfoInteger(_Symbol,SYMBOL_START_TIME);
   if(_TimeCurrent<_TradeStart && _TradeStart>0) return(false);

// проверяем сессии инструмента
   datetime _DayStart=_TimeCurrent/(60*60*24); _DayStart*=(60*60*24); // начало текущего дня
   datetime _sec=_TimeCurrent-_DayStart; // число секунд от начала дня

   for(int i=0; i<10; i++) // подразумеваем, что админ сделал не более 10 сессий в сутки
     {
      datetime _from,_to;
      if(!SymbolInfoSessionTrade(_Symbol,(ENUM_DAY_OF_WEEK)_DateTime.day_of_week,i,_from,_to)) break; // данные сессии
      if(_sec>=_from && _sec<=_to) return(true);
     }
   return(false);
  }
Как узнать, что по выходным нет торговли?
Как узнать, что по выходным нет торговли?
  • www.mql5.com
Пытаюсь дать понять советнику, что по выходным дням торговать не нужно :). - - Категория: общее обсуждение
 
Kino:

Expert Advisor を OnTimer() モードに切り替えたところ、マーケットが閉じているのに理解できずに取引しようとし、一般的にはサーバーに連絡して、もちろんエラーを受け取り、ログを詰まらせることになりました。GetLastError() = 市場が閉鎖されました。市場が休場か週末か、他にどのような条件で確認できるのでしょうか?

継続時間 = (ミリ秒単位で設定。例:6時間 = 1000*60*60*6)

if(GetLastError()==132(市場終了)) Sleep (Duration);

 

一度、SymbolInfoSessionTrade() とQuoteで実験したことがありますが、これらの関数からのデータはおおよそ現実と一致しているだけで、場合によっては一致していないことがわかりました。

おそらく、いくつかのチェックを組み合わせることで、トレードが終わったかどうかという問いに対する明確な答えが得られるのではないでしょうか?

SymbolInfoSessionTrade - Документация на MQL4
  • docs.mql4.com
SymbolInfoSessionTrade - Документация на MQL4
 

うわー、文字数多いなー。

MarketInfo(Symbol(),MODE_TRADEALLOWED)を表示します。

理由: