Preguntas de los principiantes MQL5 MT5 MetaTrader 5 - página 471

 
Mike:
1. Todos los partidos.
2. No existe tal parámetro.
Me han dicho en otro hilo que este problema no tiene solución en MT4. :(

2. No sé de dónde has sacado el MA en una ventana separada para poder decirte algo sobre el parámetro. Pero... Si tomas desde Indicadores --> Osciladores --> Promedios Móviles del Oscilador, tiene "Aplicar a:"

Por lo tanto, si se trata de poner otro indicador en una ventana separada, en algunos casos, se puede aplicar no sólo a los precios estándar de la enumeración ENUM_APPLIED_PRICE, sino también a los datos de ese indicador que ya está en la ventana. Tal vez te encuentres en esta situación.

3. ¿Cuál es el problema? ¿Que las tres MAs no se corresponden con tres MAs similares (según tu afirmación)? Así que no es irresoluble, es un sinsentido. Si se hacen correctamente, seguro que coinciden. Cuál es la diferencia: tres MAs separadas con sus propios parámetros o las mismas tres MAs con los mismos parámetros, pero metidas en un indicador con tres buffers... ¿Puedes ver la diferencia? No lo sé. Y si lo ves, entonces busca la incoherencia en el cálculo de los MAK.

Por cierto... Alligator son tres MAs en un solo indicador, cada uno con sus propios parámetros. Configure los parámetros de la misma manera con sus tres MAs separadas y coincidirán. Pero tienes toda esta bacanal en una ventana aparte... Así que... como ejemplo

 
Mike:
Hice un indicador 3MA(4,9,14) y decidí compararlo para comprobar su corrección con una ventana donde los tres indicadores son MA(4), MA(9), MA(14). Se me pusieron los pelos de punta. :)
Intente desactivar el autoescalado de las ventanas de los indicadores.
"Cuando hay tres indicadores - MA(4), MA(9), MA(14)" la ventana del indicador se auto-escala por el primer indicador adjunto a esta ventana. En tu caso, probablemente sea la MA(4)
 

Me pueden dar un diseño para obtener el valor del indicador incorporado del marco de tiempo superior, pero dentro de este marco de tiempo.

Por ejemplo, el gráfico actual es de 15 minutos, necesito obtener el valor del indicador, calculado por día, pero hace 45 minutos, ¿cómo hacerlo?

Aquí hay un algoritmo simple que devuelve el valor del indicador, pero sólo para la barra actual.

double iDelta(int Variant,int n,int TF,int index)

  {

   double Fibo=0;

   if(Variant==1) Fibo=0.236;

   if(Variant==2) Fibo=0.382;

   if(Variant==3) Fibo=0.5;

   if(Variant==4) Fibo=0.618;

   if(Variant==5) Fibo=0.764;

   if(Variant==6) Fibo=1;

   if(Variant==7) Fibo=1.236;

   if(Variant==8) Fibo=1.382;

   if(Variant==9) Fibo=1.5;

   if(Variant==10) Fibo=1.618;

   if(Variant==11) Fibo=2.0;

   if(Variant==12) Fibo=2.236;

   if(Variant==-1) Fibo=-0.236;

   if(Variant==-2) Fibo=-0.382;

   if(Variant==-3) Fibo=-0.5;

   if(Variant==-4) Fibo=-0.618;

   if(Variant==-5) Fibo=-0.764;

   if(Variant==-6) Fibo=-1;

   if(Variant==-7) Fibo=-1.236;

   if(Variant==-8) Fibo=-1.382;

   if(Variant==-9) Fibo=-1.5;

   if(Variant==-10) Fibo=-1.618;

   if(Variant==-11) Fibo=-2.0;

   if(Variant==-12) Fibo=-2.236;

   return ( NormalizeDouble(iOpen(Symbol(),TF,index)+iATR(Symbol(), TF, n, index+1)*Fibo,Digits) );

  } 

 
Leo59:
Intenta desactivar el autoescalado de las ventanas de los indicadores, tal vez las cosas se calmen.
"donde los tres indicadores son MA(4), MA(9), MA(14)" la ventana del indicador es autoescalada por el primer indicador adjunto a esa ventana. En tu caso, probablemente sea MA(4)
¿Dónde se desactiva este autoescalado?
 
Artyom Trishkin:

2. No sé de dónde has sacado el MA en una ventana separada para poder decirte algo sobre el parámetro. Pero... Si tomas desde Indicadores --> Osciladores --> Medias Móviles de Oscilador, tiene "Aplicar a:"

Por lo tanto, si se trata de poner otro indicador en una ventana separada, en algunos casos, se puede aplicar no sólo a los precios estándar de la enumeración ENUM_APPLIED_PRICE, sino también a los datos de ese indicador que ya está en la ventana. Tal vez te encuentres en esta situación.

3. ¿Cuál es el problema? ¿Que las tres MAs no se corresponden con tres MAs similares (según tu afirmación)? Así que no es irresoluble, es un sinsentido. Si se hacen correctamente, seguro que coinciden. Cuál es la diferencia: tres MAs separadas con sus propios parámetros o las mismas tres MAs con los mismos parámetros, pero metidas en un indicador con tres buffers... ¿Puedes ver la diferencia? No lo sé. Y si lo ves, busca una discrepancia en el cálculo de los MAK.

Por cierto... Alligator son tres MAs en un solo indicador, cada uno con sus propios parámetros. Configure los parámetros de la misma manera que sus tres MA independientes y coincidirán. Pero tienes toda esta bacanal en una ventana aparte... Así que... como ejemplo

Artyom, "Aplicar a" - sólo hay un listado de precios. Los cálculos de la MA son correctos, las tres líneas se comprueban añadiendo un único indicador con un periodo de 4, luego 9 y luego 14 a la ventana con el indicador de la 3MA. En cada caso, el indicador único coincide con la línea correspondiente del indicador 3MA
 
Mike:
Artyom, "Aplicar a" - sólo hay una enumeración de precios. Los cálculos de la MA son correctos, se han comprobado las tres líneas añadiendo un único indicador con periodo 4, luego 9 y luego 14 a la ventana del indicador 3MA. En cada caso, el indicador único coincide con la línea correspondiente del indicador 3MA
¿Cuál es el problema entonces? Supongo que no te gusta el desajuste visual de las líneas en las diferentes ventanas. Pulsa Ctrl+D, mueve el ratón sobre las líneas del indicador y mira en la ventana de datos para ver si coinciden...
 
-Aleks-:

Me pueden dar un diseño para obtener el valor del indicador incorporado del marco de tiempo superior, pero dentro de este marco de tiempo.

Por ejemplo, el gráfico actual es de 15 minutos, necesito obtener el valor del indicador, calculado por día, pero hace 45 minutos, ¿cómo hacerlo?

Aquí hay un algoritmo simple que devuelve el valor del indicador, pero sólo para la barra actual.

double iDelta(int Variant,int n,int TF,int index)

  {

   double Fibo=0;

   if(Variant==1) Fibo=0.236;

   if(Variant==2) Fibo=0.382;

   if(Variant==3) Fibo=0.5;

   if(Variant==4) Fibo=0.618;

   if(Variant==5) Fibo=0.764;

   if(Variant==6) Fibo=1;

   if(Variant==7) Fibo=1.236;

   if(Variant==8) Fibo=1.382;

   if(Variant==9) Fibo=1.5;

   if(Variant==10) Fibo=1.618;

   if(Variant==11) Fibo=2.0;

   if(Variant==12) Fibo=2.236;

   if(Variant==-1) Fibo=-0.236;

   if(Variant==-2) Fibo=-0.382;

   if(Variant==-3) Fibo=-0.5;

   if(Variant==-4) Fibo=-0.618;

   if(Variant==-5) Fibo=-0.764;

   if(Variant==-6) Fibo=-1;

   if(Variant==-7) Fibo=-1.236;

   if(Variant==-8) Fibo=-1.382;

   if(Variant==-9) Fibo=-1.5;

   if(Variant==-10) Fibo=-1.618;

   if(Variant==-11) Fibo=-2.0;

   if(Variant==-12) Fibo=-2.236;

   return ( NormalizeDouble(iOpen(Symbol(),TF,index)+iATR(Symbol(), TF, n, index+1)*Fibo,Digits) );

  } 

No puedo responder a la pregunta, pero la función se puede simplificar y acelerar considerablemente.
Al inicializar el indicador, cree una matriz estática

double arrFibo[13] = {0.0, 0.236, 0.382, ..., 2.236};

y todos los if eniDelta() pueden ser sustituidos por:

if (Variant>0)
    Fibo =  arrFibo[ Variant];
else
    Fibo = -arrFibo[-Variant];

 
Mike:

No puedo responder a la pregunta, pero la función se puede simplificar y acelerar considerablemente.
Durante la inicialización del indicador se crea un array estático

double arrFibo[13] = {0.0, 0.236, 0.382, ..., 2.236};

y todos los if eniDelta() pueden ser reemplazados por

if (Variant>0)
    Fibo =  arrFibo[ Variant];
else
    Fibo = -arrFibo[-Variant];

Gracias, lo probaré, quizás sea mejor.

 
Mike:

No puedo responder a la pregunta, pero la función se puede simplificar y acelerar considerablemente.
En la inicialización del indicador se crea un array estático

double arrFibo[13] = {0.0, 0.236, 0.382, ..., 2.236};

y todos los ifs eniDelta() pueden ser reemplazados por:

if (Variant>0)
    Fibo =  arrFibo[ Variant];
else
    Fibo = -arrFibo[-Variant];

Lo hice. como usted escribió, pero no funcionó como debería ser - No sé exactamente lo que está mal todavía - Tengo que imprimir....

No entiendo lo de la cuerda.

else           Fibo = -arrFibo[-Variant];

Entonces, ¿qué obtenemos? ¿Estamos pidiendo el índice menos del array o qué?
 
-Aleks-:

Lo hice como lo escribiste, pero no funciona como debería - no sé qué es lo que está mal todavía - necesito imprimir....

No entiendo lo de la línea.

else           Fibo = -arrFibo[-Variant];

¿Resulta que estamos solicitando un índice menos del array o qué?
En el caso de que Variant sea negativa, la expresión -Variant da un índice positivo para la obtención de un array.
En el mismo caso necesitamos valores negativos de Fibo, por lo que -arrFibo.
Razón de la queja: