[¡AVISO CERRADO!] Cualquier pregunta de novato, para no saturar el foro. Profesionales, no pasen. No puedo ir a ningún sitio sin ti. - página 192

 

Por favor, dame una pista. No entiendo por qué MathMax no funciona.

La versión simplificada del código (no puede ser más simple) tampoco funciona. La variable GBPUSD_High no funciona :-( Mientras que GBPUSD_Low funciona bien.

P.D. Sólo me interesan los valores de las barras desde que se carga el indicador.

//+-------------------------------------------------------------------
#property indicator_separate_window
#property indicator_buffers3
#property indicator_color1 Negro
#property indicator_color2 Gris
#property indicator_color3 Gris
//--------------------------------------------------------------------
double GBPUSD[], GBPUSD_High[], GBPUSD_Low[];
//--------------------------------------------------------------------

int init()
{
//--------------------------------------------------------------------

SetIndexBuffer(0
,GBPUSD);
SetIndexStyle (0,DRAW_LINE,STYLE_SOLID,2
);
SetIndexBuffer(1
,GBPUSD_High);
SetIndexStyle (1,DRAW_LINE,STYLE_DOT,1
);
SetIndexBuffer(2
,GBPUSD_Low);
SetIndexStyle (2,DRAW_LINE,STYLE_DOT,1);
//--------------------------------------------------------------------

return;
}
//--------------------------------------------------------------------

int start()
{

int Counted_bars, i;
//--------------------------------------------------------------------
Counted_bars=IndicatorCounted();
i=Bars-Counted_bars-1;

while (i>=0)
{
GBPUSD[i]=Close[i];

if (GBPUSD_Low[i]==0) GBPUSD_Low[i]=GBPUSD[i];
GBPUSD_High[i]=MathMax(GBPUSD_High[i],GBPUSD[i]);
GBPUSD_Low[i]=MathMin(GBPUSD_Low[i],GBPUSD[i]);
i--;
}
//--------------------------------------------------------------------

return;
}
//--------------------------------------------------------------------

Para cargar, por supuesto, a GBPUSD.

 
alderru >> :

Por favor, dame una pista. No entiendo por qué MathMax no funciona.

La versión simplificada del código (no puede ser más simple) tampoco funciona. La variable GBPUSD_High no funciona :-( Mientras que GBPUSD_Low funciona bien.

P.D. Sólo me interesan los valores de las barras desde el momento de la carga del indicador.

Por supuesto, tengo que cargarlo en GBPUSD.

MathMax no tiene nada que ver. Variante:

while ( i>=0)
{
GBPUSD[ i]=Close[ i];
GBPUSD_High[ i]=High  [ i];
GBPUSD_Low[ i]=Low[ i];

//if (GBPUSD_Low[i]==0) GBPUSD_Low[i]=GBPUSD[i];

GBPUSD_High[ i]=MathMax( GBPUSD_High[ i], GBPUSD[ i]);
GBPUSD_Low[ i]=MathMin( GBPUSD_Low[ i], GBPUSD[ i]);
i--;
}
 
tmp.0 >> :

>>MathMax no tiene nada que ver.

¡Exactamente! Así que claramente High es siempre mayor o igual que Close, MathMin es lo mismo ;)

 
OneDepo писал(а) >>

¡Exactamente! Así que claramente High es siempre mayor o igual que Close, MathMin es lo mismo ;)

Como ejemplo, he dado a propósito el cálculo de valores ya conocidos. En el original, estoy buscando el máximo y el mínimo en una barra de una variable completamente diferente. Cuando se dibuja el indicador, la curva de la variable se redibuja mientras se forma la barra, por supuesto. Estoy buscando los puntos límite.

No entiendo por qué la función MathMax no funciona por sí misma. MathMin funciona bien; la curva GBPUSD_Low se dibuja...

En cuanto a la gramática de la programación, ¿tiene alguna observación?

Por favor, instale el indicador, dime lo que está mal, por qué GBPUSD_High no se calcula.

 
alderru >> :

Como ejemplo, he puesto a propósito el cálculo de valores ya conocidos. En los originales, busco el máximo y el mínimo en una barra de una variable completamente diferente. Cuando se muestra el indicador, la curva de la variable se redibuja, por supuesto, durante la formación de la barra. Estoy buscando los puntos límite.

No entiendo por qué la función MathMax en sí no funciona.

¿Tiene alguna observación desde el punto de vista gráfico de la programación?

Instale el indicador y dígame qué está mal aquí, por qué GBPUSD_High no se calcula.

No te engañes. Pega esto en tu parte favorita del código:

Print (GBPUSD_High[i],":",GBPUSD_Low[i],":",GBPUSD[i]); 
y tendrás una epifanía en la pestaña "expertos".
 
tmp.0 писал(а) >>

No te engañes. Pon esto en el lugar donde te gusta el código:

y tendrás una epifanía en la pestaña "expertos".

Y qué...

No hay ninguna epifanía. Print imprime sólo dos valores, al igual que muestra el indicador. ¿Y el tercero?

¿Has intentado siquiera hacer lo que aconsejas?

 
Siguiente pregunta, por favor :)
 
tmp.0 писал(а) >>
Siguiente pregunta, por favor :)

Muy inteligente.

Gracias por la "ayuda".

 
alderru >> :

Muy inteligente.

Gracias por la "ayuda".

Ya se le ha dado la respuesta más arriba. La razón es el uso de un valor no asignado en la parte derecha del operador de asignación. A qué equivale GBPUSD_High[i] en la cadena

GBPUSD_High[i]=MathMax(GBPUSD_High[i],GBPUSD[i]);

También se le ha mostrado una opción para corregir la situación. Deja atrás la ironía.


 
OneDepo писал(а) >>

La razón es el uso de un valor no asignado en el lado derecho del operador de asignación.

Por lo tanto, la declaración de los topes indicadores no significa que los valores de las celdas sean cero. ¿Verdad?

Por lo tanto, MathMax no se calcula ya que uno de los valores que se comparan (es decir, GBPUSD_High) no tiene ningún valor (en absoluto, ni siquiera cero).

Ya veo. Gracias OneDepo.

Pido disculpas por confundir a todos con mi simplificación (juego de palabras). Como ya he mencionado, no me interesa el valor de las cotizaciones altas, me interesa el valor máximo en la barra de mi propia función, cuya curva el indicador dibuja y vuelve a dibujar con éxito mientras está formando la barra. Este es el rango de rediseño del indicador durante la barra que me interesaba.

Lo pensaré.

P.D. ¿Pero por qué MathMin se considera sin problemas, las condiciones son iguales y se declaran igual?

P.D. Soy muy franco. No puedo hacerlo. Ayuda, por favor.