Vitalie Postolache: Un contador debe ponerse en marcha y volver a su valor inicial cuando se alcanza un determinado umbral:
Gracias.
Ayúdame a resolver un problema.
Hay 3 posiciones de compra, apareció una posición de venta, necesitamos cerrar la posición de venta y la posición de compra más antigua. Deberían mantenerse dos posiciones de compra.
Los tengo todos cerrados.
voidOnTick() { //--- 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); } } } }
¿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.
¿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.
Artyom Trishkin: ¿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?
Hay 3 posiciones de compra, apareció una posición de venta, necesitamos cerrar la posición de venta y la posición de compra más antigua. Deberían mantenerse dos posiciones de compra.
Todos ellos están cerrados.
voidOnTick() { //--- 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.
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.