Cualquier pregunta de novato, para no saturar el foro. Profesionales, no pasen de largo. En ninguna parte sin ti - 6. - página 252

 
ALXIMIKS:
Mira este artículo, no es tan sencillo como parece, y en general es bastante útil.

He echado un vistazo. me llevará una semana estudiarlo en detalle. pero lo que es peor, no he podido encontrar ningún sitio que esté relacionado con mi tarea. no coloreo los indicadores, y no los modifico de ninguna manera. sólo quiero encontrar máximos y mínimos en n-últimas barras. hay un indicio de similitud en RSI_Extremums_Sample.mq4 pero no puedo hacer ese código. hay muchas cosas innecesarias, el indicador dibuja.... y no lo necesito...
 
lottamer:

lo he mirado. me llevará una semana estudiarlo en detalle. pero lo que es peor, no he podido encontrar ningún lugar que sea relevante para mi tarea. no coloreo indicadores, y no los modifico de ninguna manera. sólo quiero encontrar máximos y mínimos en n-últimas barras. hay un indicio de similitud en RSI_Extremums_Sample.mq4 pero no puedo manejar este código. es demasiado innecesario, el indicador DRAWNS.... y no lo necesito...


3173
artmedia70 27.10.2013 15:42 #
Forexman77:

¿Es posible con la función " ArrayMaximum", calcular el máximo más cercano de un indicador personalizado?

¿O necesito otras funciones para ello?

Lo he probado de esta manera:

Y no sale nada. Gurús, ¿podéis decirme cómo hacerlo?

   for (i=2; i<nBars; i++) {                    
      double a=iCustom(NULL, 0, "EMAF",0,0,i+1);
      double b=iCustom(NULL, 0, "EMAF",0,0,i);
      double c=iCustom(NULL, 0, "EMAF",0,0,i-1);
      if ((a-b)*(b-c)<0) {
         if (b<c) {                                
            // Нашли донышко
            }
         if (b>c) {                           
            // Нашли пичок
            }
         }
      }   
Para buscar en el EA. NO en un indicador.

 
lottamer:

Lo único que no entiendo es cómo calcular los extremos del indicador MACD, por ejemplo, en lugar de los extremos del precio en n períodos?

Creo que tengo que cambiar ALTO y BAJO por MACD en el bloque clave... Pero no entiendo cómo... todos mis intentos de hacer el tonto terminaron en anulación.

Entiendo que necesito crear una matriz MACD...

doble MACDBuffer[];

También he visto una cadena de este tipo en otros Asesores Expertos

pero no puedo medir uno en el otro...

Por favor, aconséjeme cómo hacerlo.


Artículo.
 

encontró algo similar en Kim's

//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 17.05.2008                                                     |
//|  Описание : Возвращает значение максимального элемента массива.            |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    x - массив значений числового ряда                                      |
//+----------------------------------------------------------------------------+
double ArrayMax(double& x[]) {
  if (ArraySize(x)>0) return(x[ArrayMaximum(x)]);
  else {
    Print("ArrayMax(): Массив пуст!");
    return(0);
  }
}

pregunta: ¿cómo puedo crear una matriz de valores de indicadores?

 
lottamer:

encontró algo similar en Kim's

Pregunta: ¿Cómo puedo crear una matriz de valores de indicadores?

he releído lo que se preguntaba, me equivoqué al principio (

Para obtener un buffer de datos del indicador, puede

1) ejecutar un bucle con la recogida de valores iMACD en el buffer

2) tomar el código fuente del MACD, hay un buffer allí

int start()
  {
   int limit;
   int counted_bars=IndicatorCounted();
//---- last counted bar will be recounted
   if(counted_bars>0) counted_bars--;
   limit=Bars-counted_bars;
//---- macd counted in the 1-st buffer
   for(int i=0; i<limit; i++)
      MacdBuffer[i]=iMA(NULL,0,FastEMA,0,MODE_EMA,PRICE_CLOSE,i)-iMA(NULL,0,SlowEMA,0,MODE_EMA,PRICE_CLOSE,i);
//---- signal line counted in the 2-nd buffer
   for(i=0; i<limit; i++)
      SignalBuffer[i]=iMAOnArray(MacdBuffer,Bars,SignalSMA,0,MODE_SMA,i);
//---- done
   return(0);
  }
 
ALXIMIKS:

releer lo que se preguntó, lo entendí mal al principio(

Para obtener un buffer con los datos de un indicador puedes:

1) ejecutar un bucle con la recogida de valores iMACD en el buffer

2) tomar el código fuente del MACD donde está el buffer


¿Cómo puedo visualizar el buffer, sino no sé qué hacer con él....

Print(MACDBuffer[1]); ?? imprime cero... ¿por qué? en teoría debería ser el valor de la 1ª barra....

y otra cosa... ¿por qué calcular el MACD usando la MA cuando hay una función directa iMACD?

 
lottamer:


y como puedo visualizar el buffer si no no entiendo que hacer con el....

Print(MACDBuffer[1]); ?? imprime cero...¿por qué? debería ser el valor de la 1ª barra....

y otra cosa... ¿por qué calcular el MACD utilizando la MA, cuando hay una función directa iMACD?


Por favor, dígame qué necesita,

pero debería ser más claro, para que incluso un tonto pueda entenderlo.

 
ALXIMIKS:


Por favor, dígame lo que quiere,

pero de forma clara, para que hasta el más tonto lo entienda.

Necesito determinar los valores mínimos (como en la imagen) y máximos del indicador MACD para un número determinado de barras. (20 en este caso).

Encontré el código que hace esto para el precio, y estúpidamente traté de reemplazar HIGH LOW con MACD. pero nada funcionó....



 
artmedia70:
El trabajo de los DCs es dar una buena historia. Son perezosos y siempre culpan a los MC.


Gracias.
 
lottamer:

Necesito determinar el valor mínimo (como se muestra en la imagen) y máximo del indicador MACD para un número determinado de barras. (20 en este caso).

Encontré un código que hace esto para el precio, y estúpidamente traté de reemplazar HIGH LOW con MACD. pero nada funcionó....

Insertar al final del MACD personalizado.
   int max,min,maxlast,minlast;
   max = ArrayMaximum(MacdBuffer,20,1);
   min = ArrayMinimum(MacdBuffer,20,1);
   if (max!=maxlast){
      ObjectDelete  ("highline");   
      ObjectCreate  ("highline",1,WindowOnDropped( ) ,0,MacdBuffer[max],0,0);
   }
   if (min!=minlast){
      ObjectDelete  ("lowline");   
      ObjectCreate  ("lowline",1,WindowOnDropped( ) ,0,MacdBuffer[min],0,0);
   }

PS. aunque esto es más correcto y mejor:

   int max,min;
   static double maxlast,minlast;
   max = ArrayMaximum(MacdBuffer,20,1);
   min = ArrayMinimum(MacdBuffer,20,1);
   if (MacdBuffer[max]!=maxlast){
      maxlast=MacdBuffer[max];
      ObjectDelete  ("highline");   
      ObjectCreate ("highline",1,WindowOnDropped( ) ,0,MacdBuffer[max],0,0);
   }
   if (MacdBuffer[min]!=minlast){
      minlast=MacdBuffer[min];
      ObjectDelete  ("lowline");   
      ObjectCreate ("lowline",1,WindowOnDropped( ) ,0,MacdBuffer[min],0,0);
   }