Merkmale der Sprache mql5, Feinheiten und Techniken - Seite 79

 
Alain Verleyen:

Ich möchte die Serverzeit nach GMT erhalten.

Dies ist das Ergebnis, wenn Sie das Skript ausführen. Es gibt eine spezielle Ausgabe von zwei Werten: TimeGMT und TimeServerGMT, so dass Sie überprüfen können, ob sie übereinstimmen.

Wenn sie übereinstimmen, liegt kein Fehler vor.

 
fxsaber:

Sie erhalten dies, wenn Sie das Skript ausführen. Dort werden speziell zwei Werte ausgegeben: TimeGMT und TimeServerGMT, so dass Sie überprüfen können, ob sie übereinstimmen.

Wenn sie übereinstimmen, liegt kein Fehler vor, andernfalls liegt ein Fehler vor.

Ich hab's.
 

Forum zum Thema Handel, automatisierte Handelssysteme und Strategietests

Bibliotheken: TypeToBytes

fxsaber, 2018.03.31 09:24

// Кроссплатформенный пример передачи произвольных данных через пользовательское событие

#include <fxsaber\HistoryTicks\Data_String.mqh> // https://www.mql5.com/ru/code/20298

// Печать произвольных данных
template <typename T>
bool MyPrint( const T &Value )
{
  T Array[1];
  
  Array[0] = Value;
  
  ArrayPrint(Array, _Digits, NULL, 0, WHOLE_ARRAY, ARRAYPRINT_HEADER | ARRAYPRINT_ALIGN);
  
  return(true);
}

void OnChartEvent( const int id, const long &lparam, const double&, const string &sparam )
{
  // Распечатали полученные данные
  if ((id == CHARTEVENT_CUSTOM) &&
      (lparam ?  MyPrint(DATA_STRING::FromString<MqlDateTime>(sparam)) // Получили MqlDateTime
              : !MyPrint(DATA_STRING::FromString<MqlTick>(sparam))))   // Получили MqlTick
    ExpertRemove(); // Вышли из примера
}

void OnInit()
{
  MqlTick Tick;  
  MqlDateTime DateTime;
  
  // Заполнили значения
  SymbolInfoTick(_Symbol, Tick);  
  TimeCurrent(DateTime);

  // Передали
  EventChartCustom(0, 0, 0, 0, DATA_STRING::ToString(Tick));     // Передали MqlTick
  EventChartCustom(0, 0, 1, 0, DATA_STRING::ToString(DateTime)); // Передали MqlDateTime
}
 
fxsaber:

Sparam hat eine Längenbegrenzung. Haben Sie das berücksichtigt?

 
Andrej Barinow:

Sparam hat eine Längenbegrenzung.

Ja, 128 Bytes.

const bool Init = EventChartCustom(0, 0, 0, 0, NULL);

void OnChartEvent( const int id, const long&, const double&, const string &sparam )
{
  static int PrevLength = -1;
  
  if (id == CHARTEVENT_CUSTOM)
  {
    const int Length = StringLen(sparam);

    bool Res = (Length != PrevLength);
    
    if (Res)
    {
      string Str;
            
      StringInit(Str, Length + 1, 1);
      
      Res = EventChartCustom(0, 0, 0, 0, Str);
    }
    
    if (!Res)
    {
      Print(PrevLength);
      
      ExpertRemove();
    }
      
    PrevLength = Length;      
  }
}

Haben Sie das berücksichtigt?

Nein, das ist es, was man daran erkennen kann. Das sparam-Beispiel wird als eine der Varianten zum Speichern von Zeichenketten angegeben.

Sie können den Code komplizierter machen (in Stücken senden), aber dann verlieren Sie an visueller Klarheit.

 
fxsaber:

Ich fürchte, dass es ohne ein konkretes Beispiel keinen konstruktiven Ausweg gibt.

Es gibt ein Bild wie dieses aus:


  Print( "TimeServer: ",TimeGMT()-TimeServerGMTOffset() );
  Print( "TimeServerGMT: ",TimeServerGMT() );
  Print( "TimeCurrent: ",TimeCurrent() );
  Print( "TimeLocal: ",TimeLocal() );
  Print( "TimeGMT: ",TimeGMT() );
  Print( "TimeGMTOffset: ",TimeServerGMTOffset() );
  Print( "" );

Und hier ist der mt4-Installer mit einerGMT+2-Arbeitsschicht.

Hatte erwartet,TimeServer=2018.04.01 05:54:26 zu sehen

Dateien:
tw4setup.zip  522 kb
 
Vitaly Muzichenko:

Es gibt ein Bild wie dieses aus:

Geben Sie mir bittevorsichtshalber den Namen des TradersWay-Demo-Servers.

SZZ TradersWay-Demo.

Sie funktioniert korrekt.

2018.04.01 08:36:08.858 TimeServerGMT EURUSDi,M1: TimeServerGMT() = 2018.03.30 19:59:59

Sie haben es vielleicht nicht.

// Работает для FOREX-символов, когда M1-история доступна за ближайшую неделю
 
fxsaber:

Nennen Sie mir bittevorsichtshalber den Namen des Handelsservers.

ZS TradersWay-Demo.

Sie funktioniert korrekt.

Sie haben es vielleicht nicht.

Wahrscheinlich nicht. Ich habe es wahrscheinlich nicht in jedem Terminal, ich nie wechseln Zeitrahmen unter M15

OK, ich werde mir das genauer ansehen.
 
Vitaly Muzichenko:

Wahrscheinlich nicht. Ich habe es wahrscheinlich in keinem Terminal, ich wechsle nie Zeitrahmen unter M15

So geht's

datetime GetBarTime( const datetime time, const bool NextBar = false, string Symb = NULL, const ENUM_TIMEFRAMES TimeFrame = PERIOD_M15 )
 
fxsaber:

Tun Sie dies.

Ich habe es gemacht, es hat keinen Schwachsinn ergeben. Was verwirrend ist, ist, dass die Verschiebung wahrscheinlich -720 sein sollte.



P.S. Nochmals: Ich weiß, dass die Schicht +2 Stunden auf der Website angegeben ist, aber der Roboter weiß das nicht.

Wenn Sie den Expert Advisor auf einem Chart wie diesem ausführen, ist es unwahrscheinlich, dass er das gewünschte Ausgabeergebnis erhält: "Learn the current time server TimeServer()" Ich habe es nicht richtig verstanden, vielleicht mache ich etwas falsch.

Vielleicht sollten die Entwickler die Funktion in das Terminal implementieren.