¡Pide! - página 38

 

Ian,

Comprueba el experto en Straddle&Trail. Puedes encontrarlo aquí https://www.mql5.com/en/forum/general

 

Hola a todos,

Quiero cerrar todas mis órdenes al mismo tiempo pero no puedo.

He probado este código pero no ha funcionado:

''''''''''''''''''''''''''''''''''''''''

total = OrdersTotal();

for(i=0;i < total;i++)

{

if(OrderSelect(i, SELECT_BY_POS)==true)

{

OrderClose(OrderTicket(),OrderLots(),Ask,80,CLR_NONE);

OrderClose(OrderTicket(),OrderLots(),Bid,80,CLR_NONE);

}

}

''''''''''''''''''''''''''''''''''''''''

¿Puede alguien ayudarme?

Estaría muy agradecido si me pueden ayudar

 

Mehdi,

Pon este código (procedimiento) fuera de la sección start() y cuando se cumpla la condición de cerrar todas las operaciones, simplemente llama al procedimiento así:

int start()

{ // su código aquí .....

Si (su condición aquí) ShutDownAllTrades();

}

void ShutDownAllTrades

{ int Reintento;

While (OrdersTotal()>0)

{ for (int cnt=OrdersTotal()-1;cnt>=0;cnt--)

{ OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);

if (OrderType()==OP_BUY)

{ Retry=0; while (Retry<5 && !IsTradeAllowed()) { Retry++; Sleep(1000); }

RefreshRates();

OrderClose(OrderTicket(),OrderLots(),Bid,Slippage,Yellow);

Sleep(1000);

}

else if (OrderType()==OP_SELL)

{ Retry=0; while (Retry<5 && !IsTradeAllowed()) { Retry++; Sleep(1000); }

RefreshRates();

OrderClose(OrderTicket(),OrderLots(),Ask,Slippage,Yellow);

Sleep(1000);

}

else

{ Retry=0; while (Retry<5 && !IsTradeAllowed()) { Retry++; Sleep(1000); }

OrderDelete(OrderTicket());

Sleep(1000);

}

}

}

}

HTH

Yannis

 

Estimado Yannis,

Gracias por tu ayuda.

Le deseo lo mejor.

 
Yannis:
Mehdi,

Ponga este código (procedimiento) fuera de la sección start() y cuando se cumpla la condición de cerrar todas las operaciones, sólo llame al procedimiento así

int start()

{ // su código aquí .....

Si (su condición aquí) ShutDownAllTrades();

}

void ShutDownAllTrades

{ int Reintento;

While (OrdersTotal()>0)

{ for (int cnt=OrdersTotal()-1;cnt>=0;cnt--)

{ OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);

if (OrderType()==OP_BUY)

{ Retry=0; while (Retry<5 && !IsTradeAllowed()) { Retry++; Sleep(1000); }

RefreshRates();

OrderClose(OrderTicket(),OrderLots(),Bid,Slippage,Yellow);

Sleep(1000);

}

else if (OrderType()==OP_SELL)

{ Retry=0; while (Retry<5 && !IsTradeAllowed()) { Retry++; Sleep(1000); }

RefreshRates();

OrderClose(OrderTicket(),OrderLots(),Ask,Slippage,Yellow);

Sleep(1000);

}

else

{ Retry=0; while (Retry<5 && !IsTradeAllowed()) { Retry++; Sleep(1000); }

OrderDelete(OrderTicket());

Sleep(1000);

}

}

}

}

HTH

Yannis

Estimado Yannis,

He añadido su procedimiento entre " int deinit() { } " (fuera de inicio) como usted dijo, pero hay un problema a través de la compilación después de void ShutDownAllTrades { : '{' coma o punto y coma esperado .

Espero su respuesta.

Muchas gracias

 

Oops, lo siento.

Lo que falta es el () después de void ShutDownAllTrades()

Ten cuidado también con la variable llamada 'Slippage' en la función orderclose.

Es posible que tengas que reemplazarla por la que utilizas cuando haces tus órdenes.

Yannis

 
Yannis:
Oops, lo siento.

Lo que falta es el () después de void ShutDownAllTrades()

Tenga cuidado también con la variable llamada 'Slippage' en la función orderclose.

Es posible que tengas que reemplazarla por la que utilizas cuando haces tus órdenes.

Yannis

¡Funciona muy bien !

Gracias de nuevo

 

Estoy usando el indicador MTF CCI en el hilo de indicadores Multi Time Frame, es una línea amarilla de paso, ver imagen adjunta.

Cuando la línea está por encima del nivel 100 (sobrecompra) - el precio bajará y cuando está por debajo de -100 (sobreventa) - el precio subirá.

El único problema es que no siempre se actualiza, tengo que hacerlo manualmente haciendo clic con el botón derecho del ratón en el gráfico y seleccionando "Actualizar".

Una pregunta a los programadores: ¿Existe alguna función en MQ4 para hacer ese tipo de refresco automáticamente en cada tick?

Agradecería un consejo.

euro pean

Archivos adjuntos:
mtf_cci.jpg  37 kb
 

Pruebe esto:

void ObjectsRedraw()

Redibuja todos los objetos del gráfico

Ejemplo

ObjectsRedraw();

Es posible que tenga que utilizar primero ObjectCreate.

 
richx7:
Pruebe esto:

void ObjectsRedraw()

Redibuja todos los objetos del gráfico

Ejemplo

ObjectsRedraw();

Es posible que tenga que utilizar primero ObjectCreate.

Gracias por responder.

Por lo que sé, ObjectsRedraw() refresca los objetos que acaban de ser "creados" y "establecidos".

Necesito refrescar un indicador que no está en la lista de objetos, por lo que ObjectsRedraw() no funciona.

¿O puede ser que sepas cómo hacer referencia a un indicador existente?