Hola, podrían ayudarme por favor - Tengo un problema: El robot entra en una posición y en el siguiente tick modifica su stop-loss al mínimo anterior y necesito que el stop-loss se modifique sólo cuando se cierre la vela en la que se abrió la posición
void TrailingStop()
{
for(int i=0;i<OrdersTotal();i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==true);
{
if (OrderSymbol()==Symbol() && OrderMagicNumber()==Magic)
{
if (OrderType()==OP_BUY)
{
double LOW_1 = iLow(NULL,0,1);
bool res=OrderModify(OrderTicket(),OrderOpenPrice(),LOW_1,OrderTakeProfit(),0,White);
if(!res) Print("Ошибка модификации ордера. Код ошибки=",GetLastError());
}
if (OrderType()==OP_SELL)
{
double HIGH_1 = iHigh(NULL,0,1);
res=OrderModify(OrderTicket(),OrderOpenPrice(),HIGH_1,OrderTakeProfit(),0,White);
if(!res) Print("Ошибка модификации ордера. Код ошибки=",GetLastError());
}
}
}
}
return;
}
remjte: ¡Caballeros! ¿Puedes decirme el código que dejará de probar un EA cuando no haya suficiente margen para abrir una posición? Gracias.
Si AccountFreeMarginCheck() es inferior a un determinado valor (por ejemplo, menos del 50% de AccountFreeMargin) - salir de la función de negociación, la prueba termina rápidamente porque los bucles vacíos son casi descargables.
evillive: Si AccountFreeMarginCheck() es inferior a un determinado valor (por ejemplo, menos del 50% de AccountFreeMargin) - salida de la función comercial, la prueba termina rápidamente, porque los bucles vacíos casi no se cargan.
Sinceramente, aún estoy muy verde, he encontrado este trozo de código ¿me podéis decir cómo corregirlo?
zhezheria: Permítanme escribir de una manera más sencilla: cómo escribir esta condición - No modificar una orden abierta hasta que aparezca una nueva vela
Trabaja en la apertura de un nuevo bar en el plazo correspondiente. Un montón de ejemplos de código
Sinceramente, aún estoy muy verde, he encontrado este trozo de código ¿me podéis decir cómo corregirlo?
if (AccountFreeMarginCheck(Symbol(), a_cmd_0, l_lots_4) <= 0.0) return (-1); if (GetLastError() == 134/* NOT_ENOUGH_MONEY */) return (-2); return (l_lots_4);
No hace falta que lo edites, te servirá. A no ser que sustituyas las variables por tus propios nombres.
Pero si necesitamos menos riesgo, entonces si (AccountFreeMarginCheck(Symbol(), a_cmd_0, l_lots_4) <= AccountFreeMargin()*0.5) devuelve (-1); - en este caso, si queda un 50% o menos de dinero libre después de abrir la posición con el lote especificado, entonces devuelve (-1)
¿Puedes darme una pista, por favor? Necesito escribir una parte de código en la que se seleccione el segundo pedido de la lista y luego se elimine (pendiente). Devuelve 4051 cuando OrderSelect(1, SELECT_BY_POS, MODE_TRADES)
remjte: ¡Caballeros! ¿Puedes decirme el código que dejará de probar un EA cuando no haya suficiente margen para abrir una posición? Gracias.
// проверяем доступность свободных средствif(AccountFreeMarginCheck(Symbol(),OP_BUY,OpenLot)<=0 || GetLastError()==134)
{
Print("It is impossible to open the order Buy, not enough money.");
return(0);
}
// проверяем доступность свободных средствif(AccountFreeMarginCheck(Symbol(),OP_SELL,OpenLot)<=0 || GetLastError()==134)
{
Print("It is impossible to open the order Sell, not enough money.");
return(0);
}
Pomid: ¿Puedes darme una pista, por favor? Necesito escribir una parte de código en la que se seleccione el segundo pedido de la lista y luego se elimine (pendiente). Devuelve 4051 cuando OrderSelect(1, SELECT_BY_POS, MODE_TRADES)
El recuento de pedidos empieza por 0. Try, OrderSelect(0, SELECT_BY_POS, MODE_TRADES)
Hola, podrían ayudarme por favor - Tengo un problema: El robot entra en una posición y en el siguiente tick modifica su stop-loss al mínimo anterior y necesito que el stop-loss se modifique sólo cuando se cierre la vela en la que se abrió la posición
o cómo deshacerse de este error
¡Caballeros! ¿Puedes decirme el código que dejará de probar un EA cuando no haya suficiente margen para abrir una posición?
Gracias.
Si AccountFreeMarginCheck() es inferior a un determinado valor (por ejemplo, menos del 50% de AccountFreeMargin) - salida de la función comercial, la prueba termina rápidamente, porque los bucles vacíos casi no se cargan.
Sinceramente, aún estoy muy verde, he encontrado este trozo de código ¿me podéis decir cómo corregirlo?
if (AccountFreeMarginCheck(Symbol(), a_cmd_0, l_lots_4) <= 0.0) return (-1);
if(GetLastError() == 134/* NOT_ENOUGH_MONEY */) return (-2);
return (l_lots_4);
Permítanme escribir de una manera más sencilla: cómo escribir esta condición - No modificar una orden abierta hasta que aparezca una nueva vela
Sinceramente, aún estoy muy verde, he encontrado este trozo de código ¿me podéis decir cómo corregirlo?
if (AccountFreeMarginCheck(Symbol(), a_cmd_0, l_lots_4) <= 0.0) return (-1);
if (GetLastError() == 134/* NOT_ENOUGH_MONEY */) return (-2);
return (l_lots_4);
No hace falta que lo edites, te servirá. A no ser que sustituyas las variables por tus propios nombres.
Pero si necesitamos menos riesgo, entonces si (AccountFreeMarginCheck(Symbol(), a_cmd_0, l_lots_4) <= AccountFreeMargin()*0.5) devuelve (-1); - en este caso, si queda un 50% o menos de dinero libre después de abrir la posición con el lote especificado, entonces devuelve (-1)
¡Caballeros! ¿Puedes decirme el código que dejará de probar un EA cuando no haya suficiente margen para abrir una posición?
Gracias.
¿Puedes darme una pista, por favor? Necesito escribir una parte de código en la que se seleccione el segundo pedido de la lista y luego se elimine (pendiente). Devuelve 4051 cuando OrderSelect(1, SELECT_BY_POS, MODE_TRADES)