Caratteristiche del linguaggio mql5, sottigliezze e tecniche - pagina 79

 
Alain Verleyen:

Vorrei ottenere l'ora del server secondo il GMT.

Questo è ciò che si ottiene quando si esegue lo script. C'è un output speciale di due valori: TimeGMT e TimeServerGMT, così puoi controllare se coincidono.

Se sono uguali, non avete nessun errore.

 
fxsaber:

Si ottiene questo quando si esegue lo script. Due valori vengono emessi appositamente: TimeGMT e TimeServerGMT, in modo da poter controllare che corrispondano.

Se coincidono, non c'è errore, altrimenti c'è un errore.

Capito.
 

Forum sul trading, sistemi di trading automatico e test di strategia

Biblioteche: 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 ha un limite di lunghezza. Ne avete tenuto conto?

 
Andrey Barinov:

Sparam ha un limite di lunghezza.

Sì, 128 byte.

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;      
  }
}

Ne avete tenuto conto?

No, questo è quello che si può vedere da esso. L'esempio di sparam è dato come una delle varianti di memorizzazione delle stringhe.

Potete rendere il codice più complicato (inviarlo in pezzi), ma perderete allora la chiarezza visiva.

 
fxsaber:

Temo che senza un esempio concreto non ci sia una via d'uscita costruttiva.

Dà un'immagine come questa:


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

Ed ecco l'installatore di mt4 con un turno di lavoroGMT+2.

Si aspettava di vedereTimeServer=2018.04.01 05:54:26

File:
tw4setup.zip  522 kb
 
Vitaly Muzichenko:

Dà un'immagine come questa:

Persicurezza, dammi il nome del server TradersWay-Demo.

SZZ TradersWay-Demo.

Funziona correttamente.

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

Potresti non averla.

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

Per sicurezza, dammi il nome del Trading Server.

ZS TradersWay-Demo.

Funziona correttamente.

Potresti non averla.

Probabilmente no. Probabilmente non ce l'ho in nessun terminale, non cambio mai timeframe sotto M15

Ok, indagherò ancora un po'.
 
Vitaly Muzichenko:

Probabilmente no. Probabilmente non ce l'ho in nessun terminale, non cambio mai timeframes sotto M15

Fallo in questo modo

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

Fate così.

Fatto, non ha mostrato nessuna stronzata. Quello che confonde è che lo spostamento dovrebbe essere probabilmente -720



P.S. Di nuovo, so che il turno +2 ore è scritto sul sito, ma il robot non lo sa.

Se si esegue l'Expert Advisor su un grafico come questo, è improbabile ottenere il risultato di output richiesto: "Learn the current time server TimeServer()" Non ho capito bene, forse sto facendo qualcosa di sbagliato.

Forse gli sviluppatori dovrebbero implementare la funzione nel terminale.