Errori, bug, domande - pagina 343

 
Kairoser:

Buon pomeriggio!

Dopo l'aggiornamento alla versione 420 ho iniziato a testare il mio EA e ho notato che ha iniziato a "perdere" per qualche motivo. Ho analizzato i miei trade e ho notato che lo stop loss viene attivato a prezzi inesistenti. Per esempio, ho impostato lo stop loss a 1,06520 su EURUSD, ma funziona, anche se il prezzo massimo è 1,05920. Quando guardo oltre, vedo molti di questi affari. Il Take Profit è attivato dallo stesso principio (a prezzi non esistenti) - il delta è lo stesso - 600 punti. Nel tester sul grafico le frecce su e giù "pendono" in aria, lontano dalle barre.

Uno screenshot è allegato.

Esegui dei test su MetaQuotes-Demo, per favore. Alpari ha una storia grafica palesemente errata (negli spread).
 
Renat:
Esegui dei test su MetaQuotes-Demo, per favore. Alpari ha una storia dei grafici palesemente sbagliata (negli spread).
Sì, infatti, tutto funziona bene sul server MetaQuotes-Demo. Grazie per l'aiuto.
 

Un paio di domande sono interessanti.

1. Se gli indicatori sono usati nel tester di strategia, come funziona il sistema? Prima tutti gli indicatori per i quali vengono calcolati gli handle e solo allora viene lanciato OnTick?

2. Se sì, sarebbe bene avviare prima OnTick e poi eseguire un comando per calcolare gli indicatori allegati. Così, per esempio, non ho bisogno di calcolare gli indicatori su ogni tick di cinque cifre, ma solo su quattro cifre. Quando avvio OnTick, controllo il prezzo attuale e precedente e decido se avviare il calcolo degli indicatori o no.

Perché se ce ne sono molti e sono abbastanza "pesanti", consumano risorse in modalità di ottimizzazione...

Anche se si può provare a creare maniglie in ontick e cancellare gli indicatori alla fine e al prossimo inizio di ontick (se necessario) creare nuovamente le maniglie - e non è chiaro se migliorerà le prestazioni...

Документация по MQL5: Основы языка / Функции / Функции обработки событий
Документация по MQL5: Основы языка / Функции / Функции обработки событий
  • www.mql5.com
Основы языка / Функции / Функции обработки событий - Документация по MQL5
 
olyakish:

Un paio di domande sono interessanti.

1. Se gli indicatori sono usati nel tester di strategia, come funziona il sistema? Prima, tutti gli indicatori per i quali vengono calcolati gli handle e solo allora viene eseguito OnTick?

Sì. La risposta più generale - tutti i valori degli indicatori sono calcolati prima di ogni chiamata del gestore di eventi:

  • OnTick
  • OnTimer
  • OnChartEvent e così via
 
olyakish:
2. Se è così, sarebbe molto utile eseguire prima OnTick e poi eseguire il calcolo degli indicatori allegati con questo comando. Per esempio non ho bisogno di calcolare gli indicatori su ogni tick a cinque cifre, ma solo su quelli a quattro cifre. Quando avvio OnTick controllo il prezzo attuale e precedente e decido se avviare il calcolo degli indicatori o meno.

Perché se ce ne sono molti e sono abbastanza "pesanti", mangiano risorse in modalità di ottimizzazione...

Non si può fare. È possibile utilizzare modalità di generazione di tick più veloci per i test:

  1. Prezzi OHLC su barre di minuti
  2. Solo i prezzi aperti del periodo in esame
 
Rosh:

Non si può fare in questo modo. È possibile utilizzare modalità di generazione di tick più veloci per i test:

  1. Prezzi OHLC su barre di minuti
  2. Solo i prezzi di apertura del periodo in esame
Conosco queste modalità e le loro peculiarità. Volevo solo accelerare l'ottimizzazione in un modo ragionevole (probabilmente ottimale).
 

Aiuto, le funzioni di conversione dei dati non vogliono funzionare, ho scritto un semplice script per testarlo. Build 420, 64 bit OS.

void OnStart()
  {
//---
   int i=0;
   bool res=false;
   string stroka1;
   string stroka2;
   string stroka3;
   string stroka4;
   string stroka5;

   datetime buf1;
   double   buf2;
   double   buf3;
   double   buf4;
   double   buf5;
   
   int filehandle=FileOpen("56451.csv",FILE_READ|FILE_CSV|FILE_ANSI,',',CP_UTF8);

   if(filehandle==INVALID_HANDLE)Print("Ошибка № - ",GetLastError());
   else
     {

      while(!res)
        {
         stroka1 = FileReadString(filehandle);
         stroka2 = FileReadString(filehandle);
         stroka3 = FileReadString(filehandle);
         stroka4 = FileReadString(filehandle);
         stroka5 = FileReadString(filehandle);

         buf1 = StringToTime(stroka1);
         buf2 = StringToDouble(stroka2);
         buf3 = StringToDouble(stroka3);
         buf4 = StringToDouble(stroka4);
         buf5 = StringToDouble(stroka5);

         res=FileIsEnding(filehandle);
         i++;
        }
      FileClose(filehandle);
     }
  }
//+------------------------------------------------------------------+
File:
56451.zip  16 kb
 
sergey1294:

Aiuto, le funzioni di conversione dei dati non vogliono funzionare, ho scritto un semplice script per testarlo. Build 420, 64 bit OS.


Sbarazzarsi delle virgolette in qualsiasi fase....
 
AlexSTAL:
Sbarazzarsi delle virgolette in qualsiasi fase....
Come si fa?
 
sergey1294:
Come si fa?

O ci si assicura che non siano inizialmente nel file, o si applica una funzione aggiuntiva durante la lettura, per esempio:

string StringWithoutQuotes(string Value)
{
   StringTrimLeft(Value);
   StringTrimRight(Value);
   return(StringSubstr(Value, 1, StringLen(Value) - 2));
}

..........

         stroka1 = StringWithoutQuotes(FileReadString(filehandle));
         stroka2 = StringWithoutQuotes(FileReadString(filehandle));