ERRO NO CRUZAMENTO DE 2 MÉDIAS

 

Estou programando um robo cujo critério de entrada é baseado no cruzamente de 2 médias móveis, mas diferente da grande maioria dos robos que possuem este parametro de entrada, gostaria que a ordem de compra/venda fosse ativada no exato momento em que as médias plotadas se cruzem.

Estou utilizando a função isnewbar para que ele não execute a logica caso pegue o take profit no mesmo candle, porém com isso ele está esperando fechar o candle assim que cruzar a media para entrar e precisaria que entrasse assim que ela se cruzassem.

O resultado é que assim que as médias se cruzam, de fato ele entra na operação, mas caso o take profit seja atingido no mesmo candle em que a operação é aberta, abre-se uma nova ordem, e eu gostaria que isto não acontecesse.

Alguem teria uma solução para me ajudar nesta questão em específico?

Obrigado

Att. Levi Fonseca

 
levifonseca:


Boa tarde.


Você pode, por exemplo, guardar a hora do candle em variável global sempre que abrir uma posição. Então, sempre que for abrir nova posição, verifica se hora do candle diferente da variável, se for igual não abre:

//--- Variável global
datetime LastTradeTime = 0;

//--- Antes de abrir verifica:
if(LastTradeTime == iTime(NULL, PERIOD_CURRENT, 0))
  {
   //--- não abre...
  }

//--- Se abrir posição, guarda horário...
if(!OrderSend(Request, Result))
  {Print(Symbol(), " Error ", GetLastError()); return;}
else
  {LastTradeTime = iTime(NULL, PERIOD_CURRENT, 0);}
Razão: