¡Pide! - página 32

 

Dave,

No te rindas tan fácilmente. Si te digo lo que tienes que hacer, tal vez esté mal y nunca aprenderás lo correcto.

Aquí tienes otro intento.

Buena suerte.

for (int cnt1=OrdersTotal()-1;cnt1>=0;cnt1--)

{

OrderSelect(cnt1, SELECT_BY_POS, MODE_TRADES);

if (OrderType()>=OP_SELL && OrderSymbol()==Symbol() && (OrderMagicNumber () == MagicNumber || MagicNumber==0))

{

OrderModify(OrderTicket(),OrderOpenPrice(),Ask+(15 *Point),Bid-(20*Point),Cyan); //Modify stop loss and take profit

return(0);

}

if (OrderType()>=OP_BUY && OrderSymbol()==Symbol() && (OrderMagicNumber () == MagicNumber || MagicNumber==0))

{

OrderModify(OrderTicket(),OrderOpenPrice(),Bid-(15*Point),Ask+(20*Point),Cyan); //Modify stop loss and take profit

return(0);

}

}

 

¿cómo puedo saber si mi orden ha alcanzado un stop-loss?

Hola chicos

Estoy programando un EA que utiliza un trailing-stop. El caso es que cuando llega a un stop-loss entonces abre una nueva orden. Entonces, la pregunta es que cómo decirle al EA que cuando una orden llega a un stop-loss entonces espere a la siguiente barra para decidir si quiere abrir una nueva orden... ¿alguna ayuda por favor?

 
 
iscuba11:
Dónde se produce la modificación en esto? El stop loss original era de 40, y el take profit de 100. Como parte del modo de reposo, el stop loss debe cambiar a 15 en cualquier orden abierta existente y el take profit debe cambiar a 25 en cualquier orden abierta existente.

Entradas de órdenes abiertas: Antes del modo de reposo

Antes del modo de reposo Stop Loss - 40 Antes del modo de reposo Take Profit-100 Después del modo de reposo Modificación de Stop Loss -15 Después del modo de reposo Modificación de Take Profit - 25

No estoy inicializando las configuraciones de las órdenes, estoy modificando las órdenes existentes ya colocadas y aún activas.

¡Gracias por su ayuda de todos modos! ¿Por qué algo tan simple parece tan difícil?

Dave <<

¿cómo se define el modo de suspensión?

solo hay que añadirlo antes del bucle ordermodify()

como..

if(sleepcome)

{

for(.....)

{

//delete my code gave you before or make it as comment

orderselect(.....);

.

.

.

}

}

esto puede ayudar

 
AnasFX:
Hola chicos estoy programando un EA que utiliza un trailing-stop. El caso es que cuando llega a un stop-loss entonces abre una nueva orden. Entonces, la pregunta es que como decirle al EA que cuando una orden llegue a un stop-loss entonces espere a la siguiente barra para decidir si quiere abrir una nueva orden... ¿alguna ayuda por favor?

comprobar el historial de operaciones si el ordercloseprice() = ordertoploss() entonces se cierra al alcanzar el sl

for(int hcnt=0;hcnt<HistoryTotal();hcnt++)

{

OrderSelect(hcnt, SELECT_BY_POS, MODE_HISTORY);

if(OrderSymbol()==Symbol())

{

if(OrderClosePrice()==OrderStopLoss())

.

.

.

}

}

 

Tiempo de stop-loss

phoenix:
comprobar el historial de operaciones si el ordercloseprice() = ordertoploss() entonces se cierra golpeando el sl

for(int hcnt=0;hcnt<HistoryTotal();hcnt++)

{

OrderSelect(hcnt, SELECT_BY_POS, MODE_HISTORY);

if(OrderSymbol()==Symbol())

{

if(OrderClosePrice()==OrderStopLoss())

.

.

.

}

}

Gracias por la idea hombre. También quiero saber el tiempo de su stop-loss y si ese tiempo está en la barra actual. Puedo tener muchos stop-loss, pero quiero saber si alcanza el stop-loss en la barra actual. ¿Debo comprobar la hora de cierre de la orden y compararla con la hora de la barra actual?

 

Mostrar compras y ventas en un EA

Me gustaría poner flechas u objetos de texto o algo así en el gráfico mientras mi EA se está ejecutando para mostrar sus acciones, pero los objetos no parecen aparecer. ¿Alguien tiene un ejemplo de EA que funcione y dibuje en el gráfico?

Además, el Probador de Estrategias tiene un botón para mostrar un gráfico después de ejecutar una prueba, pero no veo las flechas. ¿Es un problema de la versión 195, porque sé que las he visto en el pasado. ¿Cómo podemos modificar estos objetos flecha? Me gustaría hacerlas más grandes, pero tampoco sé cómo llegar al gráfico en el probador.

Supongo que ambos problemas son el mismo: conseguir que los usuarios sepan de los EAs.

 

Tengo un experto que estoy ajustando y quería evitar una señal de entrada si la barra previamente cerrada era extremadamente larga. (>30 pips) He añadido la frase de abajo como una condición, pero no parece ser reconocido. No soy un buen codificador pero tengo suerte con los expertos en ajustes y estoy aprendiendo sobre la marcha. ¿Podría alguien decirme qué lógica o frase debo usar aquí?

En la sección

-----------------------------------

void CheckForSignals() {

-----------------------------------

He incluido la condición;

-----------------------------------

if ((Close[1])-(Open[1])<30 ) {

buysig=true;

-----------------------------------

Gracias por cualquier sugerencia,

MJ

 
marketjouster:
Tengo un experto que estoy retocando y quería evitar una señal de entrada si la barra cerrada anteriormente era extremadamente larga. (>30 pips) He añadido la frase de abajo como una condición, pero no parece ser reconocido. No soy un buen codificador pero tengo suerte con los expertos en ajustes y estoy aprendiendo sobre la marcha. ¿Podría alguien decirme qué lógica o frase debo usar aquí?

si ((Close[1])-(Open[1])<30 ) ...

MJ

MJ,

Asumiendo que Close[1] está por ejemplo en 1.2835 y Open[1] está en 1.2805 (barra alcista), la diferencia es de 0.0030 por lo que la comprobación contra 30 no funcionará. Además, ¿qué pasa si Close[1] está en 1,2805 y Open[1] en 1,2835 (barra bajista)? Obtendrá -0.0030.

Así que en primer lugar necesitas usar Close[1]-Open[1] < (30*Punto) para remediar el primer problema, y luego tienes que usar la función MathAbs() para obtener el valor absoluto de la resta.

En resumen usa: if MathAbs(Close[1]-Open[1])<(30*Point)....

HTH

Yannis

 

Código para evitar la entrada de una barra larga

Yannis:
MJ,

Asumiendo que Close[1] está por ejemplo en 1.2835 y Open[1] está en 1.2805 (barra alcista), la diferencia es de 0.0030 por lo que la comprobación contra 30 no funcionará. Además, ¿qué pasa si Close[1] está en 1,2805 y Open[1] en 1,2835 (barra bajista)? Obtendrá -0.0030.

Así que en primer lugar necesitas usar Close[1]-Open[1] < (30*Punto) para remediar el primer problema, y luego tienes que usar la función MathAbs() para obtener el valor absoluto de la resta.

En resumen usa: if MathAbs(Close[1]-Open[1])<(30*Point)....

HTH

Yannis

Muchas gracias Yannis. Tu explicación es muy clara y agradezco la inclusión del código real. ¿Podría plantear una pregunta complementaria? Si yo quería ser capaz de ajustar el número de pips para la barra larga en la ventana de propiedades de asesores expertos, podría utilizar;

extern int LBE=30; // LBE es 'Long Bar Entry'. Por defecto podría ser 30

en la sección de la cabecera del experto y luego utilizar LBE en lugar de 30 en su línea de código?

si MathAbs(Cierre[1]-Apertura[1])<(LBE*Punto)

Esto me permitiría probar manualmente las configuraciones de las variantes de los pip, y optimizarlo en las pruebas posteriores.

MJ

Razón de la queja: