Como impedir que seja feita operações no mesmo Candle de entrada /TP /STP?

 

Boa tarde, estou com um problema não estou conseguindo resolver, espero que alguém possa me ajudar.

A situação é a seguinte:


Preciso que seja feito apenas uma operação por candle, impedir que quando haja TP ou STP no candle a EA faça qualquer tipo de operação no mesmo.

Alguém com mais conhecimento que o meu pode me ajudar com isso, já estou a 15 dias tentando resolver.

 
reginaldo.franco:


Reginaldo,

cola o seu EA que eu coloco a função para você. 

Use Alt-S para colar.

 
reginaldo.franco:

Boa tarde, estou com um problema não estou conseguindo resolver, espero que alguém possa me ajudar.

A situação é a seguinte:


Preciso que seja feito apenas uma operação por candle, impedir que quando haja TP ou STP no candle a EA faça qualquer tipo de operação no mesmo.

Alguém com mais conhecimento que o meu pode me ajudar com isso, já estou a 15 dias tentando resolver.

Além da dica do @Rogerio Giannetti Torres, caso você opte em não postar seu código, pode pensar em uma lógica de criar uma variável que limite o número de Trades (maxtrades). A partir daí, com um simples "if" você resolve o problema.

[ ]´s

 

https://www.mql5.com/pt/docs/trading/positionstotal

https://www.mql5.com/pt/docs/trading/orderstotal


Declare duas variaveis do tipo int e receba o numero de ordens e posições abertas respectivamente.

int totalOrd = OrdersTotal();

int totalPos = PositionsTotal();

Documentação sobre MQL5: Funções de Negociação / PositionsTotal
Documentação sobre MQL5: Funções de Negociação / PositionsTotal
  • www.mql5.com
Funções de Negociação / PositionsTotal - Referência sobre algorítimo/automatização de negociação na linguagem para MetaTrader 5
 
O problema e quando a ordem é finalizada por um gain ou loss, o que eu preciso é que a EA não permita nesse candle onde atingiu o alvo que se faça outra negociação, tentei o OnTransation mais também sem sucesso.
 
reginaldo.franco:
O problema e quando a ordem é finalizada por um gain ou loss, o que eu preciso é que a EA não permita nesse candle onde atingiu o alvo que se faça outra negociação, tentei o OnTransation mais também sem sucesso.
bool isNewBar()
  {
//--- memorize the time of opening of the last bar in the static variable
   static datetime last_time=0;
//--- current time
   datetime lastbar_time=SeriesInfoInteger(Symbol(),Period(),SERIES_LASTBAR_DATE);

//--- if it is the first call of the function
   if(last_time==0)
     {
      //--- set the time and exit
      last_time=lastbar_time;
      return(false);
     }

//--- if the time differs
   if(last_time!=lastbar_time)
     {
      //--- memorize the time and return true
      last_time=lastbar_time;
      return(true);
     }
//--- if we passed to this line, then the bar is not new; return false
   return(false);
  }

Retirado do artigo: https://www.mql5.com/pt/articles/159

Handler de evento "nova barra"
Handler de evento "nova barra"
  • www.mql5.com
Os autores dos indicadores e especialistas sempre estiveram interessados em escrever o código compacto em termos de tempo de execução. Você pode resolver este problema a partir de diferentes ângulos. A partir deste amplo tópico neste artigo, cobriremos o problema, que aparentemente foi solucionado: verifique por uma nova barra. Este é um meio...
 
reginaldo.franco:
O problema e quando a ordem é finalizada por um gain ou loss, o que eu preciso é que a EA não permita nesse candle onde atingiu o alvo que se faça outra negociação, tentei o OnTransation mais também sem sucesso.

A dica que te passei resolve isso.

[ ]'s

 

Obrigado a todos, resolvi com uma solução não tão elaborada quanto queria que fosse mas porém funcional.


Solução:

int A; quando faço uma compra armazeno o Tempo em minutos nessa variável.

bool B; no evento OnTick pego o tempo a atual em minuto e comparo com o armazenado se forem igual atribuo e existir uma posição B=false se não B=true.

Quando faço os gerenciamentos de parciais recarrego A.


Um abraço a todos, Muito obrigado pelo empenho em ajudar!

 
reginaldo.franco:

Obrigado a todos, resolvi com uma solução não tão elaborada quanto queria que fosse mas porém funcional.


Solução:

int A; quando faço uma compra armazeno o Tempo em minutos nessa variável.

bool B; no evento OnTick pego o tempo a atual em minuto e comparo com o armazenado se forem igual atribuo e existir uma posição B=false se não B=true.

Quando faço os gerenciamentos de parciais recarrego A.


Um abraço a todos, Muito obrigado pelo empenho em ajudar!

Legal. Gosto de soluções funcionais! 

Sofisticação deixo para um segundo momento, tipo cereja do bolo...rs

[ ]´s

 
Estou com o mesmo problema que o reginaldo. Alguém?
 
Gediel Gediel:
Estou com o mesmo problema que o reginaldo. Alguém?

Foram colocadas sugestões acima de como resolver. Basta ler o que foi discutido.