Errores, fallos, preguntas - página 3030

 
Andrey Dik:

devolvemos 0, indicando así que aún no hemos contado nada y que no se incrementará en 1 en la siguiente barra.

es decir, estaremos en la barra en la que iniciamos la solicitud de datos del factor anterior hasta que devolvamos (rates_total)

De la ayuda:"El parámetro prev_calculado en la llamada a la función contiene el valor devuelto por OnCalculate() en la llamada anterior".
 
mktr8591:
De la ayuda:"El parámetro prev_calculado en la llamada a la función contiene el valor devuelto por OnCalculate() en la llamada anterior".

Sí, hay mucho escrito en la Ayuda, pero no siempre está claro, desgraciadamente (no es por fastidiar a los desarrolladores), hay que aprender, aprender, aprender. Pero esta rama existe porque a veces se descubren cosas que no concuerdan ni con la Ayuda ni con el sentido común, A100 es nuestro héroe, porque llega hasta donde nadie subiría por sí mismo)).

 
Сергей Таболин:

1. Gracias a todos: me he vuelto un poco más instruido en los indicadores ))))

Andrew, si alguien no entiende tus ideas (incluyéndome a mí), sólo significa una cosa: ¡tú no haces el dibujo correctamente! O mejor dicho, lo haces de tal manera que mucha gente no lo entiende...

la verdad es más importante. no siempre está clara para todos, por desgracia.

 

Andrey Dik:

devuelve 0, indicando así que aún no hemos contado nada y prev_calc no se incrementará en 1 en la siguiente barra.

¿Entonces return(rates_total) debería aumentar prev_calc en rates_total?

 
Andrey Dik:

devuelve 0, indicando así que aún no hemos calculado nada y que el prev kalk no aumentará en 1 en la siguiente barra.

él mismo se pone a cero en el cálculo y se queja de que se pone a cero )

 
Andrey Dik:

podemos permitirnos calcular una nueva barra sólo una vez y no en cada tick.

no podemos permitírnoslo porque el terminal no generará datos históricos en línea en la "TF superior"

En general, es necesario hacer algunas suposiciones al respecto:

- o bien construimos el OHLC dentro del indicador por nosotros mismos

- o el terminal construye el propio OHLC


Si es esto último, debemos considerar que el terminal no sabe en absoluto cómo interactúan los TFs, quién es múltiplo de qué y qué ocurre ante el evento"nueva barra" pero debemos dejar que el terminal construya la TF necesaria


Pruebe este código en su segundo indicador:

int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
{
   double buff [];
   if(prev_calculated == 0)
   {
      if (iBars (Symbol (), OldTF) != BarsCalculated (Handle))
      {
         Print ("Индикатор на периоде ", OldTF, " ещё не рассчитан");
         return 0;
      }
   }
   else
   {
      if (rates_total == prev_calculated)
      {
         if(CopyBuffer (Handle, 0, 0, 1, buff)<0) return 0;
         return rates_total;
      }
   }

   ulong t = GetMicrosecondCount ();

...... далее без изменений
 
Andrei Trukhanovich:

mismo reinicia el cálculo y se queja de que se reinicia )

Andrei, ejecuta el código, por favor... pero no empieces, ¿eh? No puedo luchar contra ti.

 
Igor Makanu:

no podemos permitirnos ya que el terminal no generará datos históricos en línea en el "TF más antiguo"

En general, es necesario hacer algunas suposiciones al respecto:

- O bien construimos el OHLC dentro del indicador por nosotros mismos

- o el terminal construye el propio OHLC


si es esto último, entonces debemos considerar que el terminal no sabe en absoluto cómo interactúa la TF, quién es múltiplo de qué y qué sucede ante el evento"nueva barra"


Pruebe este código en su segundo indicador:

Tu código hará cálculos en cada tick, no me interesa, ni siquiera lo voy a ejecutar. Necesito hacer el cálculo sólo UNA vez en cada barra, en todos los indicadores usados, no en cada tick de todos los indicadores usados.

 
Andrey Dik:

Tu código va a martillear los cálculos en cada tick, no me interesa, ni siquiera lo ejecutaré. Necesito hacer el cálculo sólo UNA vez en cada barra, en todos los indicadores utilizados, no en cada tick de todos los indicadores utilizados.

Mi código "tick a tick" sólo su indicador # 1, donde ha escrito :

 if (rates_total == prev_calculated) return rates_total;

permitirá que el terminal construya el "marco temporal superior" por sí mismo.

Para mí - es "más barato" que realizar un recálculo completo del indicador № 1, que ocurre en su código al sincronizar el historial en el "TF más antiguo

 
Andrey Dik:

Andrei, ¿podrías ejecutar el código, por favor... pero no empieces, ¿eh? No puedo luchar contra ti.

Sustituir

if (SeriesInfoInteger (Symbol (), OldTF, SERIES_SYNCHRONIZED))
   {
      if (iBars (Symbol (), OldTF) != BarsCalculated (Handle))
      {
        Print ("Индикатор на периоде ", OldTF, " ещё не рассчитан");
        return 0;
      }
   }
   else 
   {
     Print ("Период ", OldTF, " не синхронизирован.");
     return 0;
   }

a

if (SeriesInfoInteger (Symbol (), OldTF, SERIES_SYNCHRONIZED))
   {
      if (iBars (Symbol (), OldTF) != BarsCalculated (Handle))
      {
        Print ("Индикатор на периоде ", OldTF, " ещё не рассчитан");
        return prev_calculated;
      }
   }
   else 
   {
     Print ("Период ", OldTF, " не синхронизирован.");
     return prev_calculated;
   }

y probarlo.

Razón de la queja: