Quaisquer perguntas de recém-chegados sobre MQL4 e MQL5, ajuda e discussão sobre algoritmos e códigos - página 989

 

Olá. Por favor, mostre-me onde está o erro.

void OnStart()
  {
datetime current_time=TimeCurrent();
//datetime current_time=D'2019.10.18 19:55:00';
datetime our_time=(current_time-60)-MathMod((current_time-60),60);
datetime t1=our_time;
datetime t2=our_time+60;
PrintFormat("current_time=%s",TimeToString(current_time,TIME_DATE|TIME_MINUTES|TIME_SECONDS));
PrintFormat("our_time=%s",TimeToString(our_time,TIME_DATE|TIME_MINUTES|TIME_SECONDS));
string stock="MSFT";
MqlTick tick_array[];// массив для приема тиков
int received=CopyTicksRange(stock, tick_array, COPY_TICKS_TRADE, t1*1000, t2*1000);
Print(stock," Всего тиков ",received);
Print(tick_array[0].time,": Last = ",tick_array[0].last,"  Volume = ",tick_array[0].volume );
ulong total=tick_array[0].volume; ulong buy=tick_array[0].volume; ulong sell=0; bool flag='b';
int ticks=ArraySize(tick_array); double pprice=tick_array[0].last; int i=1;
while(i<ticks)
      { 
        total=total+tick_array[i].volume;//{считаем общий объем}
        if (pprice<tick_array[i].last)  flag='b';//{если пред.тик меньше зн.'b'}
        if (pprice<=tick_array[i].last)
            if (flag='b')
                buy=buy+tick_array[i].volume;//{считаем,что сделка по BID} 
        if (pprice>tick_array[i].last)  flag='s';//{если пред.тик больше зн.'s'} 
        if (pprice>=tick_array[i].last)
            if (flag='s')
               sell=sell+tick_array[i].volume;//{считаем,что сделка по ASK}
        pprice=tick_array[i].last;//{ставим счетчик на последн. тик}
        i=i+1; 
      }               
Print (total," ",buy," ",sell);       
  }
 
werter:

Olá. Você poderia por favor me mostrar onde está o erro?

em algum lugar no código

 
Vladimir Pastushak:

em algum lugar no código.

Hilariante.

Este é o BuySellVolume. O volume total não é igual à soma da Compra e Venda, mas apenas um pouco mais.

 

O que pode significar o "inf" no indicador do MLQ5?

Esta é a primeira vez que encontro isto e não encontrei nada na busca de documentação.

 
Alexandr Sokolov:

O que pode significar o "inf" no indicador do MLQ5?

Esta é a primeira vez que encontro isto e não consegui encontrar nada na busca de documentação.

Não é uma boa busca: uma busca INF produz vários resultados.

Por exemplo, veja no MathLog

Valor de retorno

O logaritmo natural de valor em caso de sucesso. Se val for negativo, a função retorna NaN (valor indefinido). Se o valor for 0, a funçãoretorna INF (infinito).


Este resultado significa: o código tem um erro no algoritmo de cálculo do valor (por exemplo, esquecemos de inicializar variáveis - esperamos o pior, em operações de divisão não pensamos ...).

Поиск - MQL5.community
Поиск - MQL5.community
  • www.mql5.com
Поиск выполняется с учетом морфологии и без учета регистра. Все буквы, независимо от того, как они введены, будут рассматриваться как строчные. По умолчанию наш поиск показывает страницы...
 
Vladimir Karputov:

Não é uma boa busca: uma busca INF produz vários resultados.

Por exemplo, veja no MathLog

Valor retornado

O logaritmo natural de valor em caso de sucesso. Se val for negativo, a função retorna NaN (valor indefinido). Se o valor for 0, a função retorna INF (infinito).


Este resultado significa: o código contém um erro no algoritmo de cálculo do valor (por exemplo, esquecemos de inicializar variáveis - esperamos o pior, em operações de divisão não pensamos ...).

Isso é tudo que encontrei na busca >>> documentação (mas não li todas as descrições, sempre as encontro por título - hábito)


Sobre inicialização de variáveis (eu o entendi mal ou ouvi falar sobre isso pela primeira vez), por exemplo:

double a = 0, b;

... Não é suficiente? Eu geralmente declaro variáveis e uso

 
Alexandr Sokolov:

Aqui está tudo o que vi em minha busca >>> documentação (mas não li a descrição de cada um, sempre a encontro pelo título - hábito)

***

Mau hábito.


Alexandr Sokolov:


... isso não é suficiente? Normalmente declaro variáveis e uso

E aí vem o "cisne preto" - a variável b não é rubricada, ela pode conter qualquer lixo.

 
Alexandr Sokolov:

O que pode significar o "inf" no indicador do MLQ5?

Esta é a primeira vez que encontro isto e não consegui encontrar nada na busca de documentação.

Eu descobri qual é o problema!

Se você tiver rubricado os amortecedores EMPTY_VALUE

ArrayInitialize(Bufer,EMPTY_VALUE);

... então você copiou ou calculou um número insuficiente de séries cronológicas em cálculos posteriores e então multiplica qualquer valor por EMPTY_VALUE do buffer - você obtém inf


Aqui eu acabei de alertar, e apenas multiplicar por EMPTY_VALUE resulta em inf


 
Vladimir Karputov:

Obrigado

 
Alexandr Sokolov:

Estou vendo qual é o problema!

Se você tiver rubricado os amortecedores EMPTY_VALUE

... então em cálculos posteriores você copiou ou calculou um número insuficiente de séries temporais e então multiplique qualquer valor por EMPTY_VALUE do buffer - então você obtém inf


Aqui eu acabei de alerar, e somente quando multiplicado por VAZIO_VALOR é que ele se inf


Parece que você encontrou a razão. Então, ao inicializar um buffer com EMPTY_VALUE, durante as operações aritméticas devemos primeiro verificar "o EMPTY_VALUE está presente acidentalmente no buffer neste índice?