Preguntas de los principiantes MQL5 MT5 MetaTrader 5 - página 548

 
edutak:

No me gustaría mostrar el código, ya que la primera versión demostró ser muy resistente. Sobrevivió durante 10 años sin optimización. Ahora quiero hacerlo un poco más complejo y rentable.

El código es muy sencillo.

Aun así, las órdenes pueden abrirse en cada tick debido a un error en la lógica.

Compruebe antes de abrir una posición si ya está abierta o no.
 
Vitalii Ananev:
Compruebe antes de abrir una posición si ya está abierta o no.
¿Verdad?
for(int pos=0; pos<OrdersTotal(); pos++)
     {
      OrderSelect(pos,SELECT_BY_POS,MODE_TRADES);
      if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magik)
         kolpos++;
     }
 

Antes de cerrar es así.

 if(OrdersTotal()!=0)
         if(OrderSelect(pos,SELECT_BY_POS,MODE_TRADES))
            if(OrderType()==OP_BUY)
 
edutak:
¿Verdad?
   for(int pos=OrdersTotal()-1; pos>=0; pos--)         
   {
      if(!OrderSelect(pos,SELECT_BY_POS,MODE_TRADES)) continue;
      if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magik)  kolpos++;
   }

Es algo así.

Es mejor convertirlo en una función.

int CountOrder(string Smb,int Magik)
{
   int Total = OrdersTotal();
   if (Total==0) return(0);
   int kolpos = 0;
   for(int pos=Total-1; pos>=0; pos--)         
   {
      if(!OrderSelect(pos,SELECT_BY_POS,MODE_TRADES)) continue;
      if(OrderSymbol()==Smb && OrderMagicNumber()==Magik)  kolpos++;
   }
   return(kolpos);
}
 
edutak:

Antes de cerrar es así.

No tiene una comprobación de magik y símbolo antes de cerrar. Puede cerrar las operaciones de otro EA o las operaciones abiertas manualmente.
 
Vitalii Ananev:
Es algo así.

No, el problema no se ha resuelto. No está en esta unidad.

¿Puede explicar la diferencia entre mi opción y la suya?

 
edutak:

No, el problema no se ha resuelto. No está en esta unidad.

¿Puede explicar la diferencia entre mi opción y la suya?

Entonces estás haciendo algo mal, trabaja en tu código.

El mío es mejor :)

...

De esta manera no se perderá ningún pedido. En su versión, si en ese momento se cierra alguna posición o se elimina una orden, puede saltarse cualquiera de las restantes.

 
Vitalii Ananev:

Así que estás haciendo algo mal, trata con tu código.

El mío es mejor :)

...

De esta manera no se perderá ningún pedido. Si su versión muestra que si en ese momento se cierra alguna posición o se elimina una orden, entonces puede omitir algunas de las restantes.

Lo declaré como una variable global, pero me da un error.

int CountOrder;
 
edutak:

Lo declaré como una variable global, pero da un error.

Lo que te he escrito es una función.

Aquí tienes un ejemplo de cómo utilizarlo.

int Count = CountOrder(Symbol(),12345);

if (Count==0)
{
//можно открывать
}
 
Vitalii Ananev:

Lo que te he escrito es una función.

Aquí tienes un ejemplo de cómo utilizarlo.

Confundido
Razón de la queja: