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

 
renatmt5:
Entendi corretamente que o último_tempo e as variáveis de resultado são os valores que estamos procurando. O resultado determina por quanto tempo a linha será deslocada (redesenhada) para o futuro. Então o bloco de código "Lucro do período" deve ser colocado antes do bloco "Mover a linha vertical" para mover a linha levando em conta os dados obtidos no último negócio.
Isto é correto ou estou confundindo algo?

Estas são variáveis internas da função LastProfitForPeriod.

Queremos obter o valor do lucro do último negócio, certo? Aqui LastProfitForPeriod() nos dá o lucro do último negócio. Resta apenas mover a linha vertical em função destes lucros.

 
Vladimir Karputov:

Portanto, o toque final é mover a linha de acordo com o lucro obtido.

Você se lembra quais são as regras da mudança?

oops, desculpe - só para esclarecer:

- se o resultado da última negociação for negativo e o resultado do dia for negativo, a linha vertical é traçada 24 horas (24 horas) para o futuro.
- se o resultado da última transação for negativo e o resultado do dia for positivo, a linha vertical é traçada a uma distância de 2 horas para o futuro.
- se o resultado da última transação for positivo, a linha vertical é traçada a uma distância de 1 hora para o futuro.

 
Vladimir Karputov:

Aqui está uma explicação de porque o parâmetro "antes" precisa ser feito no futuro:


Obrigado!

 

Os termos exigem o resultado do dia em que a última transação foi feita (se houve várias transações naquele dia)

 
renatmt5:

Oops, desculpe - só para esclarecer:

- se o resultado da última negociação for negativo e o resultado do dia for negativo, a linha vertical é traçada 24 horas (um dia) para o futuro.
- se o resultado da última transação for negativo e o resultado do dia for positivo, a linha vertical é traçada a uma distância de 2 horas para o futuro.
- se o resultado da última transação for positivo, a linha vertical é traçada a uma distância de 1 hora para o futuro.

Ah, então também precisamos obter lucro para o dia atual separadamente.


Para fazer correções no LastProfitForPeriod() - removemos os parâmetros de tempo de entrada "de" e "para" e formamos estes parâmetros dentro da função: formamos a hora do início do dia (será "de"), e "para" obtemos a hora atual + dia.


Como resultado, passaremos dois parâmetros para LastProfitForPeriod() por referência: o lucro do dia e o lucro da última negociação.


O início do dia é obtido usandoo iTime

   datetime from_date=iTime(Symbol(),PERIOD_D1,0);

- ou seja, é a hora da abertura do bar diário atual.

Arquivos anexados:
 

Compilado - ótimo!
Há apenas alguns problemas:
1) Ao impor o indicador, o valor da variável Lucro último dia não é atribuído ao último dia da última operação, mas ao lucro final da conta em geral. Entretanto, ao recalcular o indicador (em cerca de 1-2 minutos) o valor muda para o correto (o lucro total do dia da última negociação). Eu só julgo pela conta onde a última negociação foi hoje.
2) Ao excluir o indicador do gráfico, o Comentário no canto superior esquerdo não é excluído. Ao limpar a lista de objetos, eles também não são excluídos. Eu reinicio o terminal para fazer desaparecer os valores, o que não é conveniente, é claro. Como facilitar - Não sei :)

Talvez fosse mais razoável colocar os blocos com o código de criação de linha, movimento de linha e eliminação de linha (Criar a linha vertical, Mover a linha vertical e Eliminar a linha vertical) após o bloco de cálculo do último negócio (Lucro para o período). Para traçar a linha levando em consideração a mudança no futuro em n horas, calculada com base no lucro_last_day e lucro_last_deal.

Como

if (profit_last_day<=0 e profit_last_deal<=0){n=24;}

else (profit_last_last_day>0 and profit_last_deal<=0){n=2;}

senão {n=1;}
//---
tempo = último_tempo + n;
//---
depois traçar a linha com um deslocamento no tempo em relação ao último comércio, usando o valor de tempo calculado...

 

A versão 1.002 introduz proteção: se o horário de abertura da barra do dia retorna "0" - então não é destino e nós saímos.

//+------------------------------------------------------------------+
//| Profit for the period                                            |
//+------------------------------------------------------------------+
void LastProfitForPeriod(double &profit_last_day,double &profit_last_deal)
  {
   datetime from_date=iTime(Symbol(),PERIOD_D1,0);
   if(from_date==D'1970.01.01 00:00')
      return;
   datetime to_date=TimeCurrent()+60*60*24;

   long last_time=0;


Agora não haverá solicitação para a vida útil da conta comercial.

Arquivos anexados:
 
Vladimir, muito obrigado mais uma vez por seu trabalho!
Vou tentar fazer o código eu mesmo, para não adoecer de consciência e prática :) Vou relatar os resultados, se houver algum
 
renatmt5:
Vladimir, muito obrigado mais uma vez por seu trabalho!
Vou tentar fazer o código eu mesmo, para não adoecer de consciência e prática :) Vou relatar os resultados, se houver algum

Bom.

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