Resultados 1 al 2 de 2

Tema: ¿Cómo agregar un cierre y revertir al código existente que funciona?

  1. #1
    Este será un largo post con muchas líneas de código ...

    Tengo un código existente que funciona según lo previsto, que toma múltiples posiciones y se cierra en niveles ocultos de SL y TP.

    Quiero agregar a las funciones de código existentes que permiten al EA cerrar y revertir si se generan señales antes de que se golpee el SL o TP.

    Aquí está el código existente que funciona bien:

    Código insertado/---------------------------------------------- ----/PARÁMETROS COMERCIALES/---------------------------------------- ---------- RefreshRates (); {if (SEÑAL DE COMERCIO PERSONALIZADO PARA LA COMPRA) {if ((Hour () == 0) (Minute () == 0)) Sleep (60000); {fBuy1 (); fBuy2 (); fBuy3 (); fBuy4 (); fBuy5 (); fBuy6 (); }} if (SEÑAL DE COMERCIO PERSONALIZADO PARA LA VENTA) {if ((Hour () == 0) (Minute () == 0)) Sleep (60000); {fSell1 (); fSell2 (); fSell3 (); fSell4 (); fSell5 (); fSell6 (); }}}}/-------------------------------------------- ------/COMPRAR/--------------------------------------- ----------- void fBuy1 () {int result = OrderSend (ST1, OP_BUY, Lots, Ask, Slippage, 0,0, Open LONG Magic1, Magic1,0, Blue); OrderSelect (resultado, SELECT_BY_TICKET, MODE_TRADES); Imprimir (COMPRAR ORDEN ABIERTO!, #, Resultado, en, DoubleToStr (OrderOpenPrice (), dígitos),, SL:, DoubleToStr (OrderStopLoss (), dígitos),, TP:, DoubleToStr (OrderTakeProfit (), dígitos), OpenTrades :, OrdersTotal (),, Close # 91; 1 # 93 ;:, Close # 91; 1 # 93;); if (SignalMail) SendMail (EA OPEN TRADE ALERT, COMPRAR PEDIDO ABIERTO! ST1 , # resultado en DoubleToStr (OrderOpenPrice (), Digits) , SL: DoubleToStr (OrderStopLoss (), Digits) , TP : DoubleToStr (OrderTakeProfit (), Digits)); if (result == -1) {int e = GetLastError (); Imprimir (e); }} void fBuy2 () {int result = OrderSend (ST1, OP_BUY, Lots, Ask, Slippage, 0,0, Open LONG Magic2, Magic2,0, Blue); OrderSelect (resultado, SELECT_BY_TICKET, MODE_TRADES); Imprimir (COMPRAR ORDEN ABIERTO!, #, Resultado, en, DoubleToStr (OrderOpenPrice (), dígitos),, SL:, DoubleToStr (OrderStopLoss (), dígitos),, TP:, DoubleToStr (OrderTakeProfit (), dígitos), OpenTrades :, OrdersTotal (),, Close # 91; 1 # 93 ;:, Close # 91; 1 # 93;); if (SignalMail) SendMail (EA OPEN TRADE ALERT, COMPRAR PEDIDO ABIERTO! ST1 , # resultado en DoubleToStr (OrderOpenPrice (), Digits) , SL: DoubleToStr (OrderStopLoss (), Digits) , TP : DoubleToStr (OrderTakeProfit (), Digits)); if (result == -1) {int e = GetLastError (); Imprimir (e); }} ETC ... el código de repetición continúa a través de VoidfBuy6/------------------------------------- -------------/VENDER/-------------------------------- ------------------ void fSell1 () {int result = OrderSend (ST1, OP_SELL, Lots, Bid, Slippage, 0,0, Open SHORT Magic1, Magic1,0, Rojo); OrderSelect (resultado, SELECT_BY_TICKET, MODE_TRADES); Imprimir (ORDEN DE VENTA ABIERTO!, #, Resultado, en, DoubleToStr (OrderOpenPrice (), dígitos),, SL:, DoubleToStr (OrderStopLoss (), dígitos),, TP:, DoubleToStr (OrderTakeProfit (), dígitos), OpenTrades :, OrdersTotal (),, Close # 91; 1 # 93 ;:, Close # 91; 1 # 93;); si (SignalMail) SendMail (¡ALERTA DE COMERCIO ABIERTO DE EA!, ¡SE VENDE EL PEDIDO ABIERTO! ST1 , # resultado en DoubleToStr (OrderOpenPrice (), Dígitos) , SL: DoubleToStr (OrderStopLoss (), Dígitos) , TP : DoubleToStr (OrderTakeProfit (), Digits)); if (result == -1) {int e = GetLastError (); Imprimir (e); }} void fSell2 () {int result = OrderSend (ST1, OP_SELL, Lots, Bid, Slippage, 0,0, Open SHORT Magic2, Magic2,0, Red); OrderSelect (resultado, SELECT_BY_TICKET,MODE_TRADES); Imprimir (ORDEN DE VENTA ABIERTO!, #, Resultado, en, DoubleToStr (OrderOpenPrice (), dígitos),, SL:, DoubleToStr (OrderStopLoss (), dígitos),, TP:, DoubleToStr (OrderTakeProfit (), dígitos), OpenTrades :, OrdersTotal (),, Close # 91; 1 # 93 ;:, Close # 91; 1 # 93;); si (SignalMail) SendMail (¡ALERTA DE COMERCIO ABIERTO DE EA!, ¡SE VENDE EL PEDIDO ABIERTO! ST1 , # resultado en DoubleToStr (OrderOpenPrice (), Dígitos) , SL: DoubleToStr (OrderStopLoss (), Dígitos) , TP : DoubleToStr (OrderTakeProfit (), Digits)); if (result == -1) {int e = GetLastError (); Imprimir (e); }} void fSell3 () {int result = OrderSend (ST1, OP_SELL, Lots, Bid, Slippage, 0,0, Open SHORT Magic3, Magic3,0, Red); OrderSelect (resultado, SELECT_BY_TICKET, MODE_TRADES); Imprimir (ORDEN DE VENTA ABIERTO!, #, Resultado, en, DoubleToStr (OrderOpenPrice (), dígitos),, SL:, DoubleToStr (OrderStopLoss (), dígitos),, TP:, DoubleToStr (OrderTakeProfit (), dígitos), OpenTrades :, OrdersTotal (),, Close # 91; 1 # 93 ;:, Close # 91; 1 # 93;); si (SignalMail) SendMail (¡ALERTA DE COMERCIO ABIERTO DE EA!, ¡SE VENDE EL PEDIDO ABIERTO! ST1 , # resultado en DoubleToStr (OrderOpenPrice (), Dígitos) , SL: DoubleToStr (OrderStopLoss (), Dígitos) , TP : DoubleToStr (OrderTakeProfit (), Digits)); if (result == -1) {int e = GetLastError (); Imprimir (e); }} ETC ... el código de repetición continúa a través de VoidfSell6/------------------------------------- -------------/HIDDEN SL TP FUNCTION/----------------------------- --------------------- void hidden_stop_loss () {int totalorders = OrdersTotal (); para (int i = totalorders-1; igt; = 0; i--) {OrderSelect (i, SELECT_BY_POS); resultado bool = falso; {if (OrderMagicNumber () == Magic1) {if (OrderType () == OP_BUY iClose (Symbol (), 1,0) lt; NormalizeDouble (OrderOpenPrice () - ((OrderOpenPrice ()100) * StopLossLong1), 3 )) resultado = OrderClose (OrderTicket (), OrderLots (), Bid, 50, Red); if (OrderType () == OP_SELL iClose (Symbol (), 1,0) gt; NormalizeDouble (OrderOpenPrice () ((OrderOpenPrice ()100) * StopLossShort1), 3)) result = OrderClose (OrderTicket (), OrderLots (), Preguntar, 50, rojo); } if (OrderMagicNumber () == Magic2) {if (OrderType () == OP_BUY iClose (Symbol (), 1,0) lt; NormalizeDouble (OrderOpenPrice () - ((OrderOpenPrice ()100) * StopLossLong2), 3 )) resultado = OrderClose (OrderTicket (), OrderLots (), Bid, 50, Red); if (OrderType () == OP_SELL iClose (Symbol (), 1,0) gt; NormalizeDouble (OrderOpenPrice () ((OrderOpenPrice ()100) * StopLossShort2), 3)) result = OrderClose (OrderTicket (), OrderLots (), Preguntar, 50, rojo); } if (OrderMagicNumber () == Magic3) {if (OrderType () == OP_BUY iClose (Symbol (), 1,0) lt; NormalizeDouble (OrderOpenPrice () - ((OrderOpenPrice ()100) * StopLossLong3), 3 )) resultado = OrderClose (OrderTicket (), OrderLots (), Bid, 50, Red); if (OrderType () == OP_SELL iClose (Symbol (), 1,0) gt; NormalizeDouble (OrderOpenPrice () ((OrderOpenPrice ()100) * StopLossShort3), 3)) result = OrderClose (OrderTicket (), OrderLots (), Preguntar, 50, rojo); } ETC ... código de repeticióncontinúa a través de Magic6}} volver; } void hidden_take_profit () {int totalorders = OrdersTotal (); para (int i = totalorders-1; igt; = 0; i--) {OrderSelect (i, SELECT_BY_POS); resultado bool = falso; {if (OrderMagicNumber () == Magic1) {if (OrderType () == OP_BUY iClose (Symbol (), 1,0) gt; NormalizeDouble (OrderOpenPrice () ((OrderOpenPrice ()100) * TakeProfitLong1), 3 )) resultado = OrderClose (OrderTicket (), OrderLots (), Bid, 50, Red); if (OrderType () == OP_SELL iClose (Symbol (), 1,0) lt; NormalizeDouble (OrderOpenPrice () - ((OrderOpenPrice ()100) * TakeProfitShort1), 3)) result = OrderClose (OrderTicket (), OrderLots (), Preguntar, 50, rojo); } if (OrderMagicNumber () == Magic2) {if (OrderType () == OP_BUY iClose (Symbol (), 1,0) gt; NormalizeDouble (OrderOpenPrice () ((OrderOpenPrice ()100) * TakeProfitLong2), 3 )) resultado = OrderClose (OrderTicket (), OrderLots (), Bid, 50, Red); if (OrderType () == OP_SELL iClose (Symbol (), 1,0) lt; NormalizeDouble (OrderOpenPrice () - ((OrderOpenPrice ()100) * TakeProfitShort2), 3)) result = OrderClose (OrderTicket (), OrderLots (), Preguntar, 50, rojo); } if (OrderMagicNumber () == Magic3) {if (OrderType () == OP_BUY iClose (Symbol (), 1,0) gt; NormalizeDouble (OrderOpenPrice () ((OrderOpenPrice ()100) * TakeProfitLong3), 3 )) resultado = OrderClose (OrderTicket (), OrderLots (), Bid, 50, Red); if (OrderType () == OP_SELL iClose (Symbol (), 1,0) lt; NormalizeDouble (OrderOpenPrice () - ((OrderOpenPrice ()100) * TakeProfitShort3), 3)) result = OrderClose (OrderTicket (), OrderLots (), Preguntar, 50, rojo); } ETC ... el código de repetición continúa a través de Magic6}} volver; }
    Lo anterior funciona muy bien, pero quería agregar una función de señal opuesta e inversa de cierre si ...
    Aunque el EA ingresa con múltiples números mágicos y sale de los SL y TP ocultos con múltiples números mágicos, quiero que salga de todas las posiciones abiertas si se genera una señal opuesta contraria antes de que se golpee el SL o TP, y quiero que se invierta y se abra Una nueva serie de posiciones opuestas.

    Esto es lo que he intentado hasta ahora, pero no funciona como se esperaba ... ¿Alguna otra idea? Me gustaría usar el marco existente ... ¿Qué estoy haciendo mal aquí?

    Código insertado {si (SEÑAL DE COMERCIO PERSONALIZADO PARA LA COMPRA) {si ((Hora () == 0) (Minuto () == 0)) Suspensión (60000); {CloseSell (); lt; lt; ----- Esto se agregó pensando que funcionaría lógicamente ... lógica adicional debajo de Sleep (10000); lt; lt; ----- agregado para dar un búfer para cerrar posiciones existentes antes de ejecutar otras nuevas, no creo que afecte a la salida fBuy1 (); fBuy2 (); fBuy3 (); fBuy4 (); fBuy5 (); fBuy6 (); } etc .../------------------------------------------- -------/CIERRE LA FUNCIÓN EXISTENTE ANTES DE LAS POSICIONES DE FOTO/---------------------------------- ---------------- void CloseSell () {int totalorders = OrdersTotal (); para (int i = totalorders-1; igt; = 0; i--) {OrderSelect (i, SELECT_BY_POS); resultado bool = falso; {if (OrderType () == OP_SELL) {resultado = OrderClose (OrderTicket (), OrderLots (), Ask, 50, Red); }}}} void CloseBuy () {int totalorders = OrdersTotal (); para (int i = totalorders-1; igt; = 0; i--) {OrderSelect (i, SELECT_BY_POS); resultado bool = falso; {if (OrderType () == OP_BUY) {resultado = OrderClose (OrderTicket (), OrderLots (), Bid, 50, Red); } } }/ regreso; }
    El código agregado no funciona como pensé. ¿Alguna otra solución?

  2.                         
    Publicidad
  3. #2
    ayudaría si dijera lo que el código nuevo hace o no ... también, por qué no intenta imprimir el último error y el número de ticket y el tipo de orden en el ciclo cerrado para que pueda ver lo que está sucediendo, de lo contrario es solo una adivinación

Permisos de publicación

  • No puedes crear nuevos temas
  • No puedes responder temas
  • No puedes subir archivos adjuntos
  • No puedes editar tus mensajes
  •  
Uso de cookies
Utilizamos cookies propias y de terceros para elaborar información estadística y mostrarle publicidad personalizada a través del análisis de su navegación. Si continúa navegando acepta su uso. Más información y política de cookies.
     

Aviso legal: Ni forosforex.com ni ninguna persona involucrada en forosforex.com aceptarán ninguna responsabilidad por cualquier pérdida o daño en el trading como resultado de la confianza en la información contenida en este sitio web, incluidos datos, cotizaciones, gráficos y señales de compra/venta. Por favor, infórmese plenamente de los riesgos y costes asociados a las operaciones en los mercados financieros, una de las formas de inversión que más riesgos entrañan.
forosforex.com le quiere recordar que los datos contenidos en este sitio web no son necesariamente en tiempo real ni exactos. forosforex.com no asume responsabilidad alguna por las pérdidas en que usted podría incurrir como resultado de la utilización de estos datos. Este acuerdo se rige por su versión en inglés, que prevalecerá siempre que haya alguna discrepancia entre la versión en inglés y la versión en español. Los CFD son un producto difícil de entender, varios organismos reguladores consideran que no es adecuado para inversores minoristas debido a su complejidad y riesgo.
Advertencia de riesgo: Los CFDs son un producto difícil de entender, y puede no ser adecuado para inversores minoristas debido a su complejidad y riesgo. Existe la posibilidad de sufrir una pérdida igual o superior a la inversión. Por lo tanto, no debe invertir o arriesgar dinero que no pueda permitirse perder. Debe asegurarse de que comprende todos los riesgos. Antes de abrir una cuenta en un broker por favor sea consciente e infórmese de los riesgos asociados con el trading. El contenido de este sitio web no debe interpretarse como asesoramiento personal. ForosForex recomienda que busque el consejo de un asesor financiero independiente.