¿Cómo codificar? - página 311

 

Hola Mladen, como siempre, ¡eres el mejor!

mladen:
Terrance Utilice Close[0] en ese caso. Casi todos los EAs usan close para ese propósito, así que creo que también te funcionará
 

...

Si su EA se ejecuta sólo cuando la barra comienza, puede ser un par de razones :

- Esta limitado a trabajar solo en una nueva barra. Este enfoque tiene algunos problemas si los trailing stops y algunas cosas similares deben ser manejados, pero si funciona con la pérdida de la parada fija y tomar ganancias que es todo lo mismo

- o está comprobando las señales en una barra cerrada (que es la forma más común (y mejor) de comprobar las señales). En consecuencia, parece que lo está haciendo cuando se forma una nueva barra mientras que, en realidad, está recibiendo señales en una barra cerrada que se acaba de formar. Trabajar sobre señales de barra cerrada es la mejor práctica en los EAs y si tu EA está funcionando así, mejor no cambiar nada

Premeus:
Me he dado cuenta de que mi EA no se ejecuta entre el movimiento del precio en el marco de tiempo M1. Sé que el EA se ejecutará cada tick que entre.

Pero he visto que se ejecuta cada vez que se inicia una nueva barra.

¿Estoy entendiendo mal?

¿Existe la forma de forzar que el EA se active cada tick que entra?

Trato de controlar mis ganancias y perdidas usando ganancias y perdidas no en pips. Cuando el pico sucede EA no cerrar la orden cuando llegar a la configuración de los beneficios o la pérdida hasta que la nueva barra se producen.

Cualquiera que me ayude a resolver este problema.

Soy nuevo en la codificación de EA.

Gracias de antemano.
 

Gracias, mladen.

Probaré tu sugerencia.

 

Saludos Dioses de la codificación,

Necesito ayuda para encontrar una función de EA que controle la ejecución del envío de órdenes en el sentido de que no se pueda abrir una orden si ya existe una orden al mismo precio.

Lógica simple: si el precio de apertura de la orden y el tipo de orden = un precio de apertura y tipo de orden existente, entonces salir y buscar el siguiente criterio de entrada

Además, necesito una función que impida que se ejecute una orden si está a x pips de un precio ya existente.

Lógica simple: si el precio de apertura de la orden y el tipo es < el precio de apertura de la última orden y el tipo + x pips, entonces salir y buscar el siguiente criterio de entrada

Gracias,

Pip

 

...

Pruebe estas 2 funciones
: la primera es para averiguar si hay una orden con el mismo precio abierto

. La segunda es para comprobar si hay una orden que está a menos de nnn puntos del precio deseado

.

Ambos devuelven true si el precio es igual o si la distancia del precio de algunas órdenes actualmente abiertas está dentro de la distancia especificada

bool existsAtSamePrice(int magicNumber, double price)

{

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

{

if (!OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) continue;

if (OrderSymbol()!=Symbol()) continue;

if (OrderMagicNumber()!=magicNumber) continue;

if (CompareDouble(OrderOpenPrice(),price)) return(true);

}

return(false);

}

//

//

//

//

//

bool existsAtApproximatePrice(int magicNumber, double price, double distance)

{

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

{

if (!OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) continue;

if (OrderSymbol()!=Symbol()) continue;

if (OrderMagicNumber()!=magicNumber) continue;

if (MathAbs(OrderOpenPrice()-price)< distance) return(true);

}

return(false);

}

//

//

//

//

//

bool CompareDouble(double val1, double val2)

{

return(NormalizeDouble(val1,Digits)==NormalizeDouble(val2,Digits));

}

Pip:
Saludos Dioses de la codificación,

Necesito ayuda para encontrar una función de EA que controle la ejecución del envío de órdenes en el sentido de que no se pueda abrir una orden si ya existe una orden al mismo precio.

Lógica simple: si el precio de apertura de la orden y el tipo de orden = un precio de apertura de la orden y un tipo de orden existentes, entonces salir y buscar el siguiente criterio de entrada

Además, necesito una función que impida que se ejecute una orden si está a x pips de un precio ya existente.

Lógica simple: si el precio de apertura de la orden y el tipo es < el precio de apertura de la última orden y el tipo + x pips, entonces salir y buscar el siguiente criterio de entrada

Gracias,

Pip
 
mladen:
Pueden ser un par de razones, pero las más comunes son:
- el stop loss y/o el take profit están demasiado cerca del precio actual

- tu broker es de tipo ECN/STP en cuyo caso primero tienes que colocar una orden con el stop loss y el take profit a 0 y sólo cuando se abre una orden puedes modificar el stop loss y/o el take profit a los valores deseados (respetando el punto anterior por supuesto)

¡Hola!

¡Gracias por la ayuda!

Entonces, si entiendo bien, si inserto TakeProfit y StopLoss en OrderSend como "reglas" Exsternal, este trabajo EA derecho sólo en los corredores no-ECN?

Lo siento por mi inglés

 

...

Con los brokers tipo ECN/STP tienes que abrir una orden con stop loss y/o take profit puesto a 0 y cuando la orden ya está abierta, sólo entonces puedes modificar el stop loss y/o take profit

pearl1:
¡Hola!

¡Gracias por la ayuda!

Entonces, si entiendo bien, si inserto el TakeProfit y el StopLoss en el OrderSend como "reglas" externas, ¿este EA funciona correctamente sólo en los brokers No-ECN?

Perdón por mi inglés
 
mladen:
Si, con los brokers ECN/STP tienes que abrir una orden con stop loss y/o take profit a 0 y cuando la orden ya está abierta, sólo entonces puedes modificar el stop loss y/o take profit

Gracias de nuevo, así que ... ¿cómo puedo arreglar esto? lo siento

 

...

Como he dicho, tienes que hacerlo en 2 pasos :

1. paso - abrir una orden (usando OrderSend()) con stop los y take profit puestos a 0

2. paso - modificar esa orden (usando OrderModify()) estableciendo el stop loss y el take profit a los valores deseados

Por lo tanto, el código tiene que ser cambiado para hacer el trabajo en 2 pasos, en lugar de uno

pearl1:
Gracias de nuevo, así que... ¿cómo puedo arreglar esto? lo siento
 

Nuevo en la codificación

Hola a todos,

Soy nuevo en la codificación y he estado aprendiendo poco a poco el lenguaje y la sintaxis, pero he llegado a una pregunta acerca de cómo MT4 actualiza las variables.

He tratado de codificar un simple EA que muestre el mayor beneficio que una operación actualmente abierta ha tenido y sólo debe actualizarse si se alcanza un nuevo máximo, pero lo que está sucediendo es que la cantidad se está moviendo hacia abajo y hacia arriba como lo hace el beneficio, parece que no puedo ver mi error en la lógica del código.

Compruebo que la operación seleccionada sigue abierta

t_CloseTime=OrderCloseTime(); //devuelve 0 si la orden no está cerrada

if(t_CloseTime==0) //La orden está cerrada si no es cero.

{

if(OrderProfit() > LastProfitHigh) LastProfitHigh=OrderProfit();

if(LastProfitHigh >= MinProfit && MinProfitReached==false) MinProfitReached=true;

}//endif

Entonces, si la lógica es correcta por qué esta variable "LastProfitHigh" sube y baja....

Gracias por su ayuda.

Razón de la queja: