Eineinhalb Minuten Unterschied zwischen der Ortszeit und der neuen Tickerzeit. Was ist zu tun? - Seite 6

 
prostotrader:

Schauen Sie sich den Code genau an!

TimeTradeServer() wird nur verwendet, um den Tag zu bestimmen und das war's (diese Prüfung wird "nur für den Fall" durchgeführt)!

TimeTradeServer() kann gänzlich weggelassen werden!

Ich habe es mir angesehen. Ich stimme zu, ich habe es falsch geschrieben, aber die Funktion löst das Problem meiner Meinung nach trotzdem nicht. Um ehrlich zu sein, bin ich mir nicht ganz sicher, warum das nötig ist. Es scheint, dass Sie:

1. Ermittelt die Anzahl der Millisekunden ab einem Tick;

2. Sie zerlegen die Zecke in ihre Bestandteile;

3. Dann setzen Sie die Zecke wieder zusammen!? Hier ist mir nicht klar, wozu das gut sein soll. Sie erhalten immer denselben Wert, der ursprünglich an die Funktion übergeben wurde. Oder übersehe ich vielleicht etwas?

Und dann vergleicht man den Zeitpunkt des Tickens mit dem vorherigen;


Wir müssen doch die Uhrzeit des Servers kennen, oder nicht? Ohne Serverzeit können wir nicht feststellen, ob der Thread eines Charakters hinter den Threads der anderen Charaktere zurückbleibt.

Das heißt, Ihr Code ist nicht an die Serverzeit gebunden und vergleicht die Serverzeit nicht mit der Threadzeit, was wir tun müssen. Nicht die Verzögerung des Stacks durch die Ticks eines einzelnen Symbols (wie ich ursprünglich dachte, als ich in diese Diskussion einstieg), sondern die Verzögerung der Datenübertragung über eine Reihe von Symbolen vom Server zum Terminal zu verstehen.

 
Alexey Kozitsyn:

Die Prüfung scheint über TimeGMTOffset erfolgen zu müssen. Ich werde später ein Beispiel skizzieren.

Komisch nur, dass Sie ein erfahrener Mensch sind (kein Anfänger).

Sie brauchen überhaupt keine Zeit, außer der Zeit der ankommenden Zecken!

Merken Sie sich die Zeit (bei der Initialisierung) des letzten Ticks, und dann gehen alle Vergleiche mit dieser Zeit!

 
Alexey Kozitsyn:

Ich habe es mir angesehen. Ich stimme zu, ich habe es etwas falsch geschrieben, aber die Funktion löst meiner Meinung nach immer noch nicht die gestellte Aufgabe. Um ehrlich zu sein, bin ich mir nicht ganz sicher, warum das nötig ist. Es sieht so aus, als ob Sie das tun:

3. Dann setzen Sie die Zecke wieder zusammen!? Hier ist mir nicht klar, wozu das gut sein soll? Sie erhalten immer denselben Wert, der ursprünglich an die Funktion übergeben wurde. Oder übersehe ich etwas?


Dieser Code wird von meinem Expert Advisor "gezogen", wo ich prüfe, ob der Tick aktuell ist und ob die Zeit innerhalb

Börsensitzungen

Hinzugefügt von

"Breakdown" des Ticks wird benötigt, um die genaue (Millisekunden) Zeit (kein Datum) zu bestimmen, da in den Sitzungseinstellungen meines EA

Ich stelle nur die Zeit ein

input string          TimeStMon    = "10:00:00";               //Время начала утренней сессии
input string          TimeStDay    = "14:05:00";               //Время начала дневной сессии
input string          TimeStEvn    = "19:05:00";               //Время начала вечерней сессии
 
prostotrader:

Das ist einfach lächerlich, Sie sind ein erfahrener Mensch (kein Anfänger).

Sie brauchen überhaupt keine Zeit, außer der Zeit der ankommenden Zecken!

Merken Sie sich die Zeit (bei der Initialisierung) des letzten Ticks, und alle Vergleiche gehen dann mit dieser Zeit!

Ich schreibe mein Beispiel später, dann gehe ich genauer auf die Frage ein. Ich schließe nicht aus, dass ich vielleicht falsch liege (ebenso wie pivomoe) und Sie Recht haben.

 
prostotrader:

Dieser Code wird von meinem EA "gezogen", wo ich die Relevanz des Ticks und die Zeit, die der Tick innerhalb ist überprüfen

Börsensitzungen

Hinzugefügt von

"Breakdown" des Ticks wird benötigt, um die genaue Zeit (ohne Datum) zu bestimmen, da in den Session-Einstellungen meines EA

Ich stelle nur die Zeit ein

Genau, mein Fehler, ich habe es übersehen.

 
Alexey Kozitsyn:

Genau, mein Fehler, ich habe das nicht so gesehen.

Es ist nur so, dass TC anfangs nicht klar war, was er bekommen wollte (oder vielleicht wurde es missverstanden).

