Essayez cet exemple primitif. Vous comprendrez le caractère "unique" en changeant de TF.
Dans cet exemple, un objet avec les coordonnées de l'heure et du prix actuels est créé dans OnInit. Dans OnCalculate, cet objet se déplace en même temps que le prix.
Dans OnDeinit, il est simplement (logiquement) supprimé.
Lorsque l'on change de TF, il s'avère que l'objet apparaît puis disparaît. Pourquoi cela se produit-il ? Parce que parfois OnDeinit de l'ancienne TF supprime ce qui a déjà été créé dans OnInit de la nouvelle TF. Ce n'est pas un bug ! Que doit penser le programmeur qui a créé cet exemple et qui n'a pas lu cette branche ?
Quel est l'intérêt d'utiliser un exemple primitif de collégien ?
Utilisez plutôt un exemple de code TRÈS correct.
//+------------------------------------------------------------------+//| 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);
}
//+------------------------------------------------------------------+
Mieux vaut utiliser un exemple de code virtuellement correct.
C'est la même chose. L'objet peut être supprimé via Deinit de la copie de l'indicateur non pertinent. Et le OnInit de l'actuel est effectué AVANT cet événement.
Mais il est bien mieux de montrer le transfert de toute information de OnDeinit de l'ancienne copie à OnInit de la nouvelle. En fait, c'est le but.
fxsaber: C'est la même chose. L'objet peut être supprimé via Deinit de la copie de l'indicateur non pertinent. Et le OnInit de l'actuel est effectué AVANT cet événement.
if(UninitializeReason() != REASON_CHARTCHANGE)
{
// Если причина деинициализации смена периода графика сюда не попадаем и объекты не удаляются.
}
Dans tous les autres cas, à l'exception du débranchement de l'ordinateur, l'objet sera supprimé.
Dans tous les autres cas, à l'exception du débranchement de l'ordinateur, l'objet sera supprimé.
Vous avez démontré une solution à un problème de discussion privée. La version générale est formulée comme suit
fxsaber:
Passez de manière fiabletoute information de OnDeinit de l'ancienne copie à OnInit de la nouvelle copie.
Ce qui, par conséquent, nécessite une séquence d'exécution OnDeinit/OnInit claire. Je n'en ai jamais eu besoin, mais j'ai mis en œuvre l'idée de la solution sans aucun problème.
fxsaber: Vous avez démontré la solution à un problème de discussion privée. Une formule générale peut être formulée comme suit
Ce qui, par conséquent, nécessite une séquence d'exécution OnDeinit/OnInit claire. Je n'en ai jamais eu besoin, mais j'ai mis en œuvre l'idée de la solution sans aucun problème.
Eh bien, je ne suis pas contre. Mais me gratter l'oreille droite avec mon petit doigt gauche n'est pas pour moi. Au lieu d'un test aussi simple pour écrire"il"... Je ne sais même pas comment l'appeler. Que ce soit pour l'amateur, car le masochisme a le droit d'exister. Avec tout le respect dû à votre professionnalisme en matière de programmation.
fxsaber: Vous n'avez donc pas compris l'essence du problème discuté dans ce fil.
Je comprends, mais vous avez transféré la discussion du problème à vos capacités (pas petites).
Et après tout ma réponse était à un exemple spécifique d'un code d'un colt, et non en réponse à vos capacités et un exemple de transfert de données avec régulation de la séquence d'exécution On_Init et On_Deinit.
Quel est l'objectif de la poursuite du dialogue ? Essayez-vous de me convaincre que se gratter l'oreille droite avec le petit doigt gauche est très agréable ? Ou un autre but ?
L'exemple que vous avez refait ne correspondait pas parfaitement au problème dont vous parliez. Vous pourriez montrer un autre exemple qui n'aurait pas de solution à traversUninitializeReason.
En principe, vous pourriez vous contenter d'une seule ligne.
Où est-ce sans ambiguïté ?
Essayez cet exemple primitif. Vous comprendrez le caractère "unique" en changeant de TF.
Dans cet exemple, un objet avec les coordonnées de l'heure et du prix actuels est créé dans OnInit. Dans OnCalculate, cet objet se déplace en même temps que le prix.
Dans OnDeinit, il est simplement (logiquement) supprimé.
Lorsque l'on change de TF, il s'avère que l'objet apparaît puis disparaît.
Pourquoi cela se produit-il ?
Parce que parfois OnDeinit de l'ancienne TF supprime ce qui a déjà été créé dans OnInit de la nouvelle TF. Ce n'est pas un bug ! Que doit penser le programmeur qui a créé cet exemple et qui n'a pas lu cette branche ?
Quel est l'intérêt d'utiliser un exemple primitif de collégien ?
Utilisez plutôt un exemple de code TRÈS correct.
Mieux vaut utiliser un exemple de code virtuellement correct.
C'est la même chose. L'objet peut être supprimé via Deinit de la copie de l'indicateur non pertinent. Et le OnInit de l'actuel est effectué AVANT cet événement.
Mais il est bien mieux de montrer le transfert de toute information de OnDeinit de l'ancienne copie à OnInit de la nouvelle. En fait, c'est le but.
C'est la même chose. L'objet peut être supprimé via Deinit de la copie de l'indicateur non pertinent. Et le OnInit de l'actuel est effectué AVANT cet événement.
Dans tous les autres cas, à l'exception du débranchement de l'ordinateur, l'objet sera supprimé.
Mais il est bien mieux d'éviter de passer toute information de OnDeinit de l'ancienne copie à OnInit de la nouvelle. C'est d'ailleurs le but.
Dans tous les autres cas, à l'exception du débranchement de l'ordinateur, l'objet sera supprimé.
Passez de manière fiabletoute information de OnDeinit de l'ancienne copie à OnInit de la nouvelle copie.
Ce qui, par conséquent, nécessite une séquence d'exécution OnDeinit/OnInit claire. Je n'en ai jamais eu besoin, mais j'ai mis en œuvre l'idée de la solution sans aucun problème.
Vous avez démontré la solution à un problème de discussion privée. Une formule générale peut être formulée comme suit
Ce qui, par conséquent, nécessite une séquence d'exécution OnDeinit/OnInit claire. Je n'en ai jamais eu besoin, mais j'ai mis en œuvre l'idée de la solution sans aucun problème.
Eh bien, je ne suis pas contre. Mais me gratter l'oreille droite avec mon petit doigt gauche n'est pas pour moi. Au lieu d'un test aussi simple pour écrire"il"... Je ne sais même pas comment l'appeler. Que ce soit pour l'amateur, car le masochisme a le droit d'exister. Avec tout le respect dû à votre professionnalisme en matière de programmation.
Au lieu d'un chèque aussi simple, écrivez"ça" ...
Vous n'avez donc pas compris l'essence du problème discuté dans ce fil.
Je comprends, mais vous avez transféré la discussion du problème à vos capacités (pas petites).
Et après tout ma réponse était à un exemple spécifique d'un code d'un colt, et non en réponse à vos capacités et un exemple de transfert de données avec régulation de la séquence d'exécution On_Init et On_Deinit.
Quel est l'objectif de la poursuite du dialogue ? Essayez-vous de me convaincre que se gratter l'oreille droite avec le petit doigt gauche est très agréable ? Ou un autre but ?
Ou est-ce une autre cible ?