Ver la versión completa : Pregunta sobre el siguiente código para cerrar 2 órdenes activas
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.
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);}
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.
Powered by forosforex® Version 4.2.5 Copyright © 2025 forosforex Solutions, Inc. All rights reserved.