(MT4) Cierre Parcial en un EA
(MT4) Cierre Parcial en un EA

 

Publi

Página 1 de 352 12 ??ltimo??ltimo
Resultados 1 al 10 de 12

Tema: (MT4) Cierre Parcial en un EA

  1. #1
    Hola a todos,

    He estado intentando aprender mql4 por mi cuenta y, para ello, he creado un indicador personalizado.

    Ahora estoy intentando convertirlo en un EA, pero tengo problemas con la sintaxis.

    Actualmente tengo:

    Código insertado if(OrdersTotal() == 0) { if(Ask==HighLineValue ccigt;=90) { OrderSend(Symbol(), OP_BUY, lotes, Ask, deslizamiento, LowLineValue, HalfHigh, 0); } if(Bid==LowLineValue ccilt;=-90) { OrderSend(Symbol(), OP_SELL, lotes, Oferta, deslizamiento, HighLineValue, HalfLow, 0); } } Lo que me gustaría hacer es cerrar el 70% de los lotes y mover el SL al punto de equilibrio cuando se cumpla otro conjunto de criterios, y luego cerrar el 30% final en un conjunto final de criterios.

    Tengo las variables 'lots70' y 'lots30' que ya calculan el número apropiado de lotes, pero no sé cómo lograr este cierre parcial de manera confiable. Me imagino que necesito crear algún tipo de bandera para indicar que una operación está activa en una dirección particular y luego crear otra declaración ”si” para el cierre parcial. Sin embargo, realmente no estoy seguro de la sintaxis de esto.

    El otro problema que tengo es que las variables cambian conforme avanza el tiempo pero me gustaría usar los valores de las variables al momento de realizar el pedido. ¿Son los amortiguadores la única forma de lograrlo?

    Muchas gracias de antemano por cualquier ayuda que se pueda ofrecer.

    (Mis disculpas por lo rudimentario que es esto, ¡pero todavía estoy aprendiendo mucho!)

  2.                         
    Publicidad
  3. #2
    1 Adjunto(s) Adjunto EA UPDATE STOPS, la forma en que puedes configurar tus niveles es muy buena pero funciona en cada par individualmente, estoy buscando un EA que cierre un porcentaje de la canasta completa, pares que están en ganancias y los pares que están en pérdidas, el mismo % en todos los ámbitos. Cualquier ayuda sería apreciada. Gracias.
    https://www.forosforex.com/attachmen...1593867873.mq4

  4. #3
    ¡Hola a todos! Soy un trader de cestas y estoy buscando un EA para cerrar parte de la cesta. Ejemplo: digamos que estoy operando con una canasta de 10 o 14 pares y la ganancia alcanza un cierto nivel de 100 pips, ahora quiero cerrar parte de la canasta, digamos la mitad de la canasta, pero la mitad de la canasta en todos los pares, no la mitad. pares. Después del resto lo dejamos correr hasta otro nivel preestablecido de pips. Existe algo como esto? Cualquier ayuda será apreciada.
    Gracias.

  5. #4
    Cita Iniciado por ;
    Publicación cruzada contigo allí: ¡parece que ambos tomamos rutas diferentes hacia el mismo lugar!
    Felicitaciones

  6. #5
    Publicación cruzada contigo allí: ¡parece que ambos tomamos rutas diferentes hacia el mismo lugar!

  7. #6
    Bien, creo que logré que el EA hiciera un cierre parcial y actualizara el SL y el TP en el resto de la operación: la operación se abre con un TP por encima de lo que pretendo que sea mi TP inicial (en mi caso, ábrelo con mi TP final). En el momento de abrir la operación, el tamaño del lote se transfiere a una variable estática, y el 70% y el 30% de esa cifra se calcula y se transfiere a variables estáticas. Cuando el precio supera lo que pretendo que sea mi TP inicial (teniendo en cuenta que el TP real presentado al corredor es más alto), el EA envía un OrderClose() para el 70% de los lotes y un OrderModify() para cambiar el SL. para el 30% restante. El TP también podría modificarse aquí si fuera necesario. Pareció comportarse, es decir, no hubo mensajes de error cuando lo ejecuté en una demostración.

  8. #7

    Cita Iniciado por ;
    He encontrado una manera de cerrar parcialmente una operación en 3 pasos cuando se cumplen diferentes condiciones.
    Finalmente logré descifrarlo. Aquí está el código sin errores y funciona perfecto, al menos para mi EA: Código insertado/--- COMPRAR PEDIDO CERRAR PRECONDICIONES double Close1=0; if((Bid-OrderOpenPrice())gt;=1000*Point OrderLots()gt;1.6) Close1=1; if(Cerrar1==1) NuevosLotes=Lotes1; if((Bid-OrderOpenPrice())gt;=2000*Point OrderLots()gt;1.1) Close1=2; if(Cerrar1==2) Nuevos Lotes=Lotes2; if(trendlt;0 trendprevlt;0) Cerrar1=3; if(Close1==3) Nuevos Lotes=OrderLots();/--- CONDICIONES DE CIERRE DE PEDIDO { if(Close1==1 Lotes de Pedido()gt;1.6) { Cierre de Pedido(TicketdePedido(),Nuevos Lotes,Bid,3,Violet);/cerrar posición return(0);/salir } if(Close1==2 OrderLots()gt;1.1) { OrderClose(OrderTicket(),NewLots,Bid,3,Violet);/cerrar posición return(0);/salir } if(trendlt;0 trendprevlt;0) { OrderClose(OrderTicket(),NewLots,Bid,3,Violet);/cerrar posición return(0);/salida } }

  9. #8
    ¡Muchas gracias por las respuestas!
    Cita Iniciado por ;
    1. Nunca hagas una comparación de igualdad entre el precio y otra variable como lo has hecho (Ask==HighLineValue). Esto funcionará, la mayor parte del tiempo, pero ¿qué pasa con la situación en la que los números tienen dígitos no redondeados en el enésimo decimal? Esto sucede con la mayoría de las variables predeclaradas de MT4, como Alto, Bajo, Oferta, Demanda. Es mejor hacer Askgt;=HighLineValue.
    Excelente punto que no había considerado antes. Agregué un rango para el disparador.
    Cita Iniciado por ;
    2. En cuanto a retener el valor de una variable de un tick al siguiente, utilice variables estáticas para ello. Se declaran fuera del alcance de todas las funciones como los externos.
    Editar: Seguí este consejo y declaré variables antes de iniciar () por lo que, según tengo entendido, deberían mantener sus valores entre ticks.
    Cita Iniciado por ;
    3. No indicó si la condición de entrada se verifica en cada tic o en cada barra. Recomiendo encarecidamente realizar este tipo de controles únicamente en la apertura de cada bar. Aquí está el código que uso. Recuerde declarar barStart como una var de fecha y hora estática.
    Creo que esto es probablemente algo que tendré que volver a visitar. Trabajo en M15, lo que hace que cada barra se abra (o cierre) demasiado tarde para mi estilo de negociación. ¿Puedo preguntar por qué recomienda realizar estas comprobaciones en la apertura de cada barra en lugar de en cada tick?
    Cita Iniciado por ;
    El cierre del pedido es fácil. Utilice un tamaño de lote = 0,7 o lo que sea. Por supuesto, es necesario escribir algo de lógica para garantizar que el valor sea un múltiplo válido del tamaño de lote más pequeño, pero según sus comentarios parece que ya se ha hecho. Una vez que se ha cerrado la orden anterior, MT4 abre una nueva orden por el monto restante de la operación, digamos 0,3. El truco es que el nuevo pedido tiene un ID de ticket diferente. Si ha estado gestionando la operación mediante un ID de ticket, debe capturar el nuevo ID de ticket. Creo por tu código que solo tienes que realizar un seguimiento de uno abierto...
    Me gusta esta idea y creo que esto es lo que intentaré inicialmente. Sólo estoy tratando de descubrir cómo puedo lograrlo. -Editar: pensándolo bien, si lo hago de esta manera, me pican 2 extensiones, lo cual preferiría no hacer. Pero la idea es buena si abro dos operaciones al principio.
    Cita Iniciado por ;
    He encontrado una manera de cerrar parcialmente una operación en 3 pasos cuando se cumplen diferentes condiciones.
    Interesante: ¡estaré atento a las respuestas a tu consulta!

  10. #9
    He encontrado una manera de cerrar parcialmente una operación en 3 pasos cuando se cumplen diferentes condiciones. En este ejemplo se abren 2 lotes. Cuando se alcanza una ganancia de 100 pips, se cierra 0,5 lotes (Lotes1). Lo mismo ocurre cuando se alcanzan los 200 pips, se cierra otro lote de 0,5 (Lotes2). Finalmente el 1 Lote restante, quedará cerrado en la última condición. Código Insertado/CONDICIONES DE CIERRE DEL PEDIDO Doble Nuevos Lotes; if((Bid-OrderOpenPrice())gt;=1000*Point OrderLots()gt;1.6) NewLots=Lots1; if((Bid-OrderOpenPrice())gt;=2000*Point OrderLots()gt;1.1) NewLots=Lots2; if(trendlt;0 trendprevlt;0) NuevosLotes=OrderLots(); { Nuevos Lotes=NormalizeDouble(Nuevos Lotes,Dígitos); Imprimir(Lotes=,NuevosLotes); OrderClose(OrderTicket(),Nuevos Lotes,Oferta,3,Violeta);/cerrar posición return(0);/salir } Esto funciona como se supone, sin embargo, una vez que se abre una orden, aparece el siguiente mensaje de error, incluso si no se cumple ninguna de las condiciones: Código insertado MaxTrader V0.xx1 EURUSD,H4: Error de cierre de orden 4051 MaxTrader V0.xx1 EURUSD ,H4: número de lote no válido para la función OrderClose MaxTrader V0.xx1 EURUSD,H4: NewLots=0 Creo que esto tiene que ver con que la función OrderClose está lista para cerrar la orden inmediatamente, pero no se ha especificado ningún tamaño de lote en este momento. Nuevamente, el EA cierra los tamaños de lote especificados como se supone sin problemas, pero me gustaría deshacerme del error OrderClose. Cualquier sugerencia bienvenida.

  11. #10
    Según el código que has publicado, te queda un largo camino por recorrer. Déjame darte algunos consejos. 1. Nunca hagas una comparación de igualdad entre el precio y otra variable como lo has hecho (Ask==HighLineValue). Esto funcionará, la mayor parte del tiempo, pero ¿qué pasa con la situación en la que los números tienen dígitos no redondeados en el enésimo decimal? Esto sucede con la mayoría de las variables predeclaradas de MT4, como Alto, Bajo, Oferta, Demanda. Es mejor hacer Askgt;=HighLineValue. 2. En cuanto a retener el valor de una variable de un tick al siguiente, utilice variables estáticas para ello. Se declaran fuera del alcance de todas las funciones como los externos. 3. No indicó si la condición de entrada se verifica en cada tic o en cada barra. Recomiendo encarecidamente realizar este tipo de controles únicamente en la apertura de cada bar. Aquí está el código que uso. Recuerde declarar barStart como una var de fecha y hora estática. Código insertado if (barStart lt; Time#91;0#93/inicio de nueva barra { barStart = Time#91;0#93;;/código aquí } Eso es suficiente por ahora, intentaré responder tu pregunta sobre cierres parciales más adelante.

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.