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

 
Artyom Trishkin:

Eu não vou olhar exatamente - não tenho tempo. Pensei que houvesse algo "fora da caixa" - correr e ver o resultado. Mas agora ... Sim, e o roteiro não funciona imediatamente, e fica pendurado até que você feche à força o PKM em seu ícone. E somente então algo lá é impresso. Em geral - com as macros, a gente se incomoda por alguma razão.

E meu post tem o significado do tema bugs move?

 
Artyom Trishkin:

Eu não vou olhar exatamente - não tenho tempo. Pensei que houvesse algo "fora da caixa" - correr e ver o resultado. Mas agora ... Sim, e o roteiro não funciona imediatamente, e fica pendurado até que você feche à força o PKM em seu ícone. E somente então algo lá é impresso. Em resumo, as macros são uma dor de cabeça.

Ah, aí está o cachorro!

Você já viu meus testes? Há o Roman também

há 436 segundos de testes = 7 minutos!

;)

ZS: Eu lhe disse que mãos marotas tropeçaram nele!...o roteiro não funciona "fora da caixa"... ))))


Romano:

Faz sentido colocar meu posto na linha dos insetos?

quais insetos? - Escreva em Wine e Debian que eles não podem carregar completamente os núcleos da CPU, para que SO você tem MT?

 
Igor Makanu:

Ahh, aí está o cãozinho!

Você viu meus testes? Há os de Roman, também.

há 436 segundos de testes = 7 minutos!

;)

ZS: Estou lhe dizendo que mãos travessas tropeçaram nele!...o roteiro não funciona "fora da caixa"... ))))

Assustador :)

Deveríamos descansar mais...

 
Igor Makanu:

Ahh, aí está o cãozinho!

Você viu meus testes? Há os de Roman, também.

há 436 segundos de testes = 7 minutos!

;)

ZS: Eu lhe disse que mãos marotas tropeçaram nele!...o roteiro não funciona "fora da caixa"... ))))


quais insetos? - bem, escreva em Wine e Debian que eles não podem carregar completamente os núcleos da CPU, você tem MT para qual SO?

MT, claro, sob Windows, mas como posso dizer...
No código VS no Debian, quando eu testo a carga de outros códigos, todos os núcleos são carregados, então é desnecessário culpar o Debian.
O vinho pode ser, ou melhor, o MT não está otimizado para ele. Portanto, está incompleto em Vinho.
Há muitos usuários de linux em Wine.

 
Igor Makanu:

Ahh, aí está o cãozinho!

Você viu meus testes? Há os de Roman, também.

há 436 segundos de testes = 7 minutos!

;)

ZS: Eu digo que mãos malvadas apunhalaram!...o roteiro não funciona "fora da caixa"... ))))


Bom. Sem mãos marotas, o primeiro teste terminou em cinco minutos. O resto não terminou em vinte. O refrigerador começou a decolar, o café junto a ele começou a ferver. De qualquer forma, nocauteou...
 
Qual é o veredicto sobre a velocidade da função - que é mais rápida?
 
Renat Akhtyamov:
Qual é o veredicto sobre a velocidade das funções - que é mais rápida?

Parece com CopyXXX() mas não CopyRates(). Quando mais de um dado é necessário ao mesmo tempo - CopyRates()

 
Artyom Trishkin:
Bom. O primeiro teste foi aprovado em cinco minutos sem mãos malandrecas. Os demais não estavam terminados nem mesmo em vinte. O refrigerador começou a decolar, o café junto a ele fervia. De qualquer forma, nocauteou...

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?

#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) 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

Arquivos anexados:
 
Renat Akhtyamov:
Qual é o veredicto sobre a velocidade das funções - qual delas é mais rápida?

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

 
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

acostumei-me a 4pc, mais compacto e mais legível

Não posso reclamar de velocidade e características, está tudo bem.

;)

Razão: