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

 
Alexandr Sokolov:

Tengo un código que no se ejecuta en MQL5 en mi indicador

La cuestión es que siel precio == STO_LOWHIGH todo funciona correctamente, pero si el precio == STO_CLOSECLOSE la función sólo asigna a las variables estáticas

... evitar el bucle

pero esta misma función funciona correctamente en MQL4

 
Alexandr Sokolov:

pero la misma función funciona correctamente en MQL4

Entonces tenemos que especificar qué matrices High[] Close[]

Si son de mql4, no están disponibles en mql5, si son personalizados... No puedo hacer ninguna sugerencia.

 
Alexandr Sokolov:

Quiero obtener los estocásticos maxHigh y minLow habituales dentro del periodo K por Low/High y Close/Close

Low/High durante la inicialización funciona bien, pero Close/Close no

Es más fácil encontrar fmax() o fmin() a partir del array obtenido por CopyBuffer()

 
Alexey Viktorov:

Entonces tenemos que aclarar qué son las matrices High[] Close[]

Si son de mql4, no están disponibles en mql5, si son personalizados... No puedo hacer ninguna suposición.

Este es el contenido de estos buffers en MQL5

int count = rates_total - prev_calculated, copied = 0; if(count < (int)kperiod + (int)dperiod + (int)slowing) {count = (int)kperiod + (int)dperiod + (int)slowing;};
   if(mode == m1 && price == STO_LOWHIGH) {copied = CopyOpen(_Symbol,PERIOD_CURRENT,0,count,Open); if(copied != count) return(0);};
   if(price == STO_LOWHIGH) {copied = CopyHigh(_Symbol,PERIOD_CURRENT,0,count,High); if(copied != count) return(0);};
   if(price == STO_LOWHIGH) {copied = CopyLow(_Symbol,PERIOD_CURRENT,0,count,Low); if(copied != count) return(0);};
   copied = CopyClose(_Symbol,PERIOD_CURRENT,0,count,Close); if(copied != count) return(0);
 
Alexey Viktorov:

Es más fácil encontrar fmax() o fmin() a partir del array obtenido por CopyBuffer()

Necesito valores no de todo el buffer, sino dentro de un periodo K
De lo contrario, ¿cómo implementarlo, teniendo en cuenta que necesito copiar los datos teniendo en cuenta el período de desaceleración?

 
Alexandr Sokolov:

No necesito valores de todo el buffer, sino dentro del periodo K
De lo contrario, ¿cómo puedo implementar esto, dado que necesito copiar los datos teniendo en cuenta el periodo de desaceleración?

Ayer hice lo mismo, sólo que con matrices altas y bajas

   for(i = limit; i < rates_total; i++)
    {
     UpperBuf[i] = high[ArrayMaximum(high, i-period, period)];
     LowerBuf[i] = low[ArrayMinimum(low, i-period, period)];
     MidBuf[i] = (UpperBuf[i]+LowerBuf[i])/2;
    }

Sin voltear la serie de tiempo. Entonces, como se establece en mql5... barra cero a la izquierda.

Además, es posible copiar el búfer del indicador, no todo el búfer, sino sólo la cantidad especificada de la barra especificada. Y me equivoqué al recomendar fmax() y fmin(). Me refería a ArrayMaximum()

 
Alexandr Sokolov:

Quiero obtener los estocásticos normales maxHigh y minLow dentro de un periodo K por Low/High y Close/Close

Baja/Alta durante la inicialización funciona bien, pero Cerrar/Cerrar no

Existen funciones estándar para las series temporales

Maximum=iHigh(_Symbol,_Period,iHighest(_Symbol,_Period,MODE_HIGH,num,startbar));
Minimum=iLow(_Symbol,_Period,iLowest(_Symbol,_Period,MODE_LOW,num,startbar));
 
Taras Slobodyanik:

existen funciones estándar para las series temporales

Es aconsejable empezar a leer desde el principio para obtener buenos consejos. De donde fue la primera pregunta y el resto de la discusión.

 
Alexey Viktorov:

Es aconsejable empezar a leer desde el principio para obtener buenos consejos. De donde fue la primera pregunta y el resto de la discusión.

Parece que desde el principio - el hombre va a través de la serie de tiempo en busca de min / max.
Es posible prescindir de ella.

void KValues(int i)
  {
   if (price == STO_LOWHIGH)
      {
      vhigh=iHigh(_Symbol,_Period,iHighest(_Symbol,_Period,MODE_HIGH,kperiod,i));
      vlow=iLow(_Symbol,_Period,iLowest(_Symbol,_Period,MODE_LOW,kperiod,i));
      }
   else
      {
      vhigh=iClose(_Symbol,_Period,iHighest(_Symbol,_Period,MODE_CLOSE,kperiod,i));
      vlow=iClose(_Symbol,_Period,iLowest(_Symbol,_Period,MODE_CLOSE,kperiod,i));
      }
  }
(no lo he comprobado).
 
Taras Slobodyanik:

Parece que lo ha mirado desde el principio - el hombre está recorriendo las series de tiempo buscando el mínimo/máximo.
Podrías prescindir de él.

(no lo he comprobado).

Quiere valores estocásticos.

Aunque... Yo mismo ya estoy confundido con lo que necesita. Parece una condición estocástica, pero copia las barras...