[ARCHIVO] Cualquier pregunta de novato, para no saturar el foro. Profesionales, no pasen de largo. En ninguna parte sin ti - 3. - página 6

 
DhP:


Recalcular con cada tick el número de órdenes pendientes.

Si hay menos, significa que una orden pendiente se ha convertido en una orden de mercado.

Todos los restantes (que se han vuelto innecesarios) pueden ser eliminados.


En el momento de la supresión, ambas órdenes son órdenes de mercado. Pero aunque la última orden pendiente se elimine o se dispare, su ticket se sigue disparando y genera un error. Y la penúltima sigue pendiente.
 
Andreev:

¡¡¡Gracias por el enlace!!! Lo investigaré :) Con el tiempo, así como el número mágico y por tipo de orden (por límite o por límite de venta) es una buena idea. Pero probablemente no me hayas entendido bien. Mi problema no es marcar la orden, sino CÓMO QUITARLA. Sólo puedo eliminar la última orden pendiente, independientemente de cómo defina la penúltima.
// ------------------------------------------------Ищете Ваши отложенники---------------------------------

   int orderType;
   for (int orderIndex = (OrdersTotal() - 1); orderIndex >= 0; orderIndex--)
   {
      if (!OrderSelect(orderIndex, SELECT_BY_POS))
      {
         continue;
      }

      if ((OrderSymbol() != Symbol()) || (OrderMagicNumber() != MagicNumber))
      {
         continue;
      }

      orderType = OrderType();
      if ((orderType == OP_BUY) || (orderType == OP_SELL))
      {
         continue;
      }
          ticket = OrderTicket( );                         // Номер ордера
          orderLots = OrderLots();                         // Lots   
          
          
          SL =  OrderStopLoss();                           // Значение StopLoss ордера
          TP = OrderTakeProfit();                          // Значение TakeProfit ордера
          
          
             if (ticket>0)                                               // 
                    {
                             while(OrderSelect(ticket,SELECT_BY_TICKET)==false)       // Если ордер выбран
                                 {
                                   Sleep(100);
                                 }
                                  
      
                             OrderDelete(ticket,CLR_NONE); // и удаляете их                       
                     
                            
                    }

       
      return (0);
   }
Según entendí en tu primer post "uso el siguiente ejemplo para definir, pero sólo cierra la última orden pendiente en lugar de la primera, aunque se cumplen todas las condiciones para la primera orden pendiente. Ayúdame a encontrar el error!!!!!!!!!!!!!" - tienes que eliminar todas las órdenes pendientes restantes, después de convertir algunas de ellas en órdenes de mercado - este código debe ser escrito en tus condiciones de negociación y seguir adelante...
 
Roman.:
Según entendí en tu primer post "uso el siguiente ejemplo para la definición, pero sólo cierra la última orden pendiente en lugar de la primera, aunque todas las condiciones se cumplen para la primera orden pendiente. Ayúdame a encontrar el error!!!!!!!!!!!!!" - tienes que eliminar todas las órdenes pendientes restantes, después de convertir algunas de ellas en órdenes de mercado - este código debe ser introducido en tus condiciones de negociación y seguir adelante...

¡¡¡Gracias!!! No esperaba que fuera tan complicado :)))
 
Roman.:
Según entendí en tu primer post "uso el siguiente ejemplo para la definición, pero sólo cierra la última orden pendiente en lugar de la primera, aunque todas las condiciones se cumplen para la primera orden pendiente. Ayúdame a encontrar el error!!!!!!!!!!!!!" - tienes que eliminar todas las órdenes pendientes restantes, después de convertir algunas de ellas en órdenes de mercado - este código debe ser introducido en tus condiciones de negociación y seguir adelante...

Pensé que podría tomar un par de líneas ... :)
 
Andreev:

En el momento de la supresión, ambas órdenes son comercializables. Pero aunque la última orden pendiente se borre o se dispare, el ticket que la activó seguirá mostrando un error. El penúltimo seguirá ahí.


No puedo ni imaginar cómo es posible.

Si después de recalcular las órdenes pendientes el Asesor Experto no encuentra una orden, inmediatamente emite una orden para eliminar el resto.

La operación de supresión de las órdenes pendientes no necesarias debe preceder necesariamente (preceder) a cualquier operación de apertura.

 
Roman.:

Según entendí en tu primer post "uso el siguiente ejemplo para la definición, pero sólo cierra la última orden pendiente en lugar de la primera, aunque todas las condiciones se cumplen para la primera orden pendiente. Ayúdame a encontrar el error!!!!!!!!!!!!!" - tienes que eliminar todas las órdenes pendientes restantes, después de convertir algunas de ellas en órdenes de mercado - este código debe ser escrito en tus condiciones de negociación y seguir adelante...

// ------------------------------------------------Ищете Ваши отложенники---------------------------------

   int orderType;
   for (int orderIndex = (OrdersTotal() - 1); orderIndex >= 0; orderIndex--)
   {
      if (!OrderSelect(orderIndex, SELECT_BY_POS))
      {
         continue;
      }

      if ((OrderSymbol() != Symbol()) || (OrderMagicNumber() != MagicNumber))
      {
         continue;
      }

      orderType = OrderType();
      if ((orderType == OP_BUY) || (orderType == OP_SELL))
      {
         continue;
      }
          ticket = OrderTicket( );                         // Номер ордера
          orderLots = OrderLots();                         // Lots   
          
          
          SL =  OrderStopLoss();                           // Значение StopLoss ордера
          TP = OrderTakeProfit();                          // Значение TakeProfit ордера
          
          
             if (ticket>0)                                               // 
                    {
                             while(OrderSelect(ticket,SELECT_BY_TICKET)==false)       // Если ордер выбран
                                 {
                                   Sleep(100);
                                 }
                                  
      
                             OrderDelete(ticket,CLR_NONE); // и удаляете их                       
                     
                            
                    }

       
      return (0);
   }
¿Has intentado alguna vez escribir códigos de forma compacta?

Aquí está su código:

// ------------------------------------------------Ищете Ваши отложенники---------------------------------

   int orderType;
   for (int orderIndex = (OrdersTotal() - 1); orderIndex >= 0; orderIndex--) {
      if (!OrderSelect(orderIndex, SELECT_BY_POS))                            continue;
      if ((OrderSymbol() != Symbol()) || (OrderMagicNumber() != MagicNumber)) continue;
      orderType = OrderType();
      if ((orderType == OP_BUY) || (orderType == OP_SELL))                    continue;
      ticket = OrderTicket( );                         // Номер ордера
      orderLots = OrderLots();                         // Lots   
      SL =  OrderStopLoss();                           // Значение StopLoss ордера
      TP = OrderTakeProfit();                          // Значение TakeProfit ордера
      if (ticket>0) {
         while(OrderSelect(ticket,SELECT_BY_TICKET)==false)       // Если ордер выбран
            Sleep(100);
            OrderDelete(ticket,CLR_NONE); // и удаляете их                       
         }
      return (0);
      }
 
Andreev:

Pensé que sería posible encajar un par de líneas ... :)

Bueno. artmedia70 (24.07.2011 20:01) ha metido todo en casi dos líneas. Tal y como querías)))
 

Por favor, ayúdenme, ¿en qué me estoy equivocando? La idea es que en la barra donde se cerró la orden, ésta no se abra


OrderSelect(OrdersHistoryTotal()-1, SELECT_BY_POS, MODE_HISTORY);
if ((условие 1)&&(условие 2)&&(OrderCloseTime()!=Time[0]))
 {
 OrderSend...; 
 }

Pero en el probador, después de cerrar la orden, se siguen cumpliendo las condiciones y se abre 1 orden más en la misma dirección

 
artmedia70:
¿Nunca has intentado escribir códigos de forma compacta?

Aquí está su propio código:

Tengo... :-))) Es un hábito de Pascal... La legibilidad es peor... Especialmente para aquellos que no son demasiado "iniciados"... :-))) Y es necesario sangrar las operaciones en los bucles anidados y las condiciones por medio de un tabulador, o 3 espacios - como último recurso... :-))
 
LazarevDenis:

Por favor, ayúdenme, ¿en qué me estoy equivocando? La idea es que en la barra donde se cerró la orden, ésta no se abra


Pero en el probador, después de cerrar la orden, se siguen cumpliendo las condiciones y se abre una orden más en la misma dirección


Para ayudarte, busca en Google este y busca algo como: abrir y cerrar una orden en un bar site:mql4.com - y tendrás suerte.
Razón de la queja: