Cualquier pregunta de novato, para no saturar el foro. Profesionales, no pasen de largo. En ninguna parte sin ti - 6. - página 1063
Está perdiendo oportunidades comerciales:
- Aplicaciones de trading gratuitas
- 8 000+ señales para copiar
- Noticias económicas para analizar los mercados financieros
Registro
Entrada
Usted acepta la política del sitio web y las condiciones de uso
Si no tiene cuenta de usuario, regístrese
¿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()