2) He visto que el 110% y el 70% saltan constantemente y con fuerza, aún no lo he contado. Quizá tenga que ver con la carga, pero no lo creo. He abierto pequeñas cosas y el apalancamiento en las especificaciones es el mismo y los saldos son casi iguales.
dirección que ha declarado como int. Eso es lo que obtienes. Últimamente, muchas funciones se han vuelto bastante quisquillosas con los valores. Es mejor asegurar con una conversión. Yo mismo me he enfrentado a estos problemas recientemente. Antes no tenía problemas. Pero me pidieron que corrigiera el código y no quiso funcionar correctamente hasta que lo eché al doble.
Konstantin Nikitin: Tienes la dirección declarada como int. Eso es lo que obtienes. Últimamente, muchas funciones se han vuelto bastante quisquillosas con los valores. Es mejor ocuparse de la conversión. Yo mismo me he enfrentado a estos problemas recientemente. Antes no tenía problemas. Pero me pidieron que corrigiera el código y no quiso funcionar bien hasta que lo llevé al doble.
Sí, int. Pero es una multiplicación - en números enteros también es 30*1=30. Estoy 100% seguro de que funcionaba bien en la segunda versión de hace unos cuantos builds, ya que utilicé un pico para determinar este 30...
parece otra "característica" de MT5... Al menos el bloque es decorativo, pero si en algún lugar como autolot o stoploss - tristeza puede suceder - a menudo invierto multiplicando por -1...
Konstantin tiene razón, por qué poner int donde se espera double... Esto no es una característica de mql5, son sólo algunos intentos de acostumbrarse al orden.
PlotIndexSetInteger(0,PLOT_ARROW,code);
//--- установим пустое значение PlotIndexSetDouble(0,PLOT_EMPTY_VALUE,0);
SetIndexBuffer(0,Buf1,INDICATOR_DATA);
PlotIndexSetString(0, PLOT_LABEL, "Break");
//----PlotIndexSetInteger(1,PLOT_ARROW,code);
//--- установим пустое значение PlotIndexSetDouble(1,PLOT_EMPTY_VALUE,0);
SetIndexBuffer(1,Buf2,INDICATOR_CALCULATIONS);
PlotIndexSetString(1, PLOT_LABEL, "Break");
En OnCalculate(), el código define una condición - la variable up.
Si es verdadero, se ejecuta el siguiente código
i=nPoint1; BreakUp=false; BreakDn=false;
while(i>=0 && BreakUp==false && BreakDn==false)
{
Print("i ",i);
tmp=iHigh(NULL,0,nPoint1)-Speed*(nPoint1-i);
tmp1=iHigh(NULL,0,nPoint1)-Speed*(nPoint1-i)-resultL;
if(NormalizeDouble(iLow(NULL,0,i),Digits())<NormalizeDouble(tmp1,Digits())
&& NormalizeDouble(iHigh(NULL,0,i),Digits())>NormalizeDouble(tmp,Digits()))
{ size=ArraySize(Buf1);
Print("size ",size);
BreakUp=true;
if(channelbreak) Buf1[i]=tmp;
Comm="\nПробой вверх на уровне " + DoubleToString(tmp,Digits());
} elseif(NormalizeDouble(iLow(NULL,0,i),Digits())<NormalizeDouble(tmp1,Digits()))
{ size=ArraySize(Buf1);
Print("size ",size);
BreakDn=true;
if(channelbreak) Buf1[i]=tmp1;
Comm="\nПробой вниз на уровне "+DoubleToString(tmp1,Digits());
} elseif(NormalizeDouble(iHigh(NULL,0,i),Digits())>NormalizeDouble(tmp,Digits()))
{ size=ArraySize(Buf1);
Print("size ",size);
BreakUp=true;
if(channelbreak) Buf1[i]=tmp;
Comm="\nПробой вверх на уровне "+DoubleToString(tmp,Digits());
} else
Comm="\nПробоя канала нет"; //i--;
} } Ошибка происходит при входе в цикл while при присвоении значения переменной значению буфера. Проверка на
размер массива буфера выдает ноль. Т.е. буфер не инициализируется. Всю голову сломал, не могу понять почему. В чем затык?
Por favor, aclare si es normal que durante la depuración del indicador, los valores de este indicador no sean visibles en el gráfico abierto? Es decir, por ejemplo, abrimos el MACD en el depurador. Establecemos un punto de interrupción en el ciclo de escritura de valores en los búferes. Después de escribir el valor de ChartRedraw(). Espero ver este valor en el gráfico de inmediato después de que se escriba el valor, pero sólo veo una ventana vacía.
Gracias.
Encontré esta otra cosa que tal vez 1)es un corredor de bloqueo.
https://www.mql5.com/ru/forum/38456/page127
https://www.mql5.com/ru/forum/304679
2) He visto que el 110% y el 70% saltan constantemente y con fuerza, aún no lo he contado. Quizá tenga que ver con la carga, pero no lo creo. He abierto pequeñas cosas y el apalancamiento en las especificaciones es el mismo y los saldos son casi iguales.
Un hilo conductor de las señales es este
https://www.mql5.com/ru/forum/10603/page394
Para información.
Bug MT5 (build 2390) cuenta incorrectamente las llaves en la descripción de la estructura de la clase.
Gracias por el post, arreglado
así es como funciona:
así que no (siempre 0)
dirección -1; +1; 0
así es como funciona:
así que no (siempre 0)
dirección -1; +1; 0
Y así
Y por aquí.
también funciona, la segunda opción no funciona
Yo mismo me he enfrentado a estos problemas recientemente. Antes no tenía problemas. Pero me pidieron que corrigiera el código y no quiso funcionar correctamente hasta que lo eché al doble.
Tienes la dirección declarada como int. Eso es lo que obtienes. Últimamente, muchas funciones se han vuelto bastante quisquillosas con los valores. Es mejor ocuparse de la conversión.
Yo mismo me he enfrentado a estos problemas recientemente. Antes no tenía problemas. Pero me pidieron que corrigiera el código y no quiso funcionar bien hasta que lo llevé al doble.
Sí, int. Pero es una multiplicación - en números enteros también es 30*1=30. Estoy 100% seguro de que funcionaba bien en la segunda versión de hace unos cuantos builds, ya que utilicé un pico para determinar este 30...
parece otra "característica" de MT5... Al menos el bloque es decorativo, pero si en algún lugar como autolot o stoploss - tristeza puede suceder - a menudo invierto multiplicando por -1...
Gracias, usaré otra muleta...
también funciona, la segunda opción no funciona.
Ah, sin querer copié el código equivocado.
Konstantin tiene razón, por qué poner int donde se espera double... Esto no es una característica de mql5, son sólo algunos intentos de acostumbrarse al orden.
Por favor, ayuda.
El indicador arroja un error de matriz fuera del rango.
En el código he definido los buffers
Variables globales declaradas
En Init() he definido las propiedades
En OnCalculate(), el código define una condición - la variable up.
Si es verdadero, se ejecuta el siguiente código
Por favor, aclare si es normal que durante la depuración del indicador, los valores de este indicador no sean visibles en el gráfico abierto? Es decir, por ejemplo, abrimos el MACD en el depurador. Establecemos un punto de interrupción en el ciclo de escritura de valores en los búferes. Después de escribir el valor de ChartRedraw(). Espero ver este valor en el gráfico de inmediato después de que se escriba el valor, pero sólo veo una ventana vacía.
Compilación 2380 x64.