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

 
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ó....


Copie los datos del MACD que necesita en el array massMACD[20] y encuentre los valores mínimos ArrayMinimum(massMACD); y
máximos ArrayMaximum(massMACD); en ese array.
 
ALXIMIKS:
Insertar al final del macdac personalizado.

P.D. Aunque es más cierto y mejor:


si es así, no funciona....

double MACDBuffer[];
double SignalBuffer[];

 
 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,12,0,MODE_EMA,PRICE_CLOSE,i)-iMA(NULL,0,26,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,9,0,MODE_SMA,i);
        //t=MACDBuffer[0];
        //Print(t*10000);
//---- done
  
  
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);
      Print(min,max);
   }
    return(0);
  }
 
artmedia70:
Copie sus datos MACD necesarios en el array massMACD[20] y encuentre en este array
mínimo ArrayMinimum(massMACD); y
el máximo ArrayMaximum(massMACD); valores.


bien.

la única pregunta es ¿CÓMO se copian los datos en la matriz?

for(int i=1; i<20; i++)
      MACDBuffer[i]=iMA(NULL,0,12,0,MODE_EMA,PRICE_CLOSE,i)-iMA(NULL,0,26,0,MODE_EMA,PRICE_CLOSE,i);

¿o así?

   MACDLineBuffer[i] = iMACD(NULL, 0, 12,26,9,PRICE_CLOSE,MODE_MAIN,i);
 
lottamer:


si es así, no funciona....

Al final del MACD personalizado:

Navegador ==> Indicadores personalizados ==> MACD ==> PCM (botón derecho del ratón) ==> Editar ==>

 
lottamer:


genial.

la única pregunta es ¿CÓMO se copian los datos en la matriz?

¿o así?


hombre, es lo mismo, sólo que no es el hecho de que llamar a iMACD tome tantos recursos como su código fuente.

iMACD y todos los iCostums devuelven el valor de un miembro del array, por lo que es necesario hacer un bucle y recogerlos en un buffer para su posterior op

  MACDLineBuffer[i] = iMACD(NULL, 0, 12,26,9,PRICE_CLOSE,MODE_MAIN,i);

no es cierto, porque sólo obtienes un valor y necesitas 20, así que usa un bucle:

for(int i=1; i<20; i++)
      MACDLineBuffer[i] = iMACD(NULL, 0, 12,26,9,PRICE_CLOSE,MODE_MAIN,i);

 
ALXIMIKS:

Al final del MACD personalizado:

Navegador ==> Indicadores personalizados ==> MACD ==> PCM (botón derecho del ratón) ==> Editar ==>

funciona :)

Sólo que ciertamente no hace lo que necesito que haga, pero intentaré utilizarlo como ejemplo.

gracias

 

empecemos por el principio.

int start()
  {
  
    
for(int i=0; i<20; i++)
MACDBuffer[i] = iMACD(NULL, 0, 12,26,9,PRICE_CLOSE,MODE_MAIN,i);

¿es suficiente para copiar 20(19 lo que sea) valores de indicadores en un array?

 
lottamer:

empecemos por el principio.

¿es suficiente con copiar 20(19 lo que sea) valores de indicadores en un array?

Seamos claros, si alguien necesita algo y yo sé algo - estoy feliz de tratar de ayudar a esa persona,

pero no voy a limpiarles el culo después de cada pedo.

Sí, es suficiente si declaró el array estático double MACDBuffer[20] y no es suficiente si declaró el array dinámico double MACDBuffer[].

artmedia70 te lo ha dicho .

 
ALXIMIKS:

Seamos claros, si alguien necesita algo y yo sé algo, estoy encantado de intentar ayudar a esa persona,

Pero no voy a limpiarle el culo después de cada pedo.

Sí, es suficiente si declaró el array estático double MACDBuffer[20] y no es suficiente si declaró el array dinámico double MACDBuffer[].

artmedia70 te lo ha dicho .


Bien, hagámoslo estático.

double MACDBuffer[20];

double min,max;
 
  
 int start()
  {
 
   for(int i=0; i<20; i++)
      MACDBuffer[i]=iMA(NULL,0,12,0,MODE_EMA,PRICE_CLOSE,i)-iMA(NULL,0,26,0,MODE_EMA,PRICE_CLOSE,i);

   min=ArrayMinimum(MACDBuffer);
   max=ArrayMaximum(MACDBuffer);
  
  Print(min,"____",max);

¿por qué imprime 19__0?

 
lottamer:


Bien, que sea estático.

¿por qué imprime 19__0?


porque funciona bien. ¿Algo más?