Cualquier pregunta de los recién llegados sobre MQL4 y MQL5, ayuda y discusión sobre algoritmos y códigos - página 319

 
Vitaly Muzichenko:

Límite - el número de barras en el gráfico, para que cuando se desplace por el historial, el indicador se muestre hasta el final del mismo.


¡Muchas gracias! :)

 

Hola, podrías decirme cómo escribir el parámetro - aplicar a - Precio medio en el indicador, en este caso Moveng

Voy a describir el problema, el indicador tiene un array[][] que registra los datos para calcular el MA - los datos se registraron a precios HL/2, no el predeterminado

 

Hola, estoy tratando de escribir un objeto de clase CDecisionForest en un archivo bin (es de la biblioteca Alglib), pero no puedo averiguar cómo. He intentado utilizar FileWriteStruct, pero el compilador da un error en el argumento de mi clase:

'df' - structures containing objects are not allowed

¿Es realmente posible escribirlo o debo desmontar el objeto, escribirlo por partes y luego volver a montarlo?
 
Vitaly Muzichenko:

límite - número de barras en el gráfico, para que al desplazarse por el historial, el indicador se muestre hasta el final del mismo.


Estimado señor, por favor, explíquese.

No he conseguido utilizar la información de su enlace.

Cuando declaro el valor límite por mí mismo - aparece la ventana "Array out of range".

El depurador apunta a las cadenas con arrays en el bucle for.

for(int i=0; i<limit; i++) {
    RSI[i] = iRSI(Symbol(),TimeFrame,14,PRICE_CLOSE,i);
  }

for(int i=0; i<limit; i++) {
    BandsMn[i]=iBandsOnArray(RSI,0,BB_Period,BB_Dev,0,MODE_MAIN,i);
    BandsUp[i]=iBandsOnArray(RSI,0,BB_Period,BB_Dev,0,MODE_UPPER,i);
    BandsDn[i]=iBandsOnArray(RSI,0,BB_Period,BB_Dev,0,MODE_LOWER,i);
  }

¿Quizás haya una forma más sencilla de hacerlo todo?
No necesito el dibujo.

Sólo los valores de las barras actuales y anteriores.

 
Ras al Ghul:

Estimado señor, ¿podría explicarlo?

Utilizando la información de su enlace, no he logrado el éxito.

Al declarar el valor límite por mí mismo, aparece la ventana "Array out of range".

El depurador apunta a las cadenas con arrays en el bucle for.

¿Tal vez se pueda hacer de una manera más sencilla?
No necesito dibujar.

Sólo los valores de la barra actual y de la anterior.

¿Cómo se calcula el límite?

En realidad, el límite se calcula en el cálculo inverso del indicador: desde el principio de la historia hasta su final (hasta los datos actuales):

   if(rates_total<нужное_количество_баров_для_верного_расчёта) return(0);
   int limit=rates_total-prev_calculated;
   if(limit>1) {
      limit=rates_total-нужное_количество_баров_для_верного_расчёта-1;
      // здесь, при необходимости очистки мусора в буферах, их инициализация пустыми значениями
      }
   //---
   for(int i=limit; i>=0; i--) {
      // тут цикл просчёта индикатора
      }
El concepto "número_necesario_de_barras_para_el_cálculo_de_fidelidad" significa el número mínimo de barras, en las que el indicador se calculará correctamente. Para un fractal de 2X2 hay seis barras: dos a la izquierda, una en el centro, dos a la derecha y una en el extremo derecho que deben estar completamente formadas para que el fractal no se vuelva a calcular.
 

Hola, podrían decirme cómo aumentar el tamaño de un array unidimensional en un indicador

Siempre que tenga un índice de búfer para llamar a

Y el tamaño de la matriz supera el número de barras

 

Atascado, me parece, en un lugar tan simple. ¿Qué pasa con global int chekcount=0; int count=0; en caso de que quiera ejecutar varias funciones counter() en paralelo?

void OnTimer()
  {
Print("counter(10)= ",counter(10));
Print("counter(14)= ",counter(14)); // !!!
  }

int chekcount=0; //???
int count=0; //???

int counter(int Pause=10)
  {
   count++;
   if(count>=chekcount+Pause)
      chekcount=count;

   return(chekcount);
  }

 
Nauris Zukas:

Atascado, me parece, en un lugar tan simple. ¿Qué hacer con global int chekcount=0; int count=0; si quiero ejecutar varias funciones counter() en paralelo?

Sólo tienes que utilizar una clase, o hacer copias de las funciones con nombres diferentes.

 
Vitaly Muzichenko:

Utilice sólo una clase, o haga copias de las funciones con nombres diferentes.

Así que no es tan sencillo... Gracias.

 

¿Puede alguien reescribir esta función utilizando una clase, si no es difícil?

void OnTimer()
  {
Print("counter(10)= ",counter(10));
Print("counter(14)= ",counter(14)); // !!!
  }

int chekcount=0; //???
int count=0; //???
int counter(int Pause=10)
  {
   count++;
   if(count>=chekcount+Pause)
      chekcount=count;
   return(chekcount);
  }