Objetivo: introducir un tamaño de lote variable en función de la distancia a la MA.
En los parámetros de entrada:
extern double Lote1 = 0.01; // primera variante del lote extern double Lote2 = 0.03; // segunda variante del lote extern int Distan = 20; // distancia de SlowMA
Ma ha sido definida en el cuerpo del Asesor Experto:
Además necesitamos una condición: si el precio actual (Bid o Ask dependiendo de la dirección) es hasta el tamaño Distant, usamos el primer tamaño de lote, si es más alto, usamos el segundo.
Lo primero que me vino a la mente:
si (Ask-SlowMA<Distan) Lote == Lote1; si (SlowMA-Bid<Distan) Lote == Lote1; si (Ask-SlowMA>Distan) Lote == Lote2; si (SlowMA-Bid>Distan) Lote == Lote2;
Pero no funciona. El error está en los enlaces con Lot o en la lógica general.
Objetivo: introducir un tamaño de lote variable en función de la distancia a la MA.
En los parámetros de entrada:
extern double Lote1 = 0.01; // primer tamaño de lote extern double Lote2 = 0,03; // segunda variante de lote. extern int Distan = 20; // distancia de la SlowMA
Entonces necesitamos una condición: si el precio actual (Bid o Ask dependiendo de la dirección) es hasta el tamaño Distant, usamos el primer tamaño de lote, si es mayor, usamos el segundo.
Lo primero que me vino a la mente:
if (Ask-SlowMA<Distan) Lot == Lot1; si (SlowMA-Bid<Distan) Lote == Lote1;; if (Ask-SlowMA>Distan) Lot == Lot2; si (SlowMA-Bid>Distan) Lote == Lote2;
Pero no funciona. Es un error en conjunto con Lot, o en la lógica general.
Gracias de antemano.
¿Qué importancia tienen Ask, Bid y SlowMA cuando Ask-SlowMA puede ser mayor que Distan?
La desviación del precio actual (Bid o Ask) del Ma (SlowMA) puede ser mayor o menor que Distans. De acuerdo con esto, debe establecer el primer o el segundo tamaño de lote.
He encontrado variantes de cambiar el lote en función del depósito o del número de órdenes abiertas, pero no consigo ninguna respuesta de un término tan lineal.
Algo me dice que necesitamos una función que devuelva un valor absoluto. Es decir, si lo aplicamos a un número negativo, el resultado será positivo.
La desviación del precio actual (Bid o Ask) del Ma (SlowMA) puede ser mayor o menor que Distans. De acuerdo con esto, debe establecer el primer o el segundo tamaño de lote.
He encontrado variantes de cambiar el lote en función del depósito o del número de órdenes abiertas, pero no consigo ninguna respuesta de un término tan lineal.
Algo me dice que necesitamos una función que devuelva un valor absoluto. Es decir, si lo aplicamos a un número negativo, el resultado será positivo.
El valor absoluto de la diferencia entre Bid y MA puede ser necesario un poco más tarde; ahora, ya que no has entendido la pista, vamos a calcular juntos
Oferta = 1,12730;
MA = 1,12530;
Distans = 20;
Pregunta:
¿Cuándo y si 1,1273 a 1,1253 será más de 20?
Por alguna razón mi calculadora sólo muestra 0,002. Pero eso está muy lejos de los 20...
si (Ask-SlowMA<dist) Lote == Lote1; si (SlowMA-Bid<dist) Lote == Lote1; si (Ask-SlowMA>dist) Lote == Lote2; si (SlowMA-Bid>dist) Lote == Lote2;
¿Cómo lo hago correctamente?
Y ahora podemos usar MathAbs() para no complicarnos la cabeza llevando la cuenta de qué se resta a qué. Y hay otro operador condicional interesante
Lot = MathAbs(Ask-SlowMA) < dist ? Lot1 : Lot2;
Lo que significa: A la variable Lote se le asignará el valor de Lote1 si Ask- SlowMA es menor que dist, de lo contrario, se le asignará el valor de Lote2.
Una recomendación más: olvida la variable Punto. Utilice _Point o la función Point()
Ya me he roto los ojos, no encuentro dónde faltan paréntesis, me salen errores como '(' - paréntesis izquierdo desequilibrado test.mq4 31 8 (a partir de la línea donde se llama a TrendDetection())
Y ahora puedes aplicar MathAbs() para no tener que estar pendiente de qué restar a qué. Y otro interesante operador condicional
Lo que significa: A la variable Lote se le asignará el valor de Lote1 en caso de que Ask- SlowMA sea menor que dist, de lo contrario, se le asignará el valor de Lote2.
Una recomendación más: olvida la variable Punto. Utilice _Point o la función Point()
¿pero cómo se activa este modo?
Marque la casilla en la ventana del comprobador, abajo a la izquierda:
Hola Gurú.
¿Puede decirme si voy por el buen camino?
Objetivo: introducir un tamaño de lote variable en función de la distancia a la MA.
En los parámetros de entrada:
extern double Lote1 = 0.01; // primera variante del lote
extern double Lote2 = 0.03; // segunda variante del lote
extern int Distan = 20; // distancia de SlowMA
Ma ha sido definida en el cuerpo del Asesor Experto:
double SlowMA = iMA(NULL,60,periodSlowMA,0,MODE_EMA,PRICE_MEDIAN,0);
Además necesitamos una condición: si el precio actual (Bid o Ask dependiendo de la dirección) es hasta el tamaño Distant, usamos el primer tamaño de lote, si es más alto, usamos el segundo.
Lo primero que me vino a la mente:
si (Ask-SlowMA<Distan) Lote == Lote1;
si (SlowMA-Bid<Distan) Lote == Lote1;
si (Ask-SlowMA>Distan) Lote == Lote2;
si (SlowMA-Bid>Distan) Lote == Lote2;
Pero no funciona. El error está en los enlaces con Lot o en la lógica general.
Gracias de antemano.
Hola Gurú.
¿Puede decirme si estoy en el camino correcto?
Objetivo: introducir un tamaño de lote variable en función de la distancia a la MA.
En los parámetros de entrada:
extern double Lote1 = 0.01; // primer tamaño de lote
extern double Lote2 = 0,03; // segunda variante de lote.
extern int Distan = 20; // distancia de la SlowMA
En el cuerpo del Asesor Experto definido Ma:
double SlowMA = iMA(NULL,60,periodSlowMA,0,MODE_EMA,PRICE_MEDIAN,0);
Entonces necesitamos una condición: si el precio actual (Bid o Ask dependiendo de la dirección) es hasta el tamaño Distant, usamos el primer tamaño de lote, si es mayor, usamos el segundo.
Lo primero que me vino a la mente:
if (Ask-SlowMA<Distan) Lot == Lot1;
si (SlowMA-Bid<Distan) Lote == Lote1;;
if (Ask-SlowMA>Distan) Lot == Lot2;
si (SlowMA-Bid>Distan) Lote == Lote2;
Pero no funciona. Es un error en conjunto con Lot, o en la lógica general.
Gracias de antemano.
La oferta y la demanda son los últimos precios conocidos de oferta y demanda, es decir, el precio actual.
SlowMA es mi rebautizada Ma
(double SlowMA = iMA(NULL,60,periodSlowMA,0,MODE_EMA,PRICE_MEDIAN,0);)
La desviación del precio actual (Bid o Ask) del Ma (SlowMA) puede ser mayor o menor que Distans. De acuerdo con esto, debe establecer el primer o el segundo tamaño de lote.
He encontrado variantes de cambiar el lote en función del depósito o del número de órdenes abiertas, pero no consigo ninguna respuesta de un término tan lineal.
Algo me dice que necesitamos una función que devuelva un valor absoluto. Es decir, si lo aplicamos a un número negativo, el resultado será positivo.
La oferta y la demanda son los últimos precios conocidos de oferta y demanda, es decir, el precio actual.
SlowMA es mi rebautizada Ma
(double SlowMA = iMA(NULL,60,periodSlowMA,0,MODE_EMA,PRICE_MEDIAN,0);)
La desviación del precio actual (Bid o Ask) del Ma (SlowMA) puede ser mayor o menor que Distans. De acuerdo con esto, debe establecer el primer o el segundo tamaño de lote.
He encontrado variantes de cambiar el lote en función del depósito o del número de órdenes abiertas, pero no consigo ninguna respuesta de un término tan lineal.
Algo me dice que necesitamos una función que devuelva un valor absoluto. Es decir, si lo aplicamos a un número negativo, el resultado será positivo.
El valor absoluto de la diferencia entre Bid y MA puede ser necesario un poco más tarde; ahora, ya que no has entendido la pista, vamos a calcular juntos
Oferta = 1,12730;
MA = 1,12530;
Distans = 20;
Pregunta:
¿Cuándo y si 1,1273 a 1,1253 será más de 20?
Por alguna razón mi calculadora sólo muestra 0,002. Pero eso está muy lejos de los 20...
Gracias, ya veo. O puedes hacerlo así:
dist=Distan*Punto;
si (Ask-SlowMA<dist) Lote == Lote1;
si (SlowMA-Bid<dist) Lote == Lote1;
si (Ask-SlowMA>dist) Lote == Lote2;
si (SlowMA-Bid>dist) Lote == Lote2;
¿Cómo lo hago correctamente?
Gracias, ya veo. O puedes hacerlo así:
dist=Distan*Punto;
si (Ask-SlowMA<dist) Lote == Lote1;
si (SlowMA-Bid<dist) Lote == Lote1;
si (Ask-SlowMA>dist) Lote == Lote2;
si (SlowMA-Bid>dist) Lote == Lote2;
¿Cómo lo hago correctamente?
Y ahora podemos usar MathAbs() para no complicarnos la cabeza llevando la cuenta de qué se resta a qué. Y hay otro operador condicional interesante
Lot = MathAbs(Ask-SlowMA) < dist ? Lot1 : Lot2;Lo que significa: A la variable Lote se le asignará el valor de Lote1 si Ask- SlowMA es menor que dist, de lo contrario, se le asignará el valor de Lote2.
Una recomendación más: olvida la variable Punto. Utilice _Point o la función Point()
Necesito ayuda, todavía estoy aprendiendo...
Y ahora puedes aplicar MathAbs() para no tener que estar pendiente de qué restar a qué. Y otro interesante operador condicional
Lo que significa: A la variable Lote se le asignará el valor de Lote1 en caso de que Ask- SlowMA sea menor que dist, de lo contrario, se le asignará el valor de Lote2.
Una recomendación más: olvida la variable Punto. Utilice _Point o la función Point()