mql5 - linha vertical depois de um certo tempo desde o último comércio - página 4

 
renatmt5:
A propósito, há outra coisa sobre a proteção que você acrescentou. Como tenho um atraso de 1-2 minutos antes de calcular o valor correto, durante o qual as variáveis são iguais a zero, troco o cronograma atual para outro de atualização rápida - os valores são imediatamente recalculados. Provavelmente, é possível fazer alguma muleta de software com base neste princípio?

Eu odeio a palavra "muleta".


Já pensei em tudo de antemão e é muito bom que você tenha perguntado. Precisamos transformar o LastProfitForPeriod de vazio em bool. Se houver um erro - por exemplo, a data não é encontrada ou algo mais, retornamos falsos e assim por diante.

Assim, não haverá perda de minutos.

 

Se você receber "falso", reinicie o tempo:

   double profit_last_day=0.0,profit_last_deal=0.0;
   if(!LastProfitForPeriod(profit_last_day,profit_last_deal))
     {
      ExtLastMove=0;
      return(rates_total);
     }

   Comment("Profit last day: ",DoubleToString(profit_last_day,2),"\n",
           "Profit last deal: ",DoubleToString(profit_last_deal,2));


Versão 1.003

Arquivos anexados:
 
Vladimir Karputov:

Eu odeio a palavra "muleta".


Já pensei em tudo de antemão e é muito bom que você tenha perguntado. Precisamos transformar o LastProfitForPeriod de vazio em bool. Se houver um erro - por exemplo, a data não é encontrada ou algo mais, retornamos falsos e assim por diante.

Assim, não haverá perda de minutos.

Sobre "muleta" - sim, há uma atitude descuidada com a programação nesta palavra :)

Sim, o efeito do minuto perdido desapareceu na v.3 do roteiro.

 
renatmt5:

Quanto à "muleta" - sim, há uma atitude descuidada com a programação nessa palavra :)

Sim, o efeito do minuto perdido desapareceu na v.3 do roteiro.

É um indicador:)

 
Vladimir Karputov:

É um indicador:)

Sim, isso mesmo - ainda ficando confuso.

 

Acrescentei um bloco para calcular a compensação de tempo em relação ao fechamento da última transação. Ao tentar usar o último_tempo e n para o offset de linha mais tarde, recebo um erro de tempo de compilação :(

.....

                    {

                     last_time=deal_time;

                     profit_last_deal=full_profit;

                    }

                 }

        }

     }

//-------------//     

// MY CODE     //   

//-------------//

if (profit_last_day<=0 && profit_last_deal<=0){uint n=60*60*24;}

else if (profit_last_day>0 && profit_last_deal<=0){uint n=60*60*2;}

else {uint n=60*60*1;}

//-------------//     

// MY CODE END //   

//-------------//

   return(true);

  }

.......
 
De alguma forma, não estou inserindo o trecho de código corretamente :)
 
Ao criar o ObjectCreate (gráfico_ID,nome,OBJ_VLINE,sub_janela,tempo,0), preciso mudar o tempo de TimeCurrent() paralast_time com um deslocamento para o futuro por um período igual a n.
Ou talvez haja uma função que desloca um objeto para frente/para trás por um número especificado de barras? O que é melhor? Confesso que até agora meus esforços independentes foram mal sucedidos :(
 
renatmt5:
Ao criar o ObjectCreate (gráfico_ID,nome,OBJ_VLINE,sub_janela,tempo,0), quero alterar o valor do tempo para que não seja TimeCurrent(), mas sim oúltimo_tempo com uma compensação para o período igual a n.
Ou talvez haja uma função que desloca um objeto para frente/para trás por um número especificado de barras? O que é melhor? Confesso que até agora meus esforços independentes foram mal sucedidos :(

A linha é criada uma vez - no OnInit().

Depois só é movido -VLineMove

 

Entendo corretamente que preciso fazer mudanças na última linha do trecho do código (tempo=0 em particular)?

//+------------------------------------------------------------------+ 
//| Move the vertical line                                           | 
//+------------------------------------------------------------------+ 
bool VLineMove(const long   chart_ID=0,   // chart's ID 
               const string name="VLine", // line name 
               datetime     time=0)       // line time 


Ou VLineMove é uma função, que ainda precisa ser iniciada em algum lugar (por exemplo, em OnCalculate) e passar os parâmetros de entrada para ela?
Estou completamente confuso :)