Cualquier pregunta de los recién llegados sobre MQL4 y MQL5, ayuda y discusión sobre algoritmos y códigos - página 82
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
Tendrás la última perdiendo, qué hacer con ella y qué parámetros ajustar para ti, creo que lo descubrirás
Gracias, creo que lo tengo.
¿Cómo puedo hacer que el lote vuelva a su valor original después de la toma de beneficios?
{
lot=0.1
}
Gracias, creo que lo tengo.
¿Cómo consigo que el lote vuelva a su valor original después de la toma de beneficios?
{
lot=0.1
}
Tengo el siguiente esquema
if (OrdersTotal()==0)
{
abierto con lote inicial
}
si no
...
es decir, si no hay pedidos, no se abrirá con el lote antiguo
Por supuesto, es posible memorizar cada orden, pero no nos dicen cómo hacerlo.Un contador debe ponerse en marcha y volver a su valor inicial cuando se alcanza un determinado umbral:
{
//---
int b_STOP,s_STOP,b=0,s=0;
for (int i=0; i<OrdersTotal(); i++)
{
if (OrderSelect(i, SELECT_BY_POS)==true)
{
if (OrderSymbol()!=Symbol() || OrderMagicNumber()!=Magic) continue;
if (OrderType()==OP_BUY) b++;
if (OrderType()==OP_SELL) s++;
if (OrderType()==OP_BUYSTOP) b_STOP++;
if (OrderType()==OP_SELLSTOP) s_STOP++;
}
if (OrderType()==OP_BUY)
{
if(b>=1&&s==1)//бай позиций больше или 1 и появилась SELL позиция
{
OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(Bid,Digits),3,CLR_NONE);
CLOSEORDER(OP_SELL);
}
}
}
}
Explique por qué la función OrderProfit()<0 no funciona?
{
if(OrderSelect(q,SELECT_BY_POS,MODE_HISTORY))
{
if(OrderType()<2 && OrderMagicNumber()==magic)
{
if (OrderProfit()<0)
{
if (DayOfWeek()==1)
{
day1++;
Print ("Понедельник SL=",day1);
}
if (DayOfWeek()==2)
{
day2++;
Print ("Вторник SL=",day2);
}
}
}
}
}
quiero ver cuántos stoploss por día de la semana
{
if(OrderSelect(l,SELECT_BY_POS,MODE_HISTORY))
{
if(OrderProfit()<0 && OrderType()<2)
{
oldticket=OrderTicket();
}
if (oldticket>=ticket)
{
ticket=oldticket;
lot=OrderLots()*4;
}
if (OrderProfit()>0 && OrderType()<2)
{
lot=0.01;
}
}
}
y aquí creo que es la misma razón por la que no funciona
Explique por qué la función OrderProfit()<0 no funciona?
{
if(OrderSelect(q,SELECT_BY_POS,MODE_HISTORY))
{
if(OrderType()<2 && OrderMagicNumber()==magic)
{
if (OrderProfit()<0)
{
if (DayOfWeek()==1)
{
day1++;
Print ("Понедельник SL=",day1);
}
if (DayOfWeek()==2)
{
day2++;
Print ("Вторник SL=",day2);
}
}
}
}
}
quiero ver cuántos stoploss por día de la semana
{
if(OrderSelect(l,SELECT_BY_POS,MODE_HISTORY))
{
if(OrderProfit()<0 && OrderType()<2)
{
oldticket=OrderTicket();
}
if (oldticket>=ticket)
{
ticket=oldticket;
lot=OrderLots()*4;
}
if (OrderProfit()<0 && OrderType()<2)
{
lot=0.01;
}
}
}
y aquí tomo que es la misma razón por la que no funciona
Porque DayOfWeek() devuelve el número de orden del día de la semana de la última hora conocida del servidor.
Y necesita el día de la semana de la hora de cierre del pedido: TimeDayOfWeek(OrderCloseTime());
Porque DayOfWeek() devuelve el número de orden del día de la semana de la última hora conocida del servidor.
Y necesita el día de la semana de la hora de cierre del pedido: TimeDayOfWeek(OrderCloseTime());
Pero el resultado es el mismo, ya que si se ignorasi(OrderProfit()<0) y hay un bucle, las variables obtienen valores grandes.
2017.01.19 00:42:47.883 2014.02.20 23:59:48 EURUSD,H1: Понедельник SL=963666
2017.01.19 00:42:47.883 2014.02.20 23:59:48 EURUSD,H1: Вторник SL=1430207
2017.01.19 00:42:47.883 2014.02.20 23:59:48 EURUSD,H1: Понедельник SL=963665
¿Y qué pasa con el bucle con un lote? Lo he copiado mal aquí, he corregido el signoif(OrderProfit()>0&&OrderType()<2), pero no cambia la esencia, el bucle funciona correctamente sin esta condición.
Pero el resultado es el mismo, ya quesi se ignora(OrderProfit()<0) y hay un bucle, las variables tienen valores grandes.
2017.01.19 00:42:47.883 2014.02.20 23:59:48 EURUSD,H1: Понедельник SL=963666
2017.01.19 00:42:47.883 2014.02.20 23:59:48 EURUSD,H1: Вторник SL=1430207
2017.01.19 00:42:47.883 2014.02.20 23:59:48 EURUSD,H1: Понедельник SL=963665
¿Y sobre el bucle con un lote? Lo he copiado mal aquí, he corregido el signoif(OrderProfit()>0&&OrderType()<2), pero no cambia la esencia, el bucle funciona correctamente sin esta condición.
¿Dónde se declaran el día 1 y el día 2?
¿Dónde se declaran el día 1 y el día 2?
Sospecho que estoy seleccionando mal el orden, no funciona(OrderProfit()<0), tengo que ser más específico sobre el orden que necesito. No sé por qué se salta una orden cuando la última se cerró en Take-Point y no hay otras. ¿Quizás, si quiero buscar en el historial, el bucle debería construirse de otra manera?
{
if(OrderSelect(w,SELECT_BY_POS,MODE_HISTORY))
La razón es que los Asesores Expertos construyen bucles con condiciones similares y funcionan como se requiere, pero funcionan usandoOrdersTotal().
{
if(OrderSelect(n,SELECT_BY_POS))
{
if(OrderMagicNumber()==magic)
{
if(OrderType()>OP_SELL)
{
//---
int b_STOP,s_STOP,b=0,s=0;
for (int i=0; i<OrdersTotal(); i++)
{
if (OrderSelect(i, SELECT_BY_POS)==true)
{
if (OrderSymbol()!=Symbol() || OrderMagicNumber()!=Magic) continue;
if (OrderType()==OP_BUY) b++;
if (OrderType()==OP_SELL) s++;
if (OrderType()==OP_BUYSTOP) b_STOP++;
if (OrderType()==OP_SELLSTOP) s_STOP++;
}
if (OrderType()==OP_BUY)
{
if(b>=1&&s==1)//бай позиций больше или 1 и появилась SELL позиция
{
OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(Bid,Digits),3,CLR_NONE);
CLOSEORDER(OP_SELL);
}
}
}
}
Esto no puede resolverse en un solo ciclo. En este bucle, se deben memorizar los tickers de las órdenes a eliminar en el array, en el siguiente bucle, se deben eliminar por tickers.
Además, tienes un lío con las llaves, estás trabajando con órdenes fuera del bloqueOrderSelect{}, esto es incorrecto.