Prueba este ejemplo primitivo. Comprenderá la "singularidad" al cambiar el TF.
En este ejemplo, en OnInit se crea un objeto con las coordenadas de la hora y el precio actuales. En OnCalculate este objeto se mueve junto con el precio.
En OnDeinit simplemente se elimina (lógicamente).
Al cambiar el TF, resulta que el objeto aparece y luego desaparece. ¿Por qué ocurre esto? Porque a veces OnDeinit del TF antiguo borra lo que ya se ha creado en OnInit del nuevo TF. No es un error. ¿Qué debe pensar el programador que creó este ejemplo y no leyó esta rama?
¿Qué sentido tiene utilizar un ejemplo primitivo de un colegiado?
Utiliza un ejemplo de código MUY correcto en su lugar.
//+------------------------------------------------------------------+//| ProjectName |//| Copyright 2012, CompanyName |//| http://www.companyname.net |//+------------------------------------------------------------------+#property copyright"Copyright 2016, MetaQuotes Software Corp."#property link"https://www.mql5.com"#property version"1.00"#property indicator_chart_window#property indicator_plots0//+------------------------------------------------------------------+//| |//+------------------------------------------------------------------+intOnInit()
{
datetime t = TimeCurrent();
double pr = SymbolInfoDouble(Symbol(),SYMBOL_BID);
if(ObjectFind(0, "InitDeinit") < 0) // ПРОВЕРКА СУЩЕСТВОВАНИЯ ОБЪЕКТА ПЕРЕД ЕГО СОЗДАНИЕМ ОБЯЗАТЕЛЬНА!!!
{
ObjectCreate(0,"InitDeinit",OBJ_ARROW_THUMB_UP,0,t,pr);
Print(__FUNCTION__, " создан InitDeinit");
}
ObjectSetInteger(0,"InitDeinit",OBJPROP_WIDTH,50);
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+//| |//+------------------------------------------------------------------+voidOnDeinit(constint reason)
{
if(UninitializeReason() != REASON_CHARTCHANGE) // ПРОВЕРКА ПРИЧИНЫ ДЕИНИЦИАЛИЗАЦИИ РЕШАЕТ ТВОЮ ПРОБЛЕМУ НА РАЗ...
{
ObjectDelete(0,"InitDeinit");
ChartRedraw(0); // ЭТО НУЖНО ТОЛЬКО НА ВЫХОДНЫЕ. В РАБОЧИЕ ДНИ НЕ БУДЕТ ЛИШНИМ, НО С ПРИХОДОМ НОВОГО ТИКА ОБЪЕКТ БУДЕТ НЕДОСТУПЕН.
Print(__FUNCTION__, " InitDeinit удалён");
}
}
//+------------------------------------------------------------------+//| |//+------------------------------------------------------------------+intOnCalculate (constint rates_total, // размер массива price[]constint prev_calculated, // обработано баров на предыдущем вызовеconstint begin, // откуда начинаются значимые данныеconstdouble& price[]) // массив для расчета
{
datetime t = TimeCurrent();
double pr = SymbolInfoDouble(Symbol(),SYMBOL_BID);
ObjectMove(0,"InitDeinit",0,t,pr);
return(rates_total);
}
//+------------------------------------------------------------------+
Mejor utilizar un ejemplo de código prácticamente correcto.
Es lo mismo. El objeto puede ser eliminado a través de Deinit de la copia del indicador irrelevante. Y el OnInit del actual se realiza ANTES de este evento.
Pero es mucho mejor mostrar la transferencia de cualquier información desde OnDeinit de la copia antigua a OnInit de la nueva. En realidad, esta es la cuestión.
fxsaber: Esto es lo mismo. El objeto puede ser eliminado a través de Deinit de la copia del indicador irrelevante. Y el OnInit del actual se realiza ANTES de este evento.
if(UninitializeReason() != REASON_CHARTCHANGE)
{
// Если причина деинициализации смена периода графика сюда не попадаем и объекты не удаляются.
}
En todos los demás casos, excepto cuando se desenchufe el ordenador, el objeto se borrará.
En todos los demás casos, excepto cuando se desenchufe el ordenador, el objeto se borrará.
Has demostrado una solución a un problema de discusión privada. La general se formula como sigue
fxsaber:
Pasar de forma fiablecualquier información de OnDeinit de la copia antigua a OnInit de la copia nueva.
Lo que, en consecuencia, requiere una clara secuencia de ejecución OnDeinit/OnInit. Nunca he necesitado esto, pero he aplicado la idea de la solución sin ningún problema.
fxsaber: Has demostrado la solución a un problema de discusión privada. Una general puede formularse como sigue
Lo que, en consecuencia, requiere una clara secuencia de ejecución OnDeinit/OnInit. Nunca lo he necesitado, pero he aplicado la idea de la solución sin ningún problema.
Bueno, no estoy en contra. Pero rascarme la oreja derecha con el dedo meñique izquierdo no es lo mío. En lugar de una prueba tan simple para escribir"eso"... Ni siquiera sé cómo llamarlo. Que sea para el aficionado, porque el masoquismo tiene derecho a existir. Con todo el respeto a su profesionalidad en la programación.
fxsaber: Así que no has entendido la esencia del problema que se discute en este hilo.
Lo entiendo, pero has trasladado la discusión del problema a tus capacidades (no pequeñas).
Y después de todo mi respuesta fue a un ejemplo específico de un código de un potro, y no en respuesta a sus habilidades y un ejemplo de transferencia de datos con la regulación de la secuencia de ejecución On_Init y On_Deinit.
¿Cuál es el objetivo de continuar el diálogo? ¿Intentas convencerme de que rascarse la oreja derecha con el dedo meñique izquierdo es muy agradable? ¿O de otra manera?
El ejemplo que has rehecho no se ajustaba perfectamente al problema que estabas comentando. Podrías mostrar otro ejemplo que no tuviera solución a través deUninitializeReason.
En principio, se podría hacer con una sola línea.
¿Dónde es inequívoco?
Prueba este ejemplo primitivo. Comprenderá la "singularidad" al cambiar el TF.
En este ejemplo, en OnInit se crea un objeto con las coordenadas de la hora y el precio actuales. En OnCalculate este objeto se mueve junto con el precio.
En OnDeinit simplemente se elimina (lógicamente).
Al cambiar el TF, resulta que el objeto aparece y luego desaparece.
¿Por qué ocurre esto?
Porque a veces OnDeinit del TF antiguo borra lo que ya se ha creado en OnInit del nuevo TF. No es un error. ¿Qué debe pensar el programador que creó este ejemplo y no leyó esta rama?
¿Qué sentido tiene utilizar un ejemplo primitivo de un colegiado?
Utiliza un ejemplo de código MUY correcto en su lugar.
Mejor utilizar un ejemplo de código prácticamente correcto.
Es lo mismo. El objeto puede ser eliminado a través de Deinit de la copia del indicador irrelevante. Y el OnInit del actual se realiza ANTES de este evento.
Pero es mucho mejor mostrar la transferencia de cualquier información desde OnDeinit de la copia antigua a OnInit de la nueva. En realidad, esta es la cuestión.
Esto es lo mismo. El objeto puede ser eliminado a través de Deinit de la copia del indicador irrelevante. Y el OnInit del actual se realiza ANTES de este evento.
En todos los demás casos, excepto cuando se desenchufe el ordenador, el objeto se borrará.
Pero es mucho mejor mostrar el paso de cualquier información desde OnDeinit de la copia antigua a OnInit de la nueva. De hecho, esta es la cuestión.
En todos los demás casos, excepto cuando se desenchufe el ordenador, el objeto se borrará.
Pasar de forma fiablecualquier información de OnDeinit de la copia antigua a OnInit de la copia nueva.
Lo que, en consecuencia, requiere una clara secuencia de ejecución OnDeinit/OnInit. Nunca he necesitado esto, pero he aplicado la idea de la solución sin ningún problema.
Has demostrado la solución a un problema de discusión privada. Una general puede formularse como sigue
Lo que, en consecuencia, requiere una clara secuencia de ejecución OnDeinit/OnInit. Nunca lo he necesitado, pero he aplicado la idea de la solución sin ningún problema.
Bueno, no estoy en contra. Pero rascarme la oreja derecha con el dedo meñique izquierdo no es lo mío. En lugar de una prueba tan simple para escribir"eso"... Ni siquiera sé cómo llamarlo. Que sea para el aficionado, porque el masoquismo tiene derecho a existir. Con todo el respeto a su profesionalidad en la programación.
En lugar de un cheque tan simple, escribe"eso"...
Así que no has entendido la esencia del problema que se discute en este hilo.
Lo entiendo, pero has trasladado la discusión del problema a tus capacidades (no pequeñas).
Y después de todo mi respuesta fue a un ejemplo específico de un código de un potro, y no en respuesta a sus habilidades y un ejemplo de transferencia de datos con la regulación de la secuencia de ejecución On_Init y On_Deinit.
¿Cuál es el objetivo de continuar el diálogo? ¿Intentas convencerme de que rascarse la oreja derecha con el dedo meñique izquierdo es muy agradable? ¿O de otra manera?
¿O es un objetivo diferente?