Como obter parâmetros Abertos, Baixos, Altos, Fechados em MQL5? - página 9

 
Renat Akhtyamov:

Estou acostumado com o pacote de 4, é mais compacto e mais legível

;)

meu exemplo compacto está na primeira página... é basicamente onde tudo começou ))))

 
Igor Makanu:

hmmm, eu acho que você tem pedaços que não querem se transformar em bytes... basicamente não há mais opções! ))))

se este fio está sob o olhar de um moderador, algo precisa ser feito... Eu desmontei a macro para peças,

Artem, será que funciona mesmo?

2019.07.30 19:42:16.639 tst_iXXX_Copy (EURUSD,H1) Iniciar o teste #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) Iniciar o teste #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) Iniciar o teste #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) Iniciar o teste #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) End script

Sim, funciona:

2019.07.31 00:38:01.936 Start test № 1...
2019.07.31 00:38:31.097 CopyClose : loops=500000000 , ms=29015
2019.07.31 00:38:31.097 Start test № 2...
2019.07.31 00:41:25.095 iClose : loops=500000000 , ms=173875
2019.07.31 00:41:25.095 Start test № 3...
2019.07.31 00:44:29.777 Close[i] : loops=500000000 , ms=184547
2019.07.31 00:44:29.777 Start test № 4...
2019.07.31 00:45:01.074 CopyRates : loops=500000000 , ms=31172
2019.07.31 00:45:01.074 End script

Resumindo:

  • 29 segundos CopyClose()
  • 173 segundos iClose()
  • 184 seg Fechar[]
  • 31 segundos CopyRates()

O que está errado? Por que eu tenho uma diferença de mais de seis vezes?

SZ rodar em D1

 
Artyom Trishkin:

O que está errado? Por que eu tenho uma diferença de mais de seis vezes?


Igor Makanu:

hmmm, eu acho que você tem pedaços que não querem se transformar em bytes... basicamente não há mais opções! ))))

)))

 

Igor Makanu:

hmmm, eu acho que você tem pedaços que não querem se transformar em bytes... basicamente não há mais opções!

)))

Fez um teste no H1, sem diferença discernível:

2019.07.31 00:55:30.290 Start test № 1...
2019.07.31 00:55:58.234 CopyClose : loops=500000000 , ms=27812
2019.07.31 00:55:58.234 Start test № 2...
2019.07.31 00:58:59.095 iClose : loops=500000000 , ms=180734
2019.07.31 00:58:59.095 Start test № 3...
2019.07.31 01:02:06.834 Close[i] : loops=500000000 , ms=187610
2019.07.31 01:02:06.834 Start test № 4...
2019.07.31 01:02:38.365 CopyRates : loops=500000000 , ms=31406
2019.07.31 01:02:38.365 End script

e pedaços e bytes não têm nada a ver com isso?

 
Artyom Trishkin:

e pedaços e bytes não têm nada a ver com isso?

Não vou lhe dizer que seu computador deve ser estúpido, vou?

Eu testei várias vezes, Roman testou - os resultados são comparáveis.

Para este teste, a velocidade do disco rígido não deve ser crítica, não sobra muito: SO, e hardware = memória + CPU, em algum lugar há algo lento,

há naturalmente uma opção em algum "mundo interior" Core i3 , eu tenho um Core™ i3-4170

 
Igor Makanu:

Não vou lhe dizer que seu computador deve ser estúpido, vou?

Eu testei várias vezes, Roman testou - os resultados são comparáveis

Para este teste, a velocidade do disco rígido não deve ser crítica, não sobra muito: SO, e hardware = memória + CPU, em algum lugar há algo que se atrasa,

há naturalmente uma opção em algum "mundo interior" Core i3 , eu tenho um Core™ i3-4170

Eu tenho um teste EA pendurado no segundo símbolo, no qual o controle do evento no temporizador é constante. Podemos supor que isso a afeta de alguma forma. E somente em funçõesnão copyXXX. Não há motivo para retirá-lo do quadro no momento - sua presença é mais importante para meus assuntos atuais do que este teste.

 
Artyom Trishkin:

Fez um teste no H1, sem diferença perceptível:

Os desenvolvedores disseram uma vez que as novas funções iXXX em 5 são apenas um invólucro para as funções CopyXXX.

Portanto, não é de se esperar nenhuma diferença em consultas únicas.

 
Renat Akhtyamov:
Qual é o veredicto sobre a velocidade da função - que é mais rápida?
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
int Count=5000000; // кол-во проходов
//---
void OnStart(void)
  {
   Print("Bench_1: ",Bench_1(Count)," msc");
   Print("Bench_2: ",Bench_2(Count)," msc");
  }
//+------------------------------------------------------------------+
//| Bench_1                                                                 |
//+------------------------------------------------------------------+
ulong Bench_1(const int _count)
  {
   const ulong  StartTime=GetMicrosecondCount();
//---
   for(int i=0; i<Count;i++)
     {
      datetime time  = iTime(Symbol(),Period(),0);
      double   open  = iOpen(Symbol(),Period(),0);
      double   high  = iHigh(Symbol(),Period(),0);
      double   low   = iLow(Symbol(),Period(),0);
      double   close = iClose(NULL,PERIOD_CURRENT,0);
      long     volume= iVolume(Symbol(),0,0);
     }
//---
   return(GetMicrosecondCount() - StartTime);
  }
//+------------------------------------------------------------------+
//| Bench_2                                                                 |
//+------------------------------------------------------------------+
ulong Bench_2(const int _count)
  {
   datetime  time[];
   double    open[];   // Open (цены открытия бара)
   double    high[];   // High (цены максимума бара)
   double    low[];    // Open (цены минимума бара)
   double    close[];    // Open (цены минимума бара)
   long      volume[]; // Close (цены закрытия бара)

   const ulong  StartTime=GetMicrosecondCount();
//---
   for(int i=0; i<Count;i++)
     {
      CopyTime(Symbol(),Period(),1,1,time);
      CopyOpen(Symbol(),Period(),1,1,open);
      CopyHigh(Symbol(),Period(),1,1,high);
      CopyLow(Symbol(),Period(),1,1,low);
      CopyClose(Symbol(),Period(),1,1,close);
      CopyTickVolume(Symbol(),Period(),1,1,volume);
//---
      datetime _time  = time[0];
      double   _open  = open[0];
      double   _high  = high[0];
      double   _low   = low[0];
      double   _close = close[0];
      long     _volume= volume[0];
     
}
//---
   return(GetMicrosecondCount() - StartTime);
  }
//+------------------------------------------------------------------+
o autor do roteiro não consegue lembrar quem
 
Igor Makanu:

eles trabalham da mesma forma, imho experimentos são para experimentos... aqui está a última chamada de teste por meio bilhão de vezes, bem, sim você pode ver a diferença, a única coisa que resta é descobrir quantos carrapatos em um minuto (~60), quantos em um carrapato em uma hora (~3600) e quantos em um dia (~86400) e quanto esses 23 segundos funcionarão para meio bilhão de chamadas ...

5 787 dias = 23 segundos de lucro? se usarmos a função mais rápida em cada tick! )))))

imho, use o que for conveniente e não dê ouvidos a ninguém

Esqueci-me dos testes e da otimização, Igor. É aí que a velocidade é necessária.

 
Andrey Khatimlianskii:

Esqueci-me dos testes e da otimização, Igor. É aí que a velocidade é necessária.

Sim, bem... Só não há aqui um monte de pessoas sérias discutindo este tópico, então me passou completamente pela cabeça o que tudo isso é para ))))

Você está certo! - Mas precisamos de um uso conveniente das funções CopyOpen()... a fazer e, provavelmente, se envolvermos o CopyOpen() em função adicional, então o ganho de desempenho será perdido.

ZZY: imho, em geral é como em qualquer outro lugar - você escreve em assembler, você tem um longo tempo de desenvolvimento e não o fato de que o desempenho final será maior do que usando C++, que você escreveu em 15 minutos - você deve verificá-lo