マーケットクローズ

 

あなたたちは開発者だ!

端末の時刻とExchangeの時刻を同期させるのはいつですか?

2017.01.13 10:00:03.969 Trades  'xxxxx': buy limit 2.00 ED-6.17 at 1.0642
2017.01.13 10:00:03.969 Trades  'xxxxx': sell limit 1.00 ED-6.17 at 1.0813
2017.01.13 10:00:03.975 Trades  'xxxxx': accepted buy limit 2.00 ED-6.17 at 1.0642
2017.01.13 10:00:03.975 Trades  'xxxxx': accepted sell limit 1.00 ED-6.17 at 1.0813
2017.01.13 10:00:03.978 Trades  'xxxxx': failed buy limit 2.00 ED-6.17 at 1.0642 [Market closed]
2017.01.13 10:00:03.979 Trades  'xxxxx': failed sell limit 1.00 ED-6.17 at 1.0813 [Market closed]
 
2017.01.13 10:00:03.210 Trades  'xxxxx': buy limit 1.00 MXI-6.17 at 2230.15
2017.01.13 10:00:03.210 Trades  'xxxxx': sell limit 1.00 MXI-6.17 at 2300.75
2017.01.13 10:00:03.216 Trades  'xxxxx': accepted buy limit 1.00 MXI-6.17 at 2230.15
2017.01.13 10:00:03.218 Trades  'xxxxx': accepted sell limit 1.00 MXI-6.17 at 2300.75
2017.01.13 10:00:03.219 Trades  'xxxxx': failed buy limit 1.00 MXI-6.17 at 2230.15 [Market closed]
2017.01.13 10:00:03.220 Trades  'xxxxx': failed sell limit 1.00 MXI-6.17 at 2300.75 [Market closed]

添加物

注文を 出す前に取引時間を確認します

//+------------------------------------------------------------------+
//| Expert Check traiding time function                              |
//+------------------------------------------------------------------+
bool CheckTradingTime(MqlDateTime &tick_time)
{
  datetime lk_time = TimeCurrent(tick_time);
  if ( ( tick_time.day_of_week == int(FirstDay)) ||
       ( tick_time.day_of_week == int(SecondDay)))//выходные
  {
    return(false);
  }
#ifdef DEBUG
  if ((tick_time.hour >= 0) && (tick_time.hour < 6))   // DEBUG 6-00
  {
    return(false);
  }
#else
  
if ((tick_time.hour >= 0) && (tick_time.hour < 10))
  {
    return(false);
  }
#endif
// 13 * 3600 + 59 * 60 + 30 = 50370 - 13:59:30
// 14 * 3600                = 50400 - 14:00:00
// 14 * 3600 + 30           = 50430 - 14:00:30
// 14 * 3600 + 60           = 50460 - 14:01:00

// 18 * 3600 + 44 * 60 + 30 = 67470 - 18:44:30
// 18 * 3600 + 45 * 60      = 67500 - 18:45:00
// 18 * 3600 + 45 * 60 + 30 = 67530 - 18:45:30
// 18 * 3600 + 46 * 60      = 67560 - 18:46:00

// 19 * 3600                = 68400 - 19:00:00
// 19 * 3600 + 60           = 68460 - 19:01:00  

// 23 * 3600 + 49 * 60 + 30 = 85770 - 23:49:30
// 23 * 3600 + 50 * 60      = 85800 - 23:50:00
// 23 * 3600 + 50 * 60 + 30 = 85830 - 23:50:30
// 23 * 3600 + 51 * 60      = 85860 - 23:51:00
//---
  ulong trade_time = tick_time.hour * 3600 + tick_time.min * 60 + tick_time.sec;  
//---                    //10:00:02                      
  if(((trade_time >= time_st_mon) && (trade_time < 50370)) ||
      ((trade_time >= time_st_day) && (trade_time < 67470)) ||
      ((trade_time >= time_st_evn) && (trade_time < 85770)))
  {
    return(true);
  }

return(false); 


}
input string          TimeStMon    = "10:00:02";         //Время начала утренней сессии

ulong time_st_mon = GetStringTime(TimeStMon);
ulong GetStringTime(const string a_string)
{
  int k = 0;
  string s_sec, s_min, s_hour;
  int str_size = StringLen(a_string);
//---
  if(str_size != 8) return(0);  
//---  
  for(int i = str_size - 1; i >= 0; i--)
  {
    ushort let_symbol = StringGetCharacter(a_string, i);
    
    if(let_symbol == ':')
    {
      k++;
      switch(k)
      {
        case 1:
          s_sec = StringSubstr(a_string, i + 1, str_size - i - 1);
        break;
        case 2:
          s_min = StringSubstr(a_string, i + 1, str_size - i - 4);
          s_hour = StringSubstr(a_string, 0, i);
        break;
      }
//---
    }
  }
  if(k != 2) return(0);
  ulong t_sec = ulong(StringToInteger(s_sec));
  ulong t_min = ulong(StringToInteger(s_min)) * 60;
  ulong t_hour = ulong(StringToInteger(s_hour)) * 3600;
//---    
  return(t_hour + t_min + t_sec);
}
 
prostotrader:

あなたたちは開発者だ!

端末の時刻とExchangeの時刻を同期させるのはいつですか?