Hier, führen Sie es aus und überprüfen Sie es:

//+------------------------------------------------------------------+
//|                                                         Time.mq5 |
//|                                                   Copyright 2019 |
//|                                                                  |
//+------------------------------------------------------------------+
enum FRESH_TICK
{
  UNKNOWN_TICK,
  NEW_TICK,
  CUR_TICK,
  OLD_TICK
};
//
MqlTick stored_ticks[];
bool is_book;
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
{
  int result = CopyTicks(Symbol(), stored_ticks, COPY_TICKS_ALL, 0, 1);
  if(result > 0)
  {
    is_book = MarketBookAdd(Symbol());
    if(is_book == false) return(INIT_FAILED);
  } else return(INIT_FAILED);
  return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
  if(is_book == true) MarketBookRelease(Symbol()); 
}
//+------------------------------------------------------------------+
// Expert Book event function                                        |
//+------------------------------------------------------------------+  
void OnBookEvent(const string &symbol)
{
  if(symbol == Symbol())
  {
    MqlTick a_ticks[];
    int result = CopyTicks(symbol, a_ticks, COPY_TICKS_ALL, 0, 1);
    if(result > 0)
    {
      FRESH_TICK tick_state = CheckTickTime(a_ticks[0]);
      switch(tick_state)
      {
       case UNKNOWN_TICK: Print(EnumToString(UNKNOWN_TICK), " - Тик не определен."); //Тик не определен
       break;
       case NEW_TICK: Print(EnumToString(NEW_TICK), " - Новый тик");     //Торговое время, можно отсылать ордера;
       break;
       case CUR_TICK: Print(EnumToString(CUR_TICK), " - Текущий тик");    //По усмотрению разработчика;
       break;
       case OLD_TICK: Print(EnumToString(OLD_TICK), " - Старый тик");     //По усмотрению разработчика;
       break;
      }
    }  
  }
}
//+------------------------------------------------------------------+
//| Expert Check Market Time function                                |
//+------------------------------------------------------------------+
FRESH_TICK CheckTickTime(MqlTick &a_tick)
{
  if(a_tick.time_msc > stored_ticks[0].time_msc)
  {
    stored_ticks[0] = a_tick;
    return(NEW_TICK);
  }
  else
  {
    if(stored_ticks[0].time_msc == a_tick.time_msc)
    {
      if((stored_ticks[0].ask == a_tick.ask) && (stored_ticks[0].bid == a_tick.bid) &&
         (stored_ticks[0].flags == a_tick.flags) && (stored_ticks[0].last == a_tick.last) &&
         (stored_ticks[0].time == a_tick.time) && (stored_ticks[0].volume == a_tick.volume) &&
         (stored_ticks[0].volume_real == a_tick.volume_real))
        {
          return(CUR_TICK);
        }
        else return(OLD_TICK);
        
    }
    else return(OLD_TICK);
  }
  return(UNKNOWN_TICK);
} 
      
 
prostotrader:

Es ist nur so, dass der TC nicht sicher war, was er überhaupt bekommen wollte.

Hier, führen Sie es aus und überprüfen Sie es:

Michael, es gibt keine Fragen zur Ankunft der neuen Zecke/Kontrolle der alten Zecke. Es werden auch keine Fragen zu Ihrem Code gestellt. Die Frage ist eine andere. Sie müssen diese Situation überprüfen:

14:53:10.277    ProverkaAktyalnostiTikov (RTS-3.19,H1)   Получен НОВЫЙ тик по символу                     GAZR-3.19 time_msc= 2019.03.20 14:53:11.638
14:53:10.277    ProverkaAktyalnostiTikov (RTS-3.19,H1)   ХОТЯ до этого был получeн тик                     RTS-3.19 time_msc  2019.03.20 14:53:13.695
 
Alexey Kozitsyn:

Michael, es gibt keine Fragen zur Ankunft der neuen Zecke/Kontrolle der alten Zecke. Es gibt auch keine Fragen zu Ihrem Code. Die Frage ist eine andere. Ich muss die folgende Situation überprüfen:

Ich habe den Code geändert (siehe oben) und der (OLD_TICK) erschien.

Und da der Entwickler weiß, dass das neue Paket einen "alten" Tick enthalten kann, muss er ihn nach eigenem Ermessen verwenden.

 
prostotrader:

Ich änderte den Code (siehe oben) und (OLD_TICK) erschien.

Das spielt keine Rolle... Ströme von UNTERSCHIEDLICHEN Zeichen.

 
Alexey Kozitsyn:

Das spielt keine Rolle... Ströme von UNTERSCHIEDLICHEN Zeichen.

Dann verstehe ich nicht, WAS ich überhaupt BRAUCHE????

Wenn die aktuelle Zeit die SERVER-Zeit ist, müssen Sie sie vergessen, bis sie gesendet wird!
oder verwenden Sie die Funktion TimeTradeServer()