Obtener distancia entre 2 órdenes

 

Hola a todos, tengo el inconveniente que necesito calcular la distancia entre  las dos ultimas operaciones abiertas, y logro hacerlo para las operaciones en corto, sin embargo para las operaciones en largo no me lo hace.  Le he dado vueltas al cálculo y no encuentro el error, me pueden ayudar por favor?


Este es el código:

         int os0   = 0,
             type0 = 0,
             os1   = 0,
             type1 = 0,
             ticket= 0;
             
         double oop0  = 0,
                olt0  = 0,
                oop1  = 0,
                prof0 = 0,
                mtdis = 2;
         
         for(int a=0; a<OrdersTotal(); a++)  //obtener los datos de la última operación abierta.
            {
             os0   = OrderSelect(a,SELECT_BY_POS,MODE_TRADES);
             type0 = OrderType();
             prof0 = OrderProfit();
             oop0  = OrderOpenPrice();
             olt0  = OrderLots();
             ticket= OrderTicket();
            } //Cierre de "for" "a".
       
         for(int b=0; b<OrdersTotal()-1; b++)  //obtener los datos de la penúltima operación abierta.
            {
             os1  = OrderSelect(b,SELECT_BY_POS,MODE_TRADES);
             oop1 = OrderOpenPrice();
            } //Cierre de "for" "b".
                  
         if (OrdersTotal()>1)   //calcular la distancia para las siguientes operaciones de la grilla.
            {             
             double ndb = NormalizeDouble(oop0-((oop1-00p0)*mtdis),5), //calcula distancia hacia siguiente operación en compra. <<<ES EN ESTA LINEA DONDE TENGO PROBLEMA.
                    nds = NormalizeDouble(oop0+((oop0-oop1)*mtdis),5); //calcula distancia hacia siguiente operación de venta.
            }

En específico lo que necesito calcular es el "ndb" que es la distancia entre las últimas operaciones abiertas.  Sé que algo estoy haciendo mal, por eso pido su ayuda.

Espero puedan ayudarme por favor.

Saludos.

 
Angel Antonio Martinez Velasquez:

Hola a todos, tengo el inconveniente que necesito calcular la distancia entre  las dos ultimas operaciones abiertas, y logro hacerlo para las operaciones en corto, sin embargo para las operaciones en largo no me lo hace.  Le he dado vueltas al cálculo y no encuentro el error, me pueden ayudar por favor?


Este es el código:

En específico lo que necesito calcular es el "ndb" que es la distancia entre las últimas operaciones abiertas.  Sé que algo estoy haciendo mal, por eso pido su ayuda.

Espero puedan ayudarme por favor.

Saludos.

Quizas esto te ayude:

void OnTick()
  {
//---
  Print( DIFERENCIA(0)); //para Compras
  Print( DIFERENCIA(1)); //para ventas

  }
//+------------------------------------------------------------------+
double DIFERENCIA(int typoOrden)
  {
   double resuladoDiferencia=0;
   int ticketUltima=0;
   int ticketPenultima=0;
   double precioUltima=0;
   double precioPenultima=0;

   datetime timeUltimaEntrada=0;
   datetime timePenultimaEntrada=0;


//Ciclo para encontar la ultima
   for(int i=0; i<OrdersTotal(); i++)
     {
      if(!OrderSelect(i,SELECT_BY_POS,MODE_TRADES))continue;
      if(OrderType()==typoOrden && OrderSymbol()==Symbol() && OrderMagicNumber()== ElNumeroMagicodelaEstrategia)
        {
         if(OrderOpenTime()>timeUltimaEntrada)
           {
            timeUltimaEntrada=OrderOpenTime();
            ticketUltima=OrderTicket();
            precioUltima=OrderOpenPrice();
           }
        }
     }

//Ciclo para encontar la penultima
   for(int i=0; i<OrdersTotal(); i++)
     {
      if(!OrderSelect(i,SELECT_BY_POS,MODE_TRADES))continue;
      if(OrderType()==typoOrden && OrderSymbol()==Symbol() && OrderMagicNumber()== ElNumeroMagicodelaEstrategia && OrderTicket()!=ticketUltima)
        {
         if(OrderOpenTime()>timePenultimaEntrada)
           {
            timePenultimaEntrada=OrderOpenTime();
            ticketPenultima=OrderTicket();
            precioPenultima=OrderOpenPrice();
           }
        }
     }

   if(precioUltima!=0 && precioPenultima!=0)
     {
      resuladoDiferencia=MathMax(precioUltima,precioPenultima)-MathMin(precioUltima,precioPenultima); // resultado en precio,
     }
   else resuladoDiferencia=0; // cero es igual a que solo hay una orden activa, o que no hay ninguna 
   return resuladoDiferencia;
  }
//+------------------------------------------------------------------+




Espero que te de alguna idea y ayude a encontrar la solucion. 
Saludos!!!

 
Miguel Antonio Rojas Martinez:

Quizas esto te ayude:




Espero que te de alguna idea y ayude a encontrar la solucion. 
Saludos!!!

Muchas gracias!


Lo voy a revisar.


Saludos

 

Listo!

Me ayudaste mucho, me dio nuevas ideas y encontré dónde tenía el error, muchísimas gracias!!!