Preguntas de los principiantes MQL5 MT5 MetaTrader 5 - página 988

 
Aleksey Vyazmikin:

Ya he hecho una comprobación para mí, pero esta comprobación es para evitar el error de esta función, la ayuda no dice nada sobre la necesidad de una comprobación, lo que significa que debería estar incorporada.

Y entonces, usted está hablando de la comprobación del indicador, mientras que yo estoy usando Bares para calcular la hora correcta de inicio de la barra, ya que iBarShift es por su cuenta y sólo es adecuado para el mercado de divisas, donde no hay frecuentes caídas de la historia debido a la compensación y las sesiones de negociación no para todo el día.

¿Y dónde está su validación? Y para qué introducir alguna variable si ( cuando se bate el historial o se cambia el historial) basta con recalcular el indicador por completo. Esto se suele hacer desde "0" hasta "rates_total-1".

 
Vladimir Karputov:

¿Y dónde está tu cheque? Y para qué introducir una variable si sólo hay que recalcular el indicador por completo (cuando se intercambia el historial o se cambia el historial). Normalmente se hace desde "0" hasta "rates_total-1".

Mi problema no tiene nada que ver con el indicador o la paginación del historial. Este es un fragmento de código

      datetime         StartDt=iTime(Symbol(),PERIOD_CURRENT,Bars(Symbol(),PERIOD_CURRENT,iTime(Symbol(),TF_iDeltaP,0),iTime(Symbol(),PERIOD_CURRENT,0))-1);
      datetime         StopDt=iTime(Symbol(),PERIOD_CURRENT,1); //Берем прошлый бар, что б не было расхождений между реалом и тестером при задержки на реальных данных

      int BarsGo=Bars(Symbol(),PERIOD_CURRENT,StartDt,StopDt);
      if(StartDt>StopDt)BarsGo=0;
      if(StartDt==StopDt)BarsGo=1;
      if (BarsGo>0)
        {
                //Полный расчет с вычислениями - копирование массивов цен и прочие тяжелые функции
        }
      else
        {
                //Упрощенный расчет с присвоением эмпирических значений переменным
        }
El problema se produce al abrir una nueva barra en general, cuando la fecha de inicio de la barra es mayor que el desplazamiento de 1 barra desde la barra cero en la TF actual.
 
Aleksey Vyazmikin:

Esto no es una defensa, sino un obstáculo para detectar un error en el código.

Además, no es en absoluto lógico devolver el número 2 si las fechas coinciden, ¿cuál es el razonamiento aquí?

La hora de inicio de una barra en FORTS puede no coincidir y esto lleva a errores en los cálculos, por ejemplo, una barra no abre a las 14:00 sino a las 14:05 - yo también lo sufrí.

Tal vez el programador empezó a trabajar de la manera que dice la documentación pero después decidió que sería mejor devolver "entre" en lugar de "desde" y "hasta" las fechas indicadas pero la documentación no ha corregido esta descripción. En realidad, no es muy necesario.

Ni siquiera tengo una demo en FORTS. No puedo comprobarlo.

 
Alexey Viktorov:

Tal vez lo hicieron originalmente como se describe en la documentación, pero luego decidieron que sería mejor devolver las fechas "entre" en lugar de las fechas "desde" y "hasta", pero no se corrigió la descripción en la documentación. Pero no arreglaron la descripción.

Ni siquiera tengo una demo en FORTS. No puedo comprobarlo.

Cómo puede ser innecesario, no lo puedo adivinar, y si es un error, que se corregirá más tarde, el código no volverá a funcionar, y estaré buscando un error durante mucho tiempo... Pero Artem ha decidido que no es un error y no ha escrito nada en essence....

Parece que en la cuenta demo de MQ la gente se conecta a FORTS...

 
Aleksey Vyazmikin:

Cómo no va a ser, no puedo adivinar, y si es un error, que se corregirá más tarde, entonces el código no va a funcionar de nuevo, y voy a estar buscando un error para un tiempo crítico ... Pero Artem ha decidido que no es un error y no ha escrito nada en essence....

Parece que la gente se conecta a FORTS en una cuenta demo desde MQ...

Bueno, si ahora eres lo suficientemente cuidadoso y no te equivocas en la hora de inicio y de finalización, no hay nada que temer. Deja que gobiernen.

 
Aleksey Vyazmikin:

No tengo ningún problema con el indicador o la paginación del historial. Este es un fragmento de código

El problema se produce al abrir una nueva barra en general, cuando la fecha de inicio de la barra está a más de 1 barra de distancia de la barra cero de la TF actual.
datetime StartDt=iTime(Symbol(),PERIOD_CURRENT,Bars(Symbol(),PERIOD_CURRENT,iTime(Symbol(),TF_iDeltaP,0),iTime(Symbol(),PERIOD_CURRENT,0))-1);
datetime StopDt=iTime(Symbol(),PERIOD_CURRENT,1); //Берем прошлый бар, что б не было расхождений между реалом и тестером при задержки на реальных данных

No se comprueba lo que devuelven iTime(), Bars()

Deberías tener. Realmente deberías haberlo hecho. Mira en la ayuda - ¿qué devuelven iTime() y Bars()? ¿Y qué dice en las notas?

 
Alexey Viktorov:

Bueno, si eres lo suficientemente cuidadoso como para no equivocarte en la hora de inicio y de finalización, no hay nada que temer. Deja que gobiernen.

Simplemente no me gusta sentarme y esperar pasivamente, y se me prohibió preguntar a los desarrolladores específicamente sobre esto - la pregunta era originalmente para ellos.

 
Artyom Trishkin:

No hay comprobaciones sobre lo que devuelven iTime(), Bars()

Pues deberías hacerlo. Deberías hacerlo. Mira en la ayuda - ¿qué devuelven iTime() y Bars()? ¿Y qué dice en las notas?

¿Es suficiente con hacer estas comprobaciones una vez en el código, o deben hacerse después/antes de cada llamada a una función?

¿Qué tipo de comprobaciones se sugiere hacer, para el bar/historial actual? ¿Cuál es la mejor manera de hacerlo?

 

¿Cómo puedo encontrar el motivo de este mensaje?

2019.01.24 21:32:01.570 i-Regr4_05i (Si-3.19,M1)        indicator is too slow, 3011 ms. rewrite the indicator, please
 
Aleksey Vyazmikin:

¿Es suficiente con hacer estas comprobaciones una vez en el código, o deben hacerse después/antes de cada llamada a una función?

¿Qué tipo de comprobaciones propones hacer, para el bar/historia actual? ¿Cuál es la mejor manera de hacerlo?

¿No sabes cómo comprobar si el valor de retorno es cero? ¿Y no sabe cómo salir de OnCalculate() con un retorno de cero? ¿Ha intentado alguna vez buscar información en un sitio web?

  1. Obtener el valor requerido de la función
  2. Compruebe que no hay ningún problema.
    1. Si es cero, entonces devuelve 0;
    2. Si no es cero, entonces al paso 3
  3. Trabajar con este valor
Nunca pensé que estaría enseñando los fundamentos de la lógica a un hombre con un rating superior a 13 mil...
Razón de la queja: