¡Pide! - página 64

 
ryanklefas:
Creo que la función normalizeDouble también te funcionaría. También he visto código que utiliza las funciones MathFloor y MathCeiling para lograr lo mismo.

Entonces, lo que dices es que el cálculo debería funcionar de la forma en que lo tengo codificado en la sección "Variable Begin" como se indica a continuación:

double LotSize = NormalizeDouble(Lot_Size_Ratio*((AccountBalance()/1000)), 3);

Entonces puede que mi problema esté en otra parte, porque cuando pongo lo siguiente

extern bool LotSizeManager = True;

el EA no ejecuta ninguna operación. Cuando lo pongo en false ejecuta las operaciones. Supongo que no ejecuta ninguna operación cuando este valor es True porque hay un problema de cálculo.

 
waaustin:
double LotSize = NormalizeDouble(Lot_Size_Ratio*((AccountBalance()/1000)), 3);

double LotSize = NormalizeDouble(Lot_Size_Ratio*((AccountBalance()/1000)), 1); // 0: fulllots, 1: minilots, 2: microlots, 3: nunca utilizado

 
Michel:
double LotSize = NormalizeDouble(Lot_Size_Ratio*((AccountBalance()/1000)), 1); // 0: fulllots, 1: minilots, 2: microlots, 3: nunca usado

Así que lo que dices es que depende de la precisión que quiero que tenga el tamaño del lote. Así que si quiero una precisión de microlotes, como 0.75 Lotes, entonces usaría un valor de 2.

 
waaustin:
Así que lo que dices es que depende de la precisión que quiero que tenga el tamaño del lote. Así que si quiero una precisión de microlotes, como 0,75 Lotes, entonces usaría un valor de 2.

Sí, lo has conseguido.

Pero asegúrate de que los microlotes (2 decimales) están bien para tu broker y el tipo de cuenta que tienes.

No sé muy bien cómo funciona IBFX con las mini cuentas, es decir, si los microlotes en las mini cuentas también se llaman minilotes y tienen sólo 1 decimal. Quizás alguien que use IBFX pueda responder aquí ?

No obstante, lo mejor es preguntar a tu broker.

 
Michel:
Sí, ¡lo has conseguido!

Pero asegúrate de que los microlotes (2 decimales) están bien para tu broker y el tipo de cuenta que tienes.

No sé muy bien cómo funciona IBFX con las mini cuentas, es decir, si los microlotes en las mini cuentas también se llaman minilotes y tienen sólo 1 decimal. Tal vez alguien que use IBFX pueda responder aquí ?

No obstante, lo mejor es que preguntes a tu broker.

Muchas gracias. El código de LotSizing parece funcionar bien. Sin embargo, parece que tengo otro error en el código en alguna parte y no puedo resolverlo.

Tengo el EA cargado en más de un par, pero sólo coloca operaciones en un par. El código de LotSizing funciona bien. Pero, no coloca más operaciones en cualquier otro par de divisas. Sin embargo, cuando establezco el siguiente valor:

extern bool LotSizeManager = False;

el EA coloca operaciones para todos los pares de divisas a los que tengo el EA conectado.

 
waaustin:
Muchas gracias. El código de LotSizing parece funcionar bien. Sin embargo, parece que tengo otro error en el código en alguna parte y no puedo averiguarlo.

Tengo el EA cargado en más de un par, pero sólo coloca operaciones en un par. El código LotSizing funciona bien. Pero, no coloca más operaciones en ningún otro par de divisas. Sin embargo, cuando establezco el siguiente valor:

extern bool LotSizeManager = False;

El EA coloca operaciones para cada par de divisas que tengo el EA adjunto.

No importa. ¡He descubierto donde está el problema! Gracias por la ayuda.

 

Problema: A la hora definida por el usuario, el EA intenta colocar una orden pendiente pero el precio actual es demasiado cerrado para que el broker acepte la orden.

Pregunta: ¿Cómo puedo codificar un bucle que compruebe el iOpen de la barra de 1 minuto cada minuto hasta que acepte la orden? No estoy seguro de cómo incorporar la comprobación cada minuto hasta que la orden pueda ser introducida. Parece que el código actual se olvida de lo que está buscando después de unos minutos porque una vez que el precio está fuera del camino de la entrada no pasa nada.

Creo que una parte es la siguiente

double Open_Price_Every_Minute;

Open_Price_Every_Minute = iOpen(NULL,PERIOD_M1,0);

Open_Price_Every_Minute = NormalizeDouble(Open_Price_Every_Minute, Digits);

if (Allow_LimitOrder_for_Entry_A==false)

{

OrderSend(Symbol(), OP_BUYSTOP, Lots, LA, Slippage, LASL, LATP, "", Magic, 0, FireBrick);

OrderSend(Symbol(), OP_SELLSTOP, Lots, SA, Slippage, SASL, SATP, "", Magic, 0, FireBrick);

}

Como siempre, Gracias por tu ayuda y tiempo.

James

 
proverbs:
Parece que el código actual se olvida de lo que está buscando después de unos minutos porque una vez que el precio está fuera de la entrada no pasa nada.

No creo que quieras tener el bucle funcionando indefinidamente en un EA. Nunca lo he probado, pero no creo que sea algo bueno. Si quieres que el EA "recuerde" lo que ha estado haciendo, guarda los datos que necesites recordar como variables estáticas (varaibles declaradas fuera de la función principal) o como variables globales de MT4.

 
ryanklefas:
No creo que quieras tener el bucle corriendo indefinidamente en un EA. Nunca lo he probado, pero no creo que sea algo bueno. Si quieres que el EA "recuerde" lo que ha estado haciendo, guarda los datos que necesites recordar como variables estáticas (varaibles declaradas fuera de la función principal) o como variables globales de MT4.

Hola.

Poner el procesamiento de ea en el bucle es una buena manera, leer esto:

https://www.mql5.com/en/articles/1462

Sólo tienes que hacerlo de la manera correcta

 

Kalenzo,

Gracias por el artículo. Parece que estoy a punto de aprender más de lo que pedí.

Razón de la queja: