Come posso ottenere i parametri Open,Low,High,Close in MQL5? - pagina 8

 
Artyom Trishkin:

Non guarderò esattamente - non ne ho il tempo. Ho pensato che ci fosse qualcosa "fuori dalla scatola" - eseguilo e vedi il risultato. Ma ora... Sì, e lo script non funziona immediatamente, e si blocca finché non si chiude forzatamente PKM sulla sua icona. E solo allora si stampa qualcosa. In generale - con le macro una seccatura per qualche motivo.

E il mio post ha il significato della mossa degli insetti del tema?

 
Artyom Trishkin:

Non guarderò esattamente - non ne ho il tempo. Ho pensato che ci fosse qualcosa "fuori dalla scatola" - eseguilo e vedi il risultato. Ma ora... Sì, e lo script non funziona immediatamente, e si blocca finché non si chiude forzatamente PKM sulla sua icona. E solo allora si stampa qualcosa. Tutto sommato, le macro sono una spina nel fianco.

Ah, ecco il cane!

Hai visto i miei test? C'è anche Roman

ci sono 436 secondi di test = 7 minuti!

;)

ZS: Te l'ho detto che le mani birichine ci sono inciampate sopra!...lo script non funziona "out of the box"... ))))


Romano:

Ha senso mettere il mio post nel thread dei bug?

quali insetti? - scrivere in Wine e Debian che non possono caricare completamente i core della CPU, per quale sistema operativo avete MT?

 
Igor Makanu:

Ahh, ecco il cagnolino!

Hai visto i miei test? C'è anche quello di Roman.

ci sono 436 secondi di test = 7 minuti!

;)

ZS: Ti sto dicendo che mani birichine ci sono inciampate sopra!...lo script non funziona "out of the box"... ))))

Inquietante :)

Dovremmo riposare di più...

 
Igor Makanu:

Ahh, ecco il cagnolino!

Hai visto i miei test? C'è anche quello di Roman.

ci sono 436 secondi di test = 7 minuti!

;)

ZS: Te l'ho detto che mani birichine ci sono incappate!...lo script non funziona "out of the box"... ))))


quali insetti? - Bene, scrivi in Wine e Debian che non possono caricare completamente i core della CPU, hai MT per quale OS?

MT naturalmente sotto Windows, ma come posso dire...
In VS Code su Debian, quando provo il carico di altro codice, tutti i core vengono caricati, quindi non è necessario incolpare Debian.
Il vino può essere, o meglio, MT non è ottimizzato per questo. Pertanto, è incompleto sotto Wine.
Ci sono molti utenti linux sotto Wine.

 
Igor Makanu:

Ahh, ecco il cagnolino!

Hai visto i miei test? C'è anche quello di Roman.

ci sono 436 secondi di test = 7 minuti!

;)

ZS: Ti dico che mani birichine l'hanno pugnalato!...lo script non funziona "out of the box"... ))))


Bene. Senza mani birichine, la prima prova è finita in cinque minuti. Gli altri non hanno finito in venti. Il refrigeratore ha iniziato a decollare, il caffè accanto ha iniziato a bollire... In ogni caso, ha fatto il botto...
 
Qual è il verdetto sulla velocità della funzione - quale è più veloce?
 
Renat Akhtyamov:
Qual è il verdetto sulla velocità delle funzioni - quale è più veloce?

Sembra CopyXXX() ma non CopyRates(). Quando sono richiesti più dati allo stesso tempo - CopyRates()

 
Artyom Trishkin:
Bene. Il primo test è passato in cinque minuti senza mani birichine. Il resto non era finito nemmeno in venti. Il refrigeratore ha cominciato a decollare, il caffè accanto bolliva... In ogni caso, ha fatto il botto...

hmmm, penso che tu abbia dei bit che non vogliono costruire in byte... praticamente non ci sono più opzioni! ))))

se questo thread è sotto lo sguardo di un moderatore, qualcosa deve essere fatto... Ho smontato la macro per le parti,

Artem, funziona almeno?

#property script_show_inputs

input ulong LoopCount=500000000;

// Позволяет, как в MT4, работать с таймсериями: Open[Pos], High[Pos], Low[Pos], Close[Pos], Time[Pos], Volume[Pos].
// А так же задает привычные MT4-функции: iOpen, iHigh, iLow, iClose, iTime, iVolume.
#define  DEFINE_TIMESERIE(NAME,FUNC,T)                                                                         \
  class CLASS##NAME                                                                                           \
  {                                                                                                           \
  public:                                                                                                     \
    static T Get(const string Symb,const int TimeFrame,const int iShift) \
    {                                                                                                         \
      T tValue[];                                                                                             \
                                                                                                              \
      return((Copy##FUNC((Symb == NULL) ? _Symbol : Symb, _Period, iShift, 1, tValue) > 0) ? tValue[0] : -1); \
    }                                                                                                         \
                                                                                                              \
    T operator[](const int iPos) const                                                                     \
    {                                                                                                         \
      return(CLASS##NAME::Get(_Symbol, _Period, iPos));                                                       \
    }                                                                                                         \
  };                                                                                                          \
                                                                                                              \
  CLASS##NAME  NAME;                                                                                           \
                                                                                                              \
  T i##NAME(const string Symb,const int TimeFrame,const int iShift) \
  {                                                                                                           \
    return(CLASS##NAME::Get(Symb,  TimeFrame, iShift));                                                        \
  }
//+------------------------------------------------------------------+
DEFINE_TIMESERIE(Volume,TickVolume,long)
DEFINE_TIMESERIE(Time,Time,datetime)
DEFINE_TIMESERIE(Open,Open,double)
DEFINE_TIMESERIE(High,High,double)
DEFINE_TIMESERIE(Low,Low,double)
DEFINE_TIMESERIE(Close,Close,double)
//+------------------------------------------------------------------+
void OnStart()
  {
   double c,buff[1];
   MqlRates rates[1];
   ulong i;
//-----   
   Print("Start test № 1...");
   Sleep(125);
   srand(GetTickCount());
   uint start=GetTickCount();
   for(i=0;i<LoopCount && !_StopFlag;i++)
      CopyClose(_Symbol,_Period,rand(),1,buff);
   printf("CopyClose : loops=%u , ms=%u",i,GetTickCount()-start);
//-----   
   Print("Start test № 2...");
   Sleep(125);
   srand(GetTickCount());
   start=GetTickCount();
   for(i=0;i<LoopCount && !_StopFlag;i++)
      c = iClose(NULL,0,rand());
   printf("iClose : loops=%u , ms=%u",i,GetTickCount()-start);
//-----   
   Print("Start test № 3...");
   Sleep(125);
   srand(GetTickCount());
   start=GetTickCount();
   for(i=0;i<LoopCount && !_StopFlag;i++)
      c = Close[rand()];
   printf("Close[i] : loops=%u , ms=%u",i,GetTickCount()-start);
//-----   
   Print("Start test № 4...");
   Sleep(125);
   srand(GetTickCount());
   start=GetTickCount();
   for(i=0;i<LoopCount && !_StopFlag;i++)
      CopyRates(_Symbol,_Period,rand(),1,rates);
   printf("CopyRates : loops=%u , ms=%u",i,GetTickCount()-start);
   Print("End script");
  }
//+------------------------------------------------------------------+

2019.07.30 19:42:16.639 tst_iXXX_Copy (EURUSD,H1) Inizia il test #1...

2019.07.30 19:42:40.199 tst_iXXX_Copy (EURUSD,H1) CopyClose : loops=500000000 , ms=23422

2019.07.30 19:42:40.199 tst_iXXX_Copy (EURUSD,H1) Inizia il test #2...

2019.07.30 19:43:26.953 tst_iXXX_Copy (EURUSD,H1) iClose: loops=500000000 , ms=46609

2019.07.30 19:43:26.953 tst_iXXX_Copy (EURUSD,H1) Inizia il test #3...

2019.07.30 19:44:12.274 tst_iXXX_Copy (EURUSD,H1) Close[i] : loops=500000000 , ms=45156

2019.07.30 19:44:12.274 tst_iXXX_Copy (EURUSD,H1) Inizia il test #4...

2019.07.30 19:44:42.080 tst_iXXX_Copy (EURUSD,H1) CopyRates : loops=500000000 , ms=29656

2019.07.30 19:44:42.080 tst_iXXX_Copy (EURUSD,H1) Fine script

File:
 
Renat Akhtyamov:
Qual è il verdetto sulla velocità delle funzioni - quale è più veloce?

funzionano allo stesso modo, imho gli esperimenti sono per gli esperimenti... ecco l'ultima chiamata di test per mezzo miliardo di volte, beh sì, potete vedere la differenza, l'unica cosa che rimane è capire quanti tick in un minuto (~60), quanti in un tick in un'ora (~3600) e quanti in un giorno (~86400) e quanto questi 23 secondi gireranno per mezzo miliardo di chiamate ...

5 787 giorni = 23 secondi di profitto? se usiamo la funzione più veloce su ogni tick! )))))

imho, usa ciò che è conveniente e non ascoltare nessuno

 
Igor Makanu:

funzionano allo stesso modo, imho gli esperimenti sono per gli esperimenti... ecco l'ultima chiamata di test per mezzo miliardo di volte, beh sì, potete vedere la differenza, l'unica cosa rimasta è capire quanti tick in un minuto (~60), quanti in un tick in un'ora (~3600) e quanti in un giorno (~86400) e quanto questi 23 secondi gireranno per mezzo miliardo di chiamate ...

5 787 giorni = 23 secondi di profitto? se usiamo la funzione più veloce su ogni tick! )))))

imho, usa ciò che è conveniente e non ascoltare nessuno

Mi sono abituato al 4pc, più compatto e più leggibile

Non posso lamentarmi della velocità e delle caratteristiche, è ok.

;)