Iniciar sesión

Ver la versión completa : Pregunta sobre el siguiente código para cerrar 2 órdenes activas



zeudes
01-06-2022 07:57,
ok... genial... ¡gracias por la ayuda!

amfasuizzz
01-06-2022 09:10,
Prueba esto: Código insertado int i; for(i=0; ilt;OrdersTotal(); i ) { if(OrderSelect(i, SELECT_BY_POS)==true) if(AccountProfit() gt; 100) if(OrderType() == OP_BUY) OrderClose(OrderTicket() ,PedirLotes(),Oferta,50,Verde); else if(OrderType() == OP_SELL) OrderClose(OrderTicket(),OrderLots(),Ask,50,Red); } Esto cerraría todas sus órdenes activas, si solo desea cerrar las 2 primeras órdenes cambie for(i=0; ilt;OrdersTotal(); i ) por for(i=0; ilt;2; i )
https://www.forosforex.com/attachments/1529190493.png

jubsayox7
01-06-2022 11:04,
Mi objetivo con los siguientes scripts en negrita es tratar de cerrar 2 órdenes activas. Supongamos que estamos usando una cuenta MT4 con reglas fifo. Por lo tanto... el más antiguo de los 2 pedidos debe cerrarse primero. Aquí está el código... OrderSelect(0,SELECT_BY_POS,MODE_TRADES); if (OrdersTotal() == 2 AccountProfit() gt; 100 OrderType() == OP_BUY) {OrderClose(OrderTicket(),OrderLots(),Bid,50,Green );
Sleep(3000);
OrderClose(OrderTicket(),OrderLots( ),Bid,50,Green);} Mi pregunta sobre lo anterior...
60 mm, su fragmento de código está fuera de contexto. Y use el botón # e inserte el fragmento de código entre los 2 códigos con corchetes. si tiene un bucle (difícil de decir ya que no lo publicó) alrededor del fragmento, entonces la condición Inserted Code #91;b#93;if (OrdersTotal() == 2 AccountProfit() gt; 100 OrderType() = = OP_COMPRAR)#91;/b#93; solo cerrará 1 pedido porque OrdersTotal() == 2 no sería el caso después de que se haya cerrado la primera posición. Por lo tanto, debe asegurarse de que ambas órdenes se cierren dentro del Código insertado { ...... } . Como hacer eso ? Varias maneras. Puede almacenar los números de boleto o insertarlos manualmente en el script. Se vería así: Código insertado int ticket1; ticket2 int; Luego insertó el código #91;b#93;if (TotalPedidos() == 2 BeneficioCuenta() gt; 100 TipoPedido() == OP_BUY) { #91;/b#93;#91;b#93;OrderSelect(ticket1 ,SELECT_BY_POS,MODE_TRADES);#91;/b#93; #91;b#93;OrderCerrar(ticket1,PedirLotes (),Oferta,50,Verde); Dormir (3000); #91;/b#93;#91;b#93;OrderSelect(ticket2,SELECT_BY_POS,MO DE_TRADES);#91;/b#93; #91;b#93; OrderClose(ticket2,OrderLots( ),Bid,50,Green); }#91;/b#93; Sólo una forma de hacerlo. Con el contexto sería más fácil hacerlo.

zeudes
01-06-2022 11:49,
Supongo que podría agregar los siguientes comandos en negrita roja a continuación para ayudar con la respuesta. ¿Imprimirá un 1 o un 2 en ese punto y luego el boleto activo? OrderSelect(0,SELECT_BY_POS,MODE_TR ADES); if (OrdersTotal() == 2 AccountProfit() gt; 100 OrderType() == OP_BUY) {OrderClose(OrderTicket(),OrderLots(),Bid,50,Green );
Sleep(3000);<span style=”color:Red”>
Imprimir (OrdersTotal());</span></b><b><span style=”color:Red”> Imprimir (OrderTicket());</span >
OrderClose(OrderTicket(),OrderLots( ),Bid,50,Green);}

zeudes
01-06-2022 12:07,
Mi objetivo con los siguientes scripts en negrita es tratar de cerrar 2 órdenes activas.

Supongamos que estamos usando una cuenta MT4 con reglas fifo. Por lo tanto... el más antiguo de los 2 pedidos debe cerrarse primero. aqui esta el codigo.....


OrderSelect(0,SELECT_BY_POS,MODE_TRADES);


if (OrdersTotal() == 2 AccountProfit() gt; 100 OrderType() == OP_BUY)
{OrderClose(OrderTicket(),OrderLots(),Bid,50,Green );
Sleep(3000);
OrderClose(OrderTicket(),OrderLots( ),Bid,50,Green);}



Mi pregunta sobre el código anterior es la siguiente .......

Supongamos que la condición 'si' es verdadera... entonces el resto de los comandos deben seguir, ¿correcto?

OK... digamos que la primera orden (posición 0) se cierra como debería. Ahora ... observe que la línea 2nd OrderClose que esperaba cerraría el segundo pedido.
¿Cerrará eso el segundo pedido o intentará cerrar el primer pedido (pos 0) que acaba de cerrarse? ¿No tendría el programa que terminar el bucle y esperar el siguiente tic antes de registrar que esa primera posición se cerró?

¿Sería mejor el código?............


OrderSelect(0,SELECT_BY_POS,MODE_TRADES);


if (OrdersTotal() == 2 AccountProfit() gt; 100 OrderType() == OP_BUY)
{OrderClose(OrderTicket(),OrderLots(),Bid,50,Green );
Sleep(3000);
OrderSelect(1,SELECT_BY_POS,MODE_TRADES);
OrderClose(OrderTicket(), Pedir Lotes( ),Oferta,50,Verde);}

Sé que hay mejores formas de escribir el código, pero estoy realmente interesado en saber si las posiciones de OrderSelect() se cambian instantáneamente cuando se cierra una orden. O... ¿no cambia hasta el próximo tic en el que el programa vuelve a la función de inicio?

Cualquier ayuda con la respuesta a esto sería muy apreciada.