Pregunta sobre la función OrderSelect

 

boopa26 puede escribir el código de envío de la orden pero no puede escribir la función de selección de la orden para cerrar las órdenes. quiere escribir la función de selección de la orden para cerrar las órdenes sin ciclos for o ciclos while. boopa26 quiere escribir la función de selección de la orden para cerrar las órdenes con condiciones if pero boopa26 no entiende cómo montar la función de selección de la orden para cerrar las órdenes


ejemplo de envio de orden de compra

if(OrdersTotal()==0)OrderSend(Symbol(),OP_BUY,.1,Ask,3,0,0,NULL,9,0,clrNONE);


ejemplo de order select. boopa26 no entiende

OrderSelect(int index,int select,int pool)


¿qué es int index?

¿qué es int select?

¿qué es int pool?

¿Cómo funciona OrderSelect?

 

¿Ha leído la documentación?

Parameters

ticket

[in] Índice del pedido o ticket del pedido según el segundo parámetro.

seleccionar

[in] Banderas de selección. Puede ser cualquiera de los siguientes valores:

SELECT_BY_POS - índice de la cartera de pedidos,
SELECT_BY_TICKET - índice es el ticket de la orden.

pool=MODE_TRADES

[in] Índice de pool de órdenes opcional. Se utiliza cuando el parámetro seleccionado es SELECT_BY_POS. Puede ser cualquiera de los siguientes valores:

MODE_TRADES (por defecto) - orden seleccionada del pool de órdenes (órdenes abiertas y pendientes),
MODE_HISTORY - orden seleccionada del pool histórico (órdenes cerradas y canceladas).


 
leer la documentación ahora https://docs.mql4.com/trading/orderselect
 
gumrai podría haber incluido el enlace de la documentación. sólo bromea. gracias gumrai
 
bool  OrderSelect(
   int     index,            // index or order ticket
   int     select,           // flag
   int     pool=MODE_TRADES  // mode
   );

boopa26 quiere cerrar órdenes abiertas por lo que boopa elige MODE_TRADES como tercer parámetro


¿boopa26 hace SELECT_BY_POS o SELECT_BY_TICKET? boopa26 no lo sabe

SELECT_BY_POS //index inside order pool,
SELECT_BY_TICKET //index is order ticket.
 

boopa26 elige MODE_TRADES como tercer parámetro

boopa26 elige SELECT_BY_POSITION como segundo parámetro

boopa26 elige el índice de orden como primer parámetro


ejemplo

static int order_index;

if(OrderSelect(order_index,SELECT_BY_POSITION,MODE_TRADES)==1
 

https://docs.mql4.com/trading/orderclose

¿como hace boopa26 sin ciclos for o ciclos while pero con condiciones if para cerrar órdenes abiertas con la función order select?

la documentación de cierre de orden requiere que se encuentre el ticket de la orden pero boopa26 hace order select para encontrar la posición de la orden no el ticket

bool  OrderClose(
   int        ticket,      // ticket
   double     lots,        // volume
   double     price,       // close price
   int        slippage,    // slippage
   color      arrow_color  // color
   );

1. seleccionar la orden

2. cerrar la orden

no sabe como

 
//+------------------------------------------------------------------+
//|                                               Moving Average.mq4 |
//|                   Copyright 2005-2014, MetaQuotes Software Corp. |
//|                                              http://www.mql4.com |
//+------------------------------------------------------------------+
#property copyright   "2005-2014, MetaQuotes Software Corp."
#property link        "http://www.mql4.com"
#property description "Moving Average sample expert advisor"

#define  MAGICMA  20131111
//--- Inputs
input double Lots          =0.1;
input double MaximumRisk   =0.02;
input double DecreaseFactor=3;
input int    MovingPeriod  =12;
input int    MovingShift   =6;
//+------------------------------------------------------------------+
//| Calculate open positions                                         |
//+------------------------------------------------------------------+
int CalculateCurrentOrders(string symbol)
  {
   int buys=0,sells=0;
//---
   for(int i=0;i<OrdersTotal();i++)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break;
      if(OrderSymbol()==Symbol() && OrderMagicNumber()==MAGICMA)
        {
         if(OrderType()==OP_BUY)  buys++;
         if(OrderType()==OP_SELL) sells++;
        }
     }
//--- return orders volume
   if(buys>0) return(buys);
   else       return(-sells);
  }
//+------------------------------------------------------------------+
//| Calculate optimal lot size                                       |
//+------------------------------------------------------------------+
double LotsOptimized()
  {
   double lot=Lots;
   int    orders=HistoryTotal();     // history orders total
   int    losses=0;                  // number of losses orders without a break
//--- select lot size
   lot=NormalizeDouble(AccountFreeMargin()*MaximumRisk/1000.0,1);
//--- calcuulate number of losses orders without a break
   if(DecreaseFactor>0)
     {
      for(int i=orders-1;i>=0;i--)
        {
         if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)==false)
           {
            Print("Error in history!");
            break;
           }
         if(OrderSymbol()!=Symbol() || OrderType()>OP_SELL)
            continue;
         //---
         if(OrderProfit()>0) break;
         if(OrderProfit()<0) losses++;
        }
      if(losses>1)
         lot=NormalizeDouble(lot-lot*losses/DecreaseFactor,1);
     }
//--- return lot size
   if(lot<0.1) lot=0.1;
   return(lot);
  }
//+------------------------------------------------------------------+
//| Check for open order conditions                                  |
//+------------------------------------------------------------------+
void CheckForOpen()
  {
   double ma;
   int    res;
//--- go trading only for first tiks of new bar
   if(Volume[0]>1) return;
//--- get Moving Average 
   ma=iMA(NULL,0,MovingPeriod,MovingShift,MODE_SMA,PRICE_CLOSE,0);
//--- sell conditions
   if(Open[1]>ma && Close[1]<ma)
     {
      res=OrderSend(Symbol(),OP_SELL,LotsOptimized(),Bid,3,0,0,"",MAGICMA,0,Red);
      return;
     }
//--- buy conditions
   if(Open[1]<ma && Close[1]>ma)
     {
      res=OrderSend(Symbol(),OP_BUY,LotsOptimized(),Ask,3,0,0,"",MAGICMA,0,Blue);
      return;
     }
//---
  }
//+------------------------------------------------------------------+
//| Check for close order conditions                                 |
//+------------------------------------------------------------------+
void CheckForClose()
  {
   double ma;
//--- go trading only for first tiks of new bar
   if(Volume[0]>1) return;
//--- get Moving Average 
   ma=iMA(NULL,0,MovingPeriod,MovingShift,MODE_SMA,PRICE_CLOSE,0);
//---
   for(int i=0;i<OrdersTotal();i++)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break;
      if(OrderMagicNumber()!=MAGICMA || OrderSymbol()!=Symbol()) continue;
      //--- check order type 
      if(OrderType()==OP_BUY)
        {
         if(Open[1]>ma && Close[1]<ma)
           {
            if(!OrderClose(OrderTicket(),OrderLots(),Bid,3,White))
               Print("OrderClose error ",GetLastError());
           }
         break;
        }
      if(OrderType()==OP_SELL)
        {
         if(Open[1]<ma && Close[1]>ma)
           {
            if(!OrderClose(OrderTicket(),OrderLots(),Ask,3,White))
               Print("OrderClose error ",GetLastError());
           }
         break;
        }
     }
//---
  }
//+------------------------------------------------------------------+
//| OnTick function                                                  |
//+------------------------------------------------------------------+
void OnTick()
  {
//--- check for history and trading
   if(Bars<100 || IsTradeAllowed()==false)
      return;
//--- calculate open orders by current symbol
   if(CalculateCurrentOrders(Symbol())==0) CheckForOpen();
   else                                    CheckForClose();
//---
  }
//+------------------------------------------------------------------+
media móvil que utiliza el asesor experto para el ciclo de cierre de las órdenes abiertas
 

Creo que "boopa26" necesita hacer lo siguiente:

  1. Primero, "boopa26" necesita aprender lo básico de la codificación (como en C).
  2. Luego, "boopa26" necesita leer y seguir el libro/tutorial (aunque sea viejo y esté desactualizado).
  3. Al mismo tiempo, "boopa26" necesita leer toda la documentación con especial atención a las actualizaciones de MQL4 que no se mencionan en el Libro/Tutorial.
  4. Luego "boopa26" necesita estudiar varios ejemplos de código para Indicadores, Asesores Expertos (EAs) y Scripts en la Base de Código del usuario.
  5. Entonces "boopa26" puede empezar a hacer sus propios Indicadores, pero muy simples, y poco a poco construir sobre ellos hasta que sea completamente capaz de entender y hacer Indicadores más complejos.
  6. Entonces "boopa26" puede empezar a hacer sus propios, pero muy simples EAs y poco a poco construir sobre ellos hasta que sea totalmente capaz de entender y hacer EAs más complejos.

"boopa26" también debe aprender una lección muy importante, que "boopa26" no debe saltarse todos los pasos necesarios, porque de lo contrario "boopa26" sólo estará perdiendo el tiempo de todos, y en lugar de un "hermoso pastel", todo "boopa26" tendrá es "carbón quemado".

 
FMIC:

Creo que "boopa26" necesita hacer lo siguiente:

  1. Primero, "boopa26" necesita aprender lo básico de la codificación (como en C).
  2. Luego, "boopa26" necesita leer y seguir el libro/tutorial (aunque sea viejo y esté desactualizado).
  3. Al mismo tiempo, "boopa26" necesita leer toda la documentación con especial atención a las actualizaciones de MQL4 que no se mencionan en el Libro/Tutorial.
  4. Luego "boopa26" necesita estudiar varios ejemplos de código para Indicadores, Asesores Expertos (EAs) y Scripts en la Base de Código del usuario.
  5. Entonces "boopa26" puede empezar a hacer sus propios Indicadores, pero muy simples, y poco a poco construir sobre ellos hasta que sea totalmente capaz de entender y hacer Indicadores más complejos.
  6. Entonces "boopa26" puede comenzar a hacer su propio, pero muy simple EAs y poco a poco construir sobre ellos hasta que plenamente capaz de entender y hacer más complejos EAs.

"boopa26" también debe aprender una lección muy importante, que "boopa26" no debe saltarse todos los pasos necesarios, porque de lo contrario "boopa26" sólo estará perdiendo el tiempo de todos, y en lugar de un "hermoso pastel", todo lo que tendrá es "carbón quemado".

1. no necesita conocimientos de c. mql4 es diferentes funciones

2. leer el libro ya

3. leer la documentación ya

4. código escrito ya

5. ?

6. ?

boopa26 no hace perder el tiempo a la gente

Profesor de la FMIC que enseña a "boopa26" a hacer pasteles de carbón

Clase de pastel de carbón FMIC