Asesores Expertos: Cidomo

 

Cidomo:

Trabajo con órdenes pendientes (Buy Stop y Sell Stop).

Cidomo

Autor: Vladimir Karputov

 
¿Dónde está el ea

 
Habibur Rohman :
¿Dónde está el ea

El asesor no ha ido a ninguna parte. El asesor está en su sitio:


 

Quiero perfeccionar el Asesor Experto para mí, ¡pero para hacerlo necesito entender muchas cosas! (No entiendo muchas cosas). Voy a hacer preguntas por partes.

Hay un código:

   if(m_need_delete_buy_stop || m_need_delete_sell_stop)
     {
      int count_buy_stops=0,count_sell_stops=0;
      CalculateAllPendingOrders(count_buy_stops,count_sell_stops);

      if(m_need_delete_buy_stop)
        {
         if(count_buy_stops>0)
           {
            DeleteOrders(ORDER_TYPE_BUY_STOP);
            return;
           }
         else
           {
            m_need_delete_buy_stop=false;
            return;
           }
        }
      if(m_need_delete_sell_stop)
        {
         if(count_sell_stops>0)
           {
            DeleteOrders(ORDER_TYPE_SELL_STOP);
            return;
           }
         else
           {
            m_need_delete_sell_stop=false;
            return;
           }
        }
     }

¿Qué hace?

 
Sysmart:

Quiero perfeccionar el Asesor Experto para mí, ¡pero para hacerlo necesito entender muchas cosas! (No entiendo muchas cosas). Voy a hacer preguntas por partes.

Hay un código:

¿Qué hace?

Si se activa la bandera' m_need_delete_buy_stop' ('necesidad de borrar órdenes pendientes de stop de compra') o m_need_delete_sell_stop' ('necesidad de borrar órdenes pendientes de stop de venta')

   if(m_need_delete_buy_stop || m_need_delete_sell_stop)
     {

proceder a la eliminación.


Calculamos cuántas órdenes pendientes tiene el Asesor Experto en este momento:

      int count_buy_stops=0,count_sell_stops=0;
      CalculateAllPendingOrders(count_buy_stops,count_sell_stops);


Si 'es necesario borrar órdenes pendientes de stop de compra'

      if(m_need_delete_buy_stop)
        {
         if(count_buy_stops>0)
           {
            DeleteOrders(ORDER_TYPE_BUY_STOP);
            return;
           }
         else
           {
            m_need_delete_buy_stop=false;
            return;
           }
        }

y el número de órdenes stop de compra colocadas es mayor que cero ('count_buy_stops') - las borramos. Si el número es igual a cero - restablecer el'm_need_delete_buy_stop' bandera.


Hacemos lo mismo si 'es necesario borrar órdenes pendientes de stop de venta' ...

Совершение сделок - Торговые операции - Справка по MetaTrader 5
Совершение сделок - Торговые операции - Справка по MetaTrader 5
  • www.metatrader5.com
Торговая деятельность в платформе связана с формированием и отсылкой рыночных и отложенных ордеров для исполнения брокером, а также с управлением текущими позициями путем их модификации или закрытия. Платформа позволяет удобно просматривать торговую историю на счете, настраивать оповещения о событиях на рынке и многое другое. Открытие позиций...
 

Gracias.

Otro código que no entiendo:

//--- trabajamos sólo en el momento del nacimiento de nuevo bar
   static datetime PrevBars=0;
   datetime time_0=iTime(m_symbol.Name(),InpWorkTimeFrame,0);
   if(time_0==PrevBars)
      return;
   PrevBars=time_0;
   if(!RefreshRates())
     {
      PrevBars=0;
      return;
     }
 
Sysmart:

Gracias.

Otro código que no entiendo:

Este código hace lo siguiente: funciona sólo una vez - cuando nace una nueva barra.

 
Vladimir Karputov:

Este código hace lo siguiente: sólo funciona una vez, en el momento en que nace una nueva barra.

Gracias. Eso es lo que entendí al final:

//--- trabajamos sólo en el momento del nacimiento de nuevo bar
   // recuerda la hora de apertura del último compás en la variable estática
   static datetime PrevBars=0;
   // hora actual (iTime - devuelve el valor de la hora de apertura del bar)
   datetime time_0=iTime(m_symbol.Name(),InpWorkTimeFrame,0);
   if(time_0==PrevBars)
      return;
   // si el tiempo es diferente porque la condición ha pasado if(time_0==PrevBars)
   // recuerda la hora
   PrevBars=time_0;
   // si las cotizaciones no se han actualizado, entonces restablece la hora de la última apertura de la barra
   if(!RefreshRates())
     {
      PrevBars=0;
      return;
     }
   // si has llegado hasta aquí, no es un bar nuevo.

Sin tu enlace no me habría dado cuenta)

 
Sysmart:

Gracias. Esto es lo que me di cuenta al final:

No me habría dado cuenta sin tu enlace)

Pequeña corrección. Esto

 // si has llegado hasta aquí, no es un bar nuevo.

es incorrecto. Es correcto:

 // has llegado a este punto, así que el bar es nuevo.
 

Por cierto, justo debajo está el código:

   if(!RefreshRates() || !m_symbol.Refresh())
     {
      PrevBars=0;
      return;
     }

Creo que duplica parcialmente el código comentado anteriormente:

   if(!RefreshRates())
     {
      PrevBars=0;
      return;
     }

Creo que se puede eliminar

 
Vladimir Karputov:

Una pequeña corrección. Se trata de

es incorrecto. Es correcto:

¡Gracias!)