Experimente este exemplo primitivo. Você entenderá a "singularidade" ao trocar o TF.
Neste exemplo, um objeto com coordenadas de tempo e preço atuais é criado no OnInit. Na OnCalculate, este objeto se move junto com o preço.
No OnDeinit, ele é simplesmente (logicamente) removido.
Quando você troca o TF, acontece que o objeto aparece e depois desaparece. Por que isso acontece? Porque às vezes o OnDeinit da antiga TF elimina o que já foi criado no OnInit da nova TF. Não é um bug! O que deve pensar o programador que criou este exemplo e não leu este ramo?
De que serve usar um exemplo primitivo de colegiado?
Use um exemplo do código MUITO correto em seu 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);
}
//+------------------------------------------------------------------+
É melhor usar um exemplo de código virtualmente correto.
É a mesma coisa. O objeto pode ser excluído através do Deinit da cópia indicadora irrelevante. E ANTES deste evento é realizado o OnInit do evento propriamente dito.
Mas é muito melhor mostrar a transferência de qualquer informação do OnDeinit da cópia antiga para o OnInit da nova. Na verdade, esta é a questão.
fxsaber: Isto é o mesmo. O objeto pode ser excluído através do Deinit da cópia indicadora irrelevante. E ANTES deste evento é realizado o OnInit do evento propriamente dito.
if(UninitializeReason() != REASON_CHARTCHANGE)
{
// Если причина деинициализации смена периода графика сюда не попадаем и объекты не удаляются.
}
Em todos os outros casos, exceto para puxar a tomada do computador, o objeto será apagado.
Em todos os outros casos, exceto para puxar a tomada do computador, o objeto será apagado.
Você demonstrou uma solução para um problema de discussão privada. A geral é formulada da seguinte forma
fxsaber:
Passe com confiançaqualquer informação do OnDeinit da cópia antiga para o OnInit da nova cópia.
O que, consequentemente, requer uma seqüência clara de execução OnDeinit/OnInit. Nunca precisei disto, mas implementei a idéia da solução sem nenhum problema.
fxsaber: Você demonstrou a solução para um problema de discussão privada. Um geral pode ser formulado da seguinte forma
O que, consequentemente, requer uma seqüência clara de execução OnDeinit/OnInit. Nunca precisei disto, mas implementei a idéia da solução sem nenhum problema.
Bem, eu não sou contra isso. Mas arranhar minha orelha direita com meu dedo mindinho esquerdo não é para mim. Em vez de um teste tão simples para escrever"isto" ... Eu nem sei como chamá-lo. Que seja para o amador, porque o masoquismo tem o direito de existir. Com o devido respeito ao seu profissionalismo na programação.
fxsaber: Portanto, você não entendeu a essência do problema discutido neste tópico.
Compreendo, mas você transferiu a discussão do problema para suas habilidades (não pequenas).
E afinal minha resposta foi a um exemplo específico de um código de um potro, e não em resposta a suas habilidades e um exemplo de transferência de dados com regulamento de seqüência de execução On_Init e On_Deinit.
Qual é o propósito de continuar o diálogo? Você está tentando me convencer de que coçar a orelha direita com o dedo mindinho esquerdo é muito agradável? Ou outro propósito?
O exemplo que você refez não correspondeu perfeitamente ao problema que você estava discutindo. Você poderia mostrar outro exemplo que não teria uma solução através daUninicializeReason.
Para login e uso do site MQL5.com, você deve ativar o uso de cookies.
Ative esta opção no seu navegador, caso contrário você não poderá fazer login.
Você entrou na conta. A autenticação de dois fatores foi desativada. Configure-a novamente e escaneie um novo código QR ou continue com a autenticação de dois fatores desativada.
Em princípio, você poderia fazer com uma única linha.
Onde é inequívoco?
Experimente este exemplo primitivo. Você entenderá a "singularidade" ao trocar o TF.
Neste exemplo, um objeto com coordenadas de tempo e preço atuais é criado no OnInit. Na OnCalculate, este objeto se move junto com o preço.
No OnDeinit, ele é simplesmente (logicamente) removido.
Quando você troca o TF, acontece que o objeto aparece e depois desaparece.
Por que isso acontece?
Porque às vezes o OnDeinit da antiga TF elimina o que já foi criado no OnInit da nova TF. Não é um bug! O que deve pensar o programador que criou este exemplo e não leu este ramo?
De que serve usar um exemplo primitivo de colegiado?
Use um exemplo do código MUITO correto em seu lugar.
É melhor usar um exemplo de código virtualmente correto.
É a mesma coisa. O objeto pode ser excluído através do Deinit da cópia indicadora irrelevante. E ANTES deste evento é realizado o OnInit do evento propriamente dito.
Mas é muito melhor mostrar a transferência de qualquer informação do OnDeinit da cópia antiga para o OnInit da nova. Na verdade, esta é a questão.
Isto é o mesmo. O objeto pode ser excluído através do Deinit da cópia indicadora irrelevante. E ANTES deste evento é realizado o OnInit do evento propriamente dito.
Em todos os outros casos, exceto para puxar a tomada do computador, o objeto será apagado.
Mas é muito melhor mostrar a passagem de qualquer informação do OnDeinit da cópia antiga para o OnInit da nova. Este é na verdade o ponto.
Em todos os outros casos, exceto para puxar a tomada do computador, o objeto será apagado.
Passe com confiançaqualquer informação do OnDeinit da cópia antiga para o OnInit da nova cópia.
O que, consequentemente, requer uma seqüência clara de execução OnDeinit/OnInit. Nunca precisei disto, mas implementei a idéia da solução sem nenhum problema.
Você demonstrou a solução para um problema de discussão privada. Um geral pode ser formulado da seguinte forma
O que, consequentemente, requer uma seqüência clara de execução OnDeinit/OnInit. Nunca precisei disto, mas implementei a idéia da solução sem nenhum problema.
Bem, eu não sou contra isso. Mas arranhar minha orelha direita com meu dedo mindinho esquerdo não é para mim. Em vez de um teste tão simples para escrever"isto" ... Eu nem sei como chamá-lo. Que seja para o amador, porque o masoquismo tem o direito de existir. Com o devido respeito ao seu profissionalismo na programação.
Em vez de um cheque tão simples, escreva"it"...
Portanto, você não entendeu a essência do problema discutido neste tópico.
Compreendo, mas você transferiu a discussão do problema para suas habilidades (não pequenas).
E afinal minha resposta foi a um exemplo específico de um código de um potro, e não em resposta a suas habilidades e um exemplo de transferência de dados com regulamento de seqüência de execução On_Init e On_Deinit.
Qual é o propósito de continuar o diálogo? Você está tentando me convencer de que coçar a orelha direita com o dedo mindinho esquerdo é muito agradável? Ou outro propósito?
Ou é um alvo diferente?