2017.01.13 10:00:03.969 Trades  'xxxxx': buy limit 2.00 ED-6.17 at 1.0642
2017.01.13 10:00:03.969 Trades  'xxxxx': sell limit 1.00 ED-6.17 at 1.0813
2017.01.13 10:00:03.975 Trades  'xxxxx': accepted buy limit 2.00 ED-6.17 at 1.0642
2017.01.13 10:00:03.975 Trades  'xxxxx': accepted sell limit 1.00 ED-6.17 at 1.0813
2017.01.13 10:00:03.978 Trades  'xxxxx': failed buy limit 2.00 ED-6.17 at 1.0642 [Market closed]
2017.01.13 10:00:03.979 Trades  'xxxxx': failed sell limit 1.00 ED-6.17 at 1.0813 [Market closed]

取引所とブローカー、どちらが世界の時間に唾を吐きかけ、自分たちの時間を設定するのかを理解する必要があるのです。既得権益のためか、ただのバカか。

ワールドタイムと同じ時間を持つ人は?

 
Sergey Chalyshev:

世の中の時間に唾をつけて、自分たちの時間を決めているのは、証券取引所かブローカーか、それを見極めなければなりません。私利私欲のためか、それとも単なるバカからか。

ワールドタイムと同じ時間を持つ人は?

そう、世界時間のことは忘れて、同じ時間にモスクワ証券取引所で取引するのです。

というのも、取引所から来る見積もりは、ブローカーのせいではなく、開発者のせいだからです。

は時間を持つので、最後の既知の見積もりの時刻を使うべきです。

取引所(サーバーではない)の既知の時刻と、ターミナル

タイムカレント

Возвращает последнее известное время сервера, время прихода последней котировки по одному из выбранных в "Обзоре рынка" символов.


TimeCurrentは、TERMINALではなく、SERVERの時刻を 返します。

ここから「足が伸びる」のでしょう。

 
prostotrader:

そうです、世界よ、私たちはモスクワ取引所で取引しているのです、取引所の時間にしたがって。

というのも、取引所から来る見積もりは、ブローカーのせいではなく、開発者のせいだからです。

は時間があるため、最終的に判明した見積もり時刻を

取引所(サーバーではない)の既知の時刻と、ターミナル

タイムカレント

Возвращает последнее известное время сервера, время прихода последней котировки по одному из выбранных в "Обзоре рынка" символов.


TimeCurrentは、取引所ではなく、サーバーの時刻を返します!

それゆえ、おそらく「足が伸びる」のでしょう。

また、サーバーがモスクワで、取引所がブラジルにある場合、それはあり得るのでしょうか?

 
Sergey Chalyshev:

また、サーバーがモスクワで、取引所がブラジルにある場合、これはあり得ることなのでしょうか?

サーバーがどこだろうと関係ない!

引用(というか引用TIME)は、現在のTIMEです。

追加

今、何が起こっているのか?

MT5サーバーは、気配値の時間とは無関係に、端末に気配値を送信するだけです。

プレマーケットがあるため、サーバーの時刻と気配値の時刻が同期していない。

EAが注文を出し、端末がそれを確認し、サーバーが時刻を照合することで

サーバーは、私が知っている限り、時間をチェックし、注文は約3秒(私の時間)のエラーでリダイレクトされます!!!!。

 
prostotrader:

サーバーがどこだろうと関係ない!

気配値(というか気配値のTIME)は、現在のTRADE時間です。

によって追加されました。

今、何が起こっているかというと

MT5サーバーは、気配値の時刻に関係なく、単に端末に気配値を送信します。

プレマーケットがあるため、サーバーの時刻と気配値の時刻が同期していない。

EAが注文を出し、端末がそれを確認し、サーバーが時刻を照合することで

サーバーはあらゆる場所で時間を確認し、約3秒の誤差で注文を再調整します!!!!

引用(というか引用TIME)は、現在のTIMEです。

これはストックタイムです。

サーバーの時刻は端末に全く転送されない:TimeLocal == TimeTradeServer.

 

私も、この問題にはうんざりしています。それについては、フォーラムで何度も紹介されています。みんな自分なりに解決しているのですが、正解が見えてきません。どのように修正するかを決め、開発者に働きかけることが必要である。

さて、時間を取得するための3つの機能があります(記憶が正しいかどうか)です。

TimeLocal==TimeTradeServer、コンピュータの時間。

TimeTradeServer ==無価値な機能 です。

TimeCurrent==最後の引用の時刻

為替時刻を追加するか、TimeTradeServerを投げ出すか、代わりに現在の為替時刻を渡すか、TimeExchange型を追加 する必要が あります。




 

そして、時間に追われることなく、具体的なデータを端末に取り込むことができればベストです。

- 新しいアプリケーションを載せることができる。

- 注文を削除することができます。

- 取引は可能です。

なぜか今の端末にはそのような機能はありません。

 

Нужно добавить время биржы, выкинуть TimeTradeServer или вместо него передавать текущее время биржи, или добавить типа TimeExchange.

私たちの取引所ではまだ選択肢にない。他の取引所はどうか知らない。

10:00、10:03、10:05など、好きな時間に取引を開始します。

どうやら、起きてコーヒーを飲むとスイッチが入るらしい))。


 

セルゲイ!

TimeCurrentのヘルプを読むと、これはサーバーの時間 であると書かれています。

Возвращает последнее известное время сервера, время прихода последней котировки по одному из выбранных в "Обзоре рынка" символов.
理由: