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...
Razón de la queja: