Problema con señal entregada por indicador: abre y cierra varias posiciones en 1 segundo.

 

Hola a todos!

Estoy desarrollando un sistema tendencial que abre una posición dependiendo de la señal que reciba. Resulta que estoy tratando de incorporar un indicador que funcione como indicador de salida (o sea que cuando emita la señal, se supone que la tendencia ha terminado, por lo que se cierra la posición), pero resulta que hay veces en que señal de salida esta activa al mismo tiempo que un setup valido.

Ej: se activan las señales para comprar (o sea, tendencia alcista) y la señal de fin de tendencia alcista esta activada, luego se cierra la posición y se abre nuevamente en una misma vela infinitas veces.


Adjunto la parte del código para que vean si pueden echarme una mano.

if(tradesOpen>0)
     {
      string auxCheckTradeType=checkTradeType(); //looks for the actual trade type
      
      
      checkForExit(auxCheckTradeType);
        
      ZeroMemory(lastTick);
      SymbolInfoTick(Symbol(),lastTick);
      if((auxCheckTradeType=="buy" && lastTick.bid>=takeProfit) || (auxCheckTradeType=="sell" && lastTick.ask<=takeProfit)) trailing(auxCheckTradeType);

     }
   else
     {
      takeProfit=0;
      firstCall=true;
      
         if(volume()==0 || DV2()==0 || Spread>spread)
           {
            return;
           }
         if(DSP()==1 && iT()==1) //buy
           {
            openTrade(1);
           }

         if(DSP()==-1 && iT()==-1) //sell
           {
            openTrade(-1);
           }
     }


//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void checkForExit(string type)
  {
   CopyBuffer(rviHandle,0,0,3,rviMainBuff);     //if long and main<signal=>exit
   CopyBuffer(rviHandle,1,0,3,rviSignalBuff);   //if short and main>signal =>exit

   if((type=="buy" && rviMainBuff[0]<rviSignalBuff[0]) || (type=="sell" && rviMainBuff[0]>rviSignalBuff[0]))
     {
      for(int i=PositionsTotal()-1;i>=0;i--)
        {
         if(mposition.SelectByIndex(i))
           {
            if(mposition.Symbol()==Symbol() && mposition.Magic()==Magic)
              {
               mtrade.PositionClose(mposition.Ticket(),Slippage);
              }
           }
        }
     }
  }

Saludos y gracias!

 

creo que debes de comprobar el numero magico.

que no tenga el mismo valor el la variable en las  condiciones de entrada y las condiciones de salida y en la operaciones,creo que puede ser eso,un saludo

 
Luigi Salvatores Buigues Morillo:

creo que debes de comprobar el numero magico.

que no tenga el mismo valor el la variable en las  condiciones de entrada y las condiciones de salida y en la operaciones,creo que puede ser eso,un saludo

Hola, buenas. El número mágico es un input, así que no tiene los mismos valores de las variables de entrada. (de hecho, el número mágico tiene otra función)

Gracias de todas formas! 
Razón de la queja: