![MQL5 - Lenguaje de estrategias comerciales para el terminal de cliente MetaTrader 5](https://c.mql5.com/i/registerlandings/logo-2.png)
Está perdiendo oportunidades comerciales:
- Aplicaciones de trading gratuitas
- 8 000+ señales para copiar
- Noticias económicas para analizar los mercados financieros
Registro
Entrada
Usted acepta la política del sitio web y las condiciones de uso
Si no tiene cuenta de usuario, regístrese
Comprar y vender en los 100
Zamanib,
Entiendo lo que escribiste, pero no veo como cierras con ganancias.
Esto me parece un EA de tipo Hedge.
Hay varios de esos en forex-tsd,
y usted no tiene que Martingala.
Big Be
Alguien puede compartir ideas/código sobre cómo cerrar una orden al valor de TakeProfit.
Por alguna razón 'TakeProfit' en la función OrderSend() no siempre funciona en las órdenes de venta/corta en MT4, aunque funciona bien en las órdenes de compra/larga.
Escribí un código comparando el valor del TakeProfit de la orden con el precio actual, pero no funciona correctamente. ¿Alguna idea?
euroLos largos se cierran al precio "bid", mientras que los cortos se cierran al precio "ask".![](https://c.mql5.com/forextsd/smiles/nerd.png)
Zamanib,
Entiendo lo que has escrito, pero no veo cómo cierras con beneficios.
Esto me parece un EA de tipo Hedge.
Hay varios de esos en forex-tsd,
y usted no tiene que Martingala.
Big BeVeo que el mercado se mueve en ondas hacia arriba y hacia abajo alguna semana se obtiene 2 ciclos arriba / abajo tengo un stratey diferente cuando la tendencia. comercio manualmente
Por favor, diríjase a la ea de cobertura. Veo muchos de ellos. pero no lo que excatly lo que quiero.
¿problema de código o de plataforma?
los largos se cierran al precio "bid", mientras que los cortos se cierran al precio "ask".
Gracias por responder.
Por alguna razón mi código no funciona:
if (OrderSelect(orderNo, SELECT_BY_TICKET)==true) {
if (OrderType() == OP_BUY && Close[0] >= OrderTakeProfit()) CloseOrder(orderNo);
si (OrderType() == OP_SELL && Close[0] <= OrderTakeProfit()) CloseOrder(orderNo); }
Agradecería que me aconsejaran.
euro
Gracias por responder.
Por alguna razón mi código no funciona:
if (OrderType() == OP_BUY && Close[0] >= OrderTakeProfit()) CloseOrder(orderNo);
if (OrderType() == OP_SELL && Close[0] <= OrderTakeProfit()) CloseOrder(orderNo); }
[/PHP]
I would be grateful for advice.
euroCorrecto; "Close[0]" es el precio "bid", que no es el precio contra el que se cierra una OP_SELL. Una OP_SELL se cierra contra el precio "ask", que está unos pocos pips (aka spread) por encima del precio "bid".
Cuando su EA se ejecuta, el precio "bid" también está disponible como la variable llamada "Bid" y el precio "ask" como la variable llamada "Ask". Así que el fragmento de código se vería mejor como
[PHP]if (OrderSelect(orderNo, SELECT_BY_TICKET)==true) {
if (OrderType() == OP_BUY && Bid >= OrderTakeProfit()) CloseOrder(orderNo);
if (OrderType() == OP_SELL && Ask <= OrderTakeProfit()) CloseOrder(orderNo); }
Por favor, ayuda en el código, gracias...
Hola,
Soy nuevo en la escritura de EA, yo estaba tratando de lo siguiente, pero tiene un error de "entrada no válida para OrderModify función", ¿Puede alguien por favor, echar un vistazo y ayudar? Gracias de antemano.
void ModifyHedgeSL(int SL) {
if (SL<1) return;
bool bres;
double sl,openadj;
if (lastopenbuy==1 && lastopensell==0) {openadj=Ask-Bid;} else {openadj=0;}
for (int i = 0; i < OrdersTotal(); i++) {
OrderSelect (i, SELECT_BY_POS,MODE_TRADES);
if ( OrderSymbol() == Symbol() || OrderMagicNumber() == expertId && OrderType() == OP_BUY )
{
sl = GetLastLongOpenPrice()-openadj-SL*Point;
bres = OrderModify (OrderTicket(), OrderOpenPrice(), sl, OrderTakeProfit(), 0, White);
if (bres) Print("Modificación de la compra de cobertura completada");
if (!bres) Print("Error al modificar la orden Hedge BUY : ",ErrorDescription(GetLastError()));
}
if ( OrderSymbol() == Symbol() | OrderMagicNumber() == expertId && OrderType() == OP_SELL )
{
sl = GetLastShortOpenPrice()-openadj+SL*Point;
bres = OrderModify (OrderTicket(), OrderOpenPrice(), sl, OrderTakeProfit(), 0, Gold);
if (bres) Print("Modificación de la venta de cobertura completada");
if (!bres) Print("Error al modificar la orden Hedge SELL: ",ErrorDescription(GetLastError()));
}
}
return;
}
double GetLastLongOpenPrice() {
int ord;
double LastLongOpenPrice=0;
//----
for (int i = 0; i <= OrdersTotal(); i++)
{
OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
if (OrderSymbol() == Symbol() && OrderMagicNumber()==expertId && OrderType() == OP_BUY)
{
LastLongOpenPrice=OrderOpenPrice();
}
}
if (LastLongOpenPrice>0) {return(LastLongOpenPrice);}
si no, {return(-1);}
}
Cómo codificar las órdenes de compra/venta cuando se alcanza el SL
Por ejemplo, si compro 1 lote de EUR/JPY a 164,30 y Sl a 164,00.
si se alcanza el SL, entonces colocaré otra orden de compra al mismo precio, 164,30, con el mismo SL en 164, y con más lotes, digamos 1,5. Entonces, si el SL es golpeado de nuevo, otra orden de compra será colocada para comprar 2 lotes al mismo precio con el mismo SL.
¿Hay algún código para esto? Gracias.
Por ejemplo, si compro 1 lote de EUR/JPY a 164,30 y Sl a 164,00.
si se alcanza el SL, entonces colocaré otra orden de compra al mismo precio, 164,30, con el mismo SL en 164, y con más lotes, digamos 1,5. Entonces si el SL es golpeado de nuevo, otra orden de compra será colocada para comprar 2 lotes al mismo precio con el mismo SL.
¿Hay algún código para esto? ¡Gracias!Mira este hilo sobre Frank EA https://www.mql5.com/en/forum
Creo que es lo que necesitas o puedes usarlo como ejemplo.
ok
Mira este hilo sobre Frank EA https://www.mql5.com/en/forum creo que es lo que necesitas o puedes usarlo como ejemplo.
tks mucho newdigital, cualquier pregunta la pondré aquí. tks de nuevo.
Cuestión de TP
if (OrderType() == OP_BUY && Bid >= OrderTakeProfit()) CloseOrder(orderNo);
if (OrderType() == OP_SELL && Ask <= OrderTakeProfit()) CloseOrder(orderNo); }
Ralph,
como puedes ver, he llamado a una función separada CloseOrder() donde he usado 'Ask' y 'Bid' como recomiendas, pero el problema sigue existiendo.
// Función CloseOrder **********************************************************
bool CerrarOrden(int ordenT) {
doble sA;
if (OrderSelect(orderT, SELECT_BY_TICKET)==true) {
if (OrderType() == OP_BUY) sA = Oferta;
si no, sA = Ask;
bool bClosed = OrderClose(orderT,OrderLots(),sA,0,CLR_NONE);
si (bClosed == 1) {
pTrades = 0; return(1); }
si no, return(0); }}
**********************************************************
Esperaba que esto garantizara que la operación se cerrara una vez que se alcanzara el TP, pero no es el caso, vea el gráfico adjunto, donde la orden corta se abrió a 104.03 con el TP en 103.79. Aunque el precio lo alcanzó (TP) la orden no se cerró.