Errori, bug, domande - pagina 2010

 
Andrey Dik:
nel tester CopyTicks restituisce degli zeri, è normale?
Stai testando, per caso, in modalità OHLC M1 o a prezzi di apertura?
 
Alexey Kozitsyn:
Stai testando, per caso, in modalità OHLC M1 o a prezzi di apertura?
No, ho provato sia "ticks" che "ticks reali", a volte l'array della struttura è pieno di zeri, a volte parzialmente.
 

Per favore, qualcuno provi questo EA nel tester in diverse modalità di test:

//——————————————————————————————————————————————————————————————————————————————
input  int                     AveTicksPeriod_P       = 20;

MqlTick G_Ticks [];

//——————————————————————————————————————————————————————————————————————————————
int OnInit ()
{
  // сделаем начальную синхронизацию
  GetLastRequredTicks (Symbol (), AveTicksPeriod_P, G_Ticks, true, COPY_TICKS_INFO, 0);

  return (INIT_SUCCEEDED);
}
//——————————————————————————————————————————————————————————————————————————————

//——————————————————————————————————————————————————————————————————————————————
void OnTick ()
{
  Print ("---------------------");

  if(!GetLastRequredTicks (Symbol (), AveTicksPeriod_P, G_Ticks, true, COPY_TICKS_INFO, 0))
  {
    Print ("Ошибка получения тиков " + (string)ArraySize (G_Ticks));
    return;
  }

  int errors = 0;

  for(int i = 0; i < AveTicksPeriod_P; i++)
    if(G_Ticks [i].bid <= 0.0)
    {
      Print (G_Ticks [i].bid);
      errors++;
    }
  
  if(errors > 0)
    Print ("errors: " + (string)errors);
}
//——————————————————————————————————————————————————————————————————————————————

//——————————————————————————————————————————————————————————————————————————————
// Получение последних тиков c в указанном количестве,
// попытки в течении указанного времени в мс
bool GetLastRequredTicks (string   symbol,                 //символ
                          int      count,                  //количество
                          MqlTick &ticks [],                //массив для приёма тиков
                          bool     timeseries = true,      //0-й элемент самый свежий или нет
                          uint     flag = COPY_TICKS_INFO, //COPY_TICKS_INFO или COPY_TICKS_TRADE или COPY_TICKS_ALL
                          ulong    waitMs = 0)             //отведённое время на получение в мкс (10(-6)с)
{
  //---
  bool    success = false;   // флаг успешного выполнения копирования тиков
  MqlTick tick_array [];     // массив для приема тиков
  if(timeseries)
    ArraySetAsSeries (ticks, timeseries);
  ZeroMemory (tick_array);
  ulong startTime   = GetMicrosecondCount ();
  ulong timeElapsed = 0; // мкс
  int   received    = 0;

  ResetLastError ();
  bool wait = true;

  while(wait)
  {
    //--- запросим тиковую историю последних тиков в указанном количестве
    received = CopyTicks (symbol, ticks, flag, 0, count);

    timeElapsed = GetMicrosecondCount () - startTime;

    // если указано допустимое время на синхронизацию
    if(waitMs > 0)
    {
      // если время превысило допустимое, то попыток больше не будет
      if(timeElapsed >= waitMs)
        wait = false;
    }

    if(received == count)
    {
      //--- выведем информацию о количестве тиков и затраченном времени времени
      //PrintFormat ("%s: received %d ticks in %d mcs", _Symbol, received, timeElapsed);

      return (true);
    }

    //--- пауза в 0.1 секунду в ожидании завершения синхронизации тиковой базы
    Sleep (100);
  }

  return (false);
}
//——————————————————————————————————————————————————————————————————————————————


L'essenza è quella di ottenere un determinato numero di zecche più fresche su ogni zecca. gli zeri escono, per la miseria.

Тестирование стратегий - Алгоритмический трейдинг, торговые роботы - Справка по MetaTrader 5
Тестирование стратегий - Алгоритмический трейдинг, торговые роботы - Справка по MetaTrader 5
  • www.metatrader5.com
Тестер стратегий позволяет тестировать и оптимизировать торговые стратегии ( советники ) перед началом использования их в реальной торговле. При...
 
Andrey Dik:

Per favore, qualcuno provi questo EA nel tester in diverse modalità di test:


Lo scopo è quello di ottenere un determinato numero di zecche più fresche su ogni zecca. gli zeri escono, per la miseria.


Ticks   EURUSD: ticks synchronization started
OE      0       00:31:42.376    Ticks   EURUSD: load 34 bytes of tick data to synchronize in 0:00:00.000
KP      0       00:31:42.376    Ticks   EURUSD: history ticks synchronized from 2017.07.16 to 2017.09.20
DK      0       00:31:42.442    History EURUSD,M15: history cached from 2016.01.03 23:00
CK      0       00:31:42.442    Tester  EURUSD,M15 (): generating based on real ticks
MS      0       00:31:42.442    Tester  EURUSD,M15: testing of Experts\test_getTicks.ex5 from 2017.09.20 00:00 to 2017.09.21 00:00 started with inputs:
CO      0       00:31:42.442    Tester    AveTicksPeriod_P=20
HH      0       00:31:42.681    Ticks   EURUSD : real ticks begin from 2017.07.16 00:00:00
EL      3       00:31:42.681    Ticks   EURUSD : 2017.09.20 00:00 - 2017.09.21 00:00  last prices translation turned on for 1333 minute bars
PN      0       00:31:42.682    test_getTicks (EURUSD,M15)      2017.09.20 00:00:19   ---------------------
IE      0       00:31:42.763    test_getTicks (EURUSD,M15)      2017.09.20 00:00:23   ---------------------
LE      0       00:31:42.877    test_getTicks (EURUSD,M15)      2017.09.20 00:00:23   0.0
RP      0       00:31:42.877    test_getTicks (EURUSD,M15)      2017.09.20 00:00:23   errors: 1
FG      0       00:31:42.878    test_getTicks (EURUSD,M15)      2017.09.20 00:00:23   ---------------------
HG      0       00:31:42.949    test_getTicks (EURUSD,M15)      2017.09.20 00:00:23   0.0
FR      0       00:31:42.949    test_getTicks (EURUSD,M15)      2017.09.20 00:00:23   errors: 1
RI      0       00:31:42.950    test_getTicks (EURUSD,M15)      2017.09.20 00:00:24   ---------------------
 
Andrey Dik:

Per favore, qualcuno provi questo EA nel tester in diverse modalità di test:


Lo scopo è quello di ottenere un determinato numero di zecche più fresche su ogni zecca. gli zeri escono, per la miseria.

Sono riuscito ad ottenerlo su FORTS, ma solo un TRADE-flow (usando un indicatore). Il tuo Expert Advisor non vuole nemmeno funzionare su tick reali...
 
Alexey Kozitsyn:
Su FORTS sono riuscito a ottenere, ma solo un TRADE - flusso (utilizzando un indicatore). Il tuo esperto non vuole nemmeno correre su zecche vere...

Sì, c'è un problema. Ma dove? Qual è esattamente il problema, questa è la domanda.

Ma una volta ci fu un errore.

 
Andrey Dik:

Per favore, qualcuno provi questo EA nel tester in diverse modalità di test:


L'essenza è quella di ottenere un determinato numero di zecche più fresche su ogni zecca.

Bene, se volete i tick più freschi, non dovete prenderli da zero, ma dal tempo corrente in millisecondi.

    received = CopyTicks (symbol, ticks, flag, TimeCurrent()*1000, count);
 
Alexey Viktorov:

Bene, se volete dei tick freschi, non dovete prenderli da zero, ma dal tempo corrente in millisecondi.

L'aiuto dice:

da

[in] Data a partire dalla quale sono richieste le zecche. Specificato in millisecondi dal 01.01.1970. Se from=0, viene dato l'ultimo conteggio di tick.

 

Salvo il file mq5 in Metaeditor, ma la sua vecchia versione viene salvata (il tempo varia). In questo caso ex5 alla compilazione corrisponde a quello che vedo in ME. Ma quando chiudo ME, tutti i dati nel file saranno persi.

Provando a salvarlo con un nome diverso - il file viene creato, ma c'è una vecchia fonte - non quella che vedo in ME. C'è sicuramente spazio sul disco.

 
I commenti non pertinenti a questo argomento sono stati spostati in "Perché l'EA non funziona".