Apareció un error de división por cero en un indicador - página 8

 
Aleksey Vyazmikin:

Supongamos que tenemos

Sabemos questart_time debe ser2018.04.28 23:00

¿Así que resulta que la hora está mal aquí?

Alexey, mira mi ejemplo. Allí mostré línea por línea cómo se convierte la hora que pasas al tiempo más cercano de la barra actual.

 
No he podido encontrar una declaración del tipo de límite de la variable. Mi vista es débil.
 
Алексей Тарабанов:
No se ha podido encontrar una declaración del tipo de variable límite. Mi vista es débil.

Puesto 50, procedimiento OnCalculate

 
Sergey Savinkin:

Puesto 50, procedimiento OnCalculate

Gracias, pero ¿cuál es el 50? ¿Puede ayudarme con un enlace?

 
Алексей Тарабанов:

Gracias, pero ¿cuál es el 50? ¿Puede ayudarme con un enlace?

https://www.mql5.com/ru/forum/262864/page5

El enlace es sólo a la página. Dice #50 en el título del post. Tu #74 ))

В одном индикаторе появилась ошибка деления на ноль
В одном индикаторе появилась ошибка деления на ноль
  • 2018.07.04
  • www.mql5.com
Общее обсуждение: В одном индикаторе появилась ошибка деления на ноль
 
Gracias
 
Sergey Savinkin:
Tienes escrito primerolimit=index_de_parada+1, es decirlimit==1, y luego donde la división por 2 eslimit=(int)(tiempo_de_parada-hora_de_inicio)/PeriodoSegundos(_Periodo). No se añade uno. El cero se divide por el periodo.

Correcto,limit=start_index-stop_index+1es para i>0, es decir, para el cálculo del historial, y limit=(int)(stop_time-start_time)/PeriodSeconds(_Period) es para el cálculo en la barra actual.

Y la cosa es, de hecho, por qué nuestro tiempo está tan torcido - si tenemos un marco temporal de horas, las fechas deben ser redondas, tanto al principio como al final - ¡¡¡este es el verdadero problema, que la hora de la barra en la fecha de inicio está de alguna manera equivocada!!!

Tal vez haya un problema aquí.

start_index=ArrayBsearch(Time,start_time);

Como la hora de inicio es correcta en este punto

datetime start_time=rates[i].time;
 
Alexei, no hay "al final". Es sólo una cuantificación. Exactamente a las 18:00, la barra se abrió, mostró un mínimo y un máximo y se cerró con seguridad, en el mismo segundo.
 
Алексей Тарабанов:
Alexey, no hay "al final". Es sólo una cuantificación. Exactamente a las 18:00 el bar se abrió, mostró el mínimo y el máximo y se cerró con seguridad, en el mismo segundo.

Por ejemplo, la barra se abrió a las 18:00, por lo que la hora inicial(start_time) será las 18:00 y la hora final(stop_time) se supone que es las 19:00 para el marco temporal horario. Por lo tanto, el índice entre ellos será diferente en el marco temporal M1. Y en el código, el índice inicial y el final son iguales, lo que no es cierto.

 
Aleksey Vyazmikin:

Correcto,limit=start_index-stop_index+1es para i>0, es decir, para el cálculo del historial, y limit=(int)(stop_time-start_time)/PeriodSeconds(_Period) es para el cálculo en la barra actual.

Y la cosa es, de hecho, por qué nuestro tiempo está tan torcido - si tenemos un marco temporal de horas, las fechas deben ser redondas, tanto al principio como al final - ¡¡¡este es el verdadero problema, que la hora de la barra en la fecha de inicio está de alguna manera equivocada!!!

Tal vez haya un problema aquí.

Ya que la hora de inicio es correcta en este punto

¿Y por qué son redondas si primero se hace CopyRates del timeframe horario (resulta números redondos), luego se pasa al procedimientoCreateFigure time del timeframe actual (tiempo, que se convierte en Time) y Rates del timeframe horario, y luego se busca el índice en el array del timeframe actual?start_index=ArrayBsearch(Time,start_time);