Cualquier pregunta de los recién llegados sobre MQL4 y MQL5, ayuda y discusión sobre algoritmos y códigos - página 989

 

Hola. Por favor, muéstreme dónde está el error.

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:

Hola. ¿Podría mostrarme dónde está el error?

en alguna parte del código

 
Vladimir Pastushak:

en alguna parte del código.

Divertidísimo.

Esto es BuySellVolume. El volumen total no es igual a la suma de la Compra y la Venta, sino que es ligeramente superior.

 

¿Qué puede significar la "inf" en el indicador del MLQ5?

Es la primera vez que me encuentro con esto y no he encontrado nada en la búsqueda de documentación

 
Alexandr Sokolov:

¿Qué puede significar la "inf" en el indicador del MLQ5?

Es la primera vez que me encuentro con esto y no he podido encontrar nada en la búsqueda de documentación

No es una buena búsqueda: una búsqueda INF produce varios resultados.

Por ejemplo, mira en MathLog

Valor de retorno

El logaritmo natural del valor en caso de éxito. Si val es negativo, la función devuelve NaN (valor indefinido). Si el valor es 0, la funcióndevuelve INF (infinito).


Este resultado significa: el código tiene un error en el algoritmo de cálculo de valores (por ejemplo, nos olvidamos de inicializar las variables - esperamos tener suerte, en las operaciones de división no pensamos...).

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

No es una buena búsqueda: una búsqueda INF produce varios resultados.

Por ejemplo, mira en MathLog

Valor devuelto

El logaritmo natural del valor en caso de éxito. Si val es negativo, la función devuelve NaN (valor indefinido). Si el valor es 0, la función devuelve INF (infinito).


Este resultado significa: el código contiene un error en el algoritmo de cálculo de valores (por ejemplo, nos olvidamos de inicializar las variables - esperamos lo peor, en las operaciones de división no pensamos ...).

Eso es todo lo que he encontrado en la búsqueda >>> documentación (pero no he leído todas las descripciones, siempre las encuentro por el título - costumbre)


Sobre la inicialización de las variables (o te he entendido mal o es la primera vez que lo oigo), por ejemplo:

double a = 0, b;

... ¿No es suficiente? Suelo declarar variables y utilizar

 
Alexandr Sokolov:

Aquí está todo lo que vi en mi búsqueda >>> documentación (pero no leí la descripción de cada una, siempre la encuentro por el título - costumbre)

***

Un mal hábito.


Alexandr Sokolov:


... ¿no es suficiente? Suelo declarar variables y utilizar

Y aquí viene el "cisne negro" - la variable b no está inicializada, puede contener cualquier basura.

 
Alexandr Sokolov:

¿Qué puede significar la "inf" en el indicador del MLQ5?

Es la primera vez que me encuentro con esto y no he podido encontrar nada en la búsqueda de documentación

¡Ya he descubierto cuál es el problema!

Si ha inicializado los búferes EMPTY_VALUE

ArrayInitialize(Bufer,EMPTY_VALUE);

... luego en los cálculos posteriores se copió o calculó un número insuficiente de series de tiempo y luego se multiplica cualquier valor por EMPTY_VALUE del buffer - se obtiene inf


Aquí acabo de alertar, y sólo multiplicando por EMPTY_VALUE resulta inf


 
Vladimir Karputov:

Gracias

 
Alexandr Sokolov:

¡Ya veo cuál es el problema!

Si ha inicializado los búferes EMPTY_VALUE

... entonces en los cálculos posteriores se ha copiado o calculado un número insuficiente de series temporales y luego se multiplica cualquier valor por EMPTY_VALUE del buffer - entonces se obtiene inf


Aquí acabo de alertar, y sólo al multiplicar por EMPTY_VALUE se obtiene inf


Parece que has encontrado la razón. Así, al inicializar un buffer con EMPTY_VALUE, durante las operaciones aritméticas deberíamos comprobar primero "¿está EMPTY_VALUE accidentalmente presente en el buffer en este índice?

Razón de la queja: