Errores, fallos, preguntas - página 2728

 
Askr:

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.

FAQ по сервису Сигналы
FAQ по сервису Сигналы
  • 2020.04.18
  • www.mql5.com
Узнать за 15 минут: смотри обучающие видео по торговым сигналам в MetaTrader 4 и MetaTrader 5 Здесь будут собраны и обработаны наиболее частые вопр...
 
Sergey Dzyublik:

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:

   ObjectSetDouble (0,name,OBJPROP_ANGLE,direction==0?0:direction>0?30:-30);

así que no (siempre 0)

   ObjectSetDouble (0,name,OBJPROP_ANGLE,direction*30);

dirección -1; +1; 0

 
Igor Zakharov:

así es como funciona:

así que no (siempre 0)

dirección -1; +1; 0

Y así

ObjectSetDouble (0,name,OBJPROP_ANGLE,( direction==0?0:direction>0?30:-30));
 
Alexey Viktorov:

Y por aquí.

también funciona, la segunda opción no funciona

 
   ObjectSetDouble (0,name,OBJPROP_ANGLE,direction*30.0);
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...

Gracias, usaré otra muleta...

 
Igor Zakharov:

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

#property indicator_buffers 2

#property indicator_color1 Red

#property indicator_width1 1

#property indicator_plots  1 // количество графических построений

#property indicator_type1   DRAW_ARROW


Variables globales declaradas

double Buf1[];

double Buf2[];

En Init() he definido las propiedades

    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());         }        else        if(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());         }        else        if(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 при присвоении значения переменной значению буфера. Проверка на размер массива буфера выдает ноль. Т.е. буфер не инициализируется. Всю голову сломал, не могу понять почему. В чем затык?
nPoint1 - это индекс бара (сдвиг от нулевого).
 
Ilyas:

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.