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

 
Trader7777:

Chicos, por favor revisen la función, tengo algunas dudas al respecto


Bueno, si se está cerrando, es mejor hacer un bucle hacia atrás.
 
splxgf:

por lo que si hay un cierre, es mejor hacer un bucle hacia atrás.

No, debería cerrarse del viejo al nuevo orden
 
Trader7777:

no, debería cerrarse del viejo al nuevo orden

Si cambias el orden, será del antiguo al nuevo. Mientras tanto, de lo nuevo a lo viejo, e incluso a través de uno a veces puede pasar.
 
evillive:

Si cambias el orden, será del antiguo al nuevo. Por ahora, de nuevo a viejo, e incluso a través de uno a veces puede pasar.

Si hace for (int i = OrdersTotal()-1; i>0; i--) ¡se cerrará de nuevo a viejo!
 
evillive:

Si cambias el orden, será del antiguo al nuevo. Pero mientras tanto, de lo nuevo a lo viejo, y a veces uno tras otro, puede suceder.

No entiendo, si te da pereza sugerir errores, ¿por qué imponerme una función que, según mi TS, no necesito?
 

Buenas noches...

este indicador https://www.mql5.com/ru/code/9767 en el Asesor Experto será correcto?

if(iCustom( NULL,0, "wave(MACD_FZR)",1,0)<Low[1] )

{

ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,0,Ask+TakeProfit*Point, "macd sample",16384,0,Green);

if(ticket>0)

{

if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) Print("Orden de compra abierta : ",OrderOpenPrice());

}

else Print("Error al abrir la orden BUY : ",GetLastError());

return(0);

}

// comprobar la posición corta (SELL)

if(iCustom( NULL, 0, "wave(MACD_FZR)",1,1)>High[1] )

{

ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,3,0,Bid-TakeProfit*Point, "macd sample",16384,0,Red);

 
Trader7777:

No entiendo, si te da pereza sugerir errores, ¿por qué me vas a imponer una función que no necesito según mi TS?

Bueno, entonces mira tu función, por ejemplo se toma la primera orden y como se ajusta a la condición se borra... Su lugar lo ocupa el segundo orden.

En el siguiente bucle se comprueba la tercera orden y se salta la segunda.

Por eso señalamos que la enumeración es errónea...

Si su propio orden es realmente importante, podemos decrementar la variable del bucle al borrarlo.

 
Trader7777:

No entiendo, si te da pereza sugerir errores, ¿por qué imponerme una función que, según mi TS, no necesito?

Te dije que lo hicieras mientras. Como (actualización 3):

void CloseHalfOrders(int otype) {
   int count = 0;
   double CTexisting = CountTrades(otype), nCloseOrdersCnt = NormalizeDouble(CTexisting/2,1), price;
   int i = 0;
   while (i < OrdersTotal()) {
      if (OrderSelect(i, SELECT_BY_POS,MODE_TRADES)) {
         if (OrderSymbol()==Symbol() && OrderMagicNumber()==Magic && OrderType() == otype) {
            if (otype == OP_BUY) price = Bid;
            else if (otype == OP_SELL) price = Ask;
            else return;//работаем только с OP_BUY/OP_SELL
            if (count < nCloseOrdersCnt) {
               OrderClose(OrderTicket(),OrderLots(),price,0,Lime);
               count++;
               Sleep(1000);
               i = 0;
               continue;
            } else i = OrdersTotal();
         }
      }
      i++;
   }
}
 

O

           OrderClose(OrderTicket(),OrderLots(),Bid,0,Lime);
           i--;
 
                    if (count<n)

¿Por qué se comparan k y n con el número total de pedidos cerrados?