Nikolai, tenía un problema diferente. Yo tampoco entendí inmediatamente la cuestión, pensé que tenía que obtener los valores de una TF diferente. Lubricé los esquís y todo salió bien.
Alexey Viktorov: Nikolay, tenía un problema diferente. Yo tampoco entendí la pregunta al principio, pensé que tenía que obtener los valores de otra TF. He engrasado los esquís y todo ha ido bien.
Extraño, no entendí nada. Reproduje su problema en el mío exactamente como lo describió. Sucedió exactamente porque la única ejecución de CopyBuffer tuvo lugar en la primera ejecución en OnCalculate, cuando prev_calculated == 0 y no había ninguna garantía de que las barras ya estuvieran generadas. La solución fue ignorar esta primera ejecución y ejecutar el único CopyBuffer sólo cuando prev_calculated>0. No entiendo lode "dos archivos ATR diferentes de carpetas diferentes ".
Extraño, no entendí nada. Reproduje su problema en el mío exactamente como lo describió. Sucedió exactamente porque la única ejecución de CopyBuffer tuvo lugar en la primera ejecución en OnCalculate, cuando prev_calculated == 0 y no había ninguna garantía de que las barras ya estuvieran generadas. La solución fue ignorar esta primera llamada y ejecutar un solo CopyBuffer sólo cuando prev_calculated>0. No entiendo por qué había"dos archivos ATR diferentes de carpetas diferentes ".
Bueno, si se abre el gráfico y se crea el indicador para el TF actual, los datos ya deberían estar listos cuando se abra el gráfico. ¿No es así?
Bueno, si se abre un gráfico y se crea un indicador para el TF actual, los datos ya deberían estar listos cuando se abra el gráfico. ¿No es así?
No lo he expresado correctamente. Las barras son sí - lo más probable es que estén listas. Pero no hay garantía de que el indicador haya sido recalculado para todas estas barras en la primera llamada de OnCalculate, cuando prev_calculated == 0. Se puede ejecutar un indicador de este tipo para asegurarse de ello. Pero debe hacerse cuando se negocian las cotizaciones. Si el mercado está cerrado, no verá el desajuste. Así que es mejor probarlo en la criptomoneda, que está en movimiento, en el fin de semana. Si el tamaño de la matriz del Buffer = -1, significa que el buffer del indicador no se ha recalculado todavía y el valor de la BS no será correcto.
datetime a = D'2021.04.08 10:00:00';
int handle;
double Buffer[];
//+------------------------------------------------------------------+//| Custom indicator initialization function |//+------------------------------------------------------------------+intOnInit()
{
handle = iCustom(_Symbol, PERIOD_CURRENT, "Examples\\ATR.ex5", 14);
::Print(__FUNCTION__ + "| PERIOD_CURRENT = ", EnumToString(_Period));
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+//| Custom indicator iteration function |//+------------------------------------------------------------------+intOnCalculate(constint rates_total,
constint prev_calculated,
constdatetime &time[],
constdouble &open[],
constdouble &high[],
constdouble &low[],
constdouble &close[],
constlong &tick_volume[],
constlong &volume[],
constint &spread[])
{
if(handle != INVALID_HANDLE)
{
::CopyBuffer(handle, 0, a, 1, Buffer);
double BS = ::NormalizeDouble(Buffer[0], _Digits);
::Print(__FUNCTION__ + "| a = ", a);
::Print(__FUNCTION__ + "| BS ", BS);
int total_bars = iBars(NULL,PERIOD_CURRENT);
int size = CopyBuffer(handle, 0, 0, total_bars, Buffer);
Print("Total Bars = " + string(total_bars) + ", Size of Buffer array = " + string(size));
handle = INVALID_HANDLE;
}
// return value of prev_calculated for next callreturn(rates_total);
}
Si lo hace en la siguiente llamada de OnCalculate (cuando prev_calculated>0) entonces no habrá tal problema.
¿Quizás los esquís están mal?
Y luego está el RTS-6.21.
Esto es otra cosa. Qué broker tienes y qué versión de MT5.
¿Quizás los esquís están mal?
Y también RTS-6.21.
Gracias por la ayuda. Lo he descubierto. Conectar diferentes versiones de indicadores de diferentes carpetas.
Sí, lo hice. El resultado no ha cambiado.
No me lo creo.
inténtalo de nuevo
No me lo creo.
inténtalo de nuevo.
Me lo imaginé. El problema era que se conectaban dos archivos ATR diferentes de carpetas distintas. Por eso había una discrepancia en los valores.
Gracias por su ayuda.No me lo creo.
inténtalo de nuevo
Nikolay, tenía un problema diferente. Yo tampoco entendí la pregunta al principio, pensé que tenía que obtener los valores de otra TF. He engrasado los esquís y todo ha ido bien.
Extraño, no entendí nada.
Reproduje su problema en el mío exactamente como lo describió.
Sucedió exactamente porque la única ejecución de CopyBuffer tuvo lugar en la primera ejecución en OnCalculate, cuando prev_calculated == 0 y no había ninguna garantía de que las barras ya estuvieran generadas.
La solución fue ignorar esta primera ejecución y ejecutar el único CopyBuffer sólo cuando prev_calculated>0.
No entiendo lode "dos archivos ATR diferentes de carpetas diferentes ".
Extraño, no entendí nada.
Reproduje su problema en el mío exactamente como lo describió.
Sucedió exactamente porque la única ejecución de CopyBuffer tuvo lugar en la primera ejecución en OnCalculate, cuando prev_calculated == 0 y no había ninguna garantía de que las barras ya estuvieran generadas.
La solución fue ignorar esta primera llamada y ejecutar un solo CopyBuffer sólo cuando prev_calculated>0.
No entiendo por qué había"dos archivos ATR diferentes de carpetas diferentes ".
Bueno, si se abre el gráfico y se crea el indicador para el TF actual, los datos ya deberían estar listos cuando se abra el gráfico. ¿No es así?
Bueno, si se abre un gráfico y se crea un indicador para el TF actual, los datos ya deberían estar listos cuando se abra el gráfico. ¿No es así?
Oh, cuántos descubrimientos maravillosos nos esperan... más
Bueno, si se abre un gráfico y se crea un indicador para el TF actual, los datos ya deberían estar listos cuando se abra el gráfico. ¿No es así?
No lo he expresado correctamente. Las barras son sí - lo más probable es que estén listas. Pero no hay garantía de que el indicador haya sido recalculado para todas estas barras en la primera llamada de OnCalculate, cuando prev_calculated == 0.
Se puede ejecutar un indicador de este tipo para asegurarse de ello.
Pero debe hacerse cuando se negocian las cotizaciones. Si el mercado está cerrado, no verá el desajuste.
Así que es mejor probarlo en la criptomoneda, que está en movimiento, en el fin de semana.
Si el tamaño de la matriz del Buffer = -1, significa que el buffer del indicador no se ha recalculado todavía y el valor de la BS no será correcto.
Si lo hace en la siguiente llamada de OnCalculate (cuando prev_calculated>0) entonces no habrá tal problema.
SOM hubo un error en el código - lo arreglé
Oh, qué maravillosos descubrimientos nos esperan... más
Me refiero a los datos para calcular el indicador. No seas sarcástico))))