Qualquer pergunta de novato, de modo a não desorganizar o fórum. Profissionais, não passem por aqui. Em nenhum lugar sem você - 6. - página 253

 
lottamer:

Eu preciso determinar o valor mínimo (como mostrado na figura) e máximo do indicador MACD para um determinado número de barras. (20, neste caso).

Encontrei um código que faz isso por preço, e estupidamente tentei substituir HIGH LOW por MACD. mas nada funcionou....


Copie os dados MACD que você precisa na matriz massMACD[20] e encontre o ArrayMinimum(massMACD) mínimo; e
maximum ArrayMaximum(massMACD); valores nessa matriz.
 
ALXIMIKS:
Inserir no final do macdac personalizado.

P.S. Embora seja mais verdadeiro e melhor:


se assim for, não 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 seus dados MACD necessários para o array massMACD[20] e encontre neste array
mínimo ArrayMinimum(massMACD); e
o máximo ArrayMaximum(massMACD); valores.


bem.

a única pergunta é: COMO eles copiam os dados para a 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);

ou como este?

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


se assim for, não funciona....

No final do MACD personalizado:

Navegador ==> Indicadores personalizados ==> MACD ==> PCM (botão direito do mouse) ==> Editar ==>>

 
lottamer:


ótimo.

a única pergunta é: COMO eles copiam os dados para a matriz?

ou como este?


cara, é a mesma coisa, só não é o fato de que chamar o iMACD leva tantos recursos quanto seu código fonte.

iMACD e todos os iCostums retornam o valor de um membro da matriz, então você precisa fazer um loop through e coletá-los em um buffer para uma operação adicional.

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

não é verdade, porque você só recebe um valor e precisa de 20, então use um laço:

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

 
ALXIMIKS:

No final do MACD personalizado:

Navigator ===> Indicadores personalizados ==> MACD ==> PCM (botão direito do mouse) ==> Editar ==>>

funciona :)

Só que certamente não faz o que eu preciso fazer, mas vou tentar usá-lo como exemplo.

obrigado

 

vamos começar do início.

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

isto é suficiente para copiar 20(19 quaisquer) valores indicadores em uma matriz?

 
lottamer:

vamos começar do início.

é suficiente copiar 20(19 quaisquer) valores indicadores em uma matriz?

Sejamos claros, se alguém precisa de alguma coisa e eu sei de alguma coisa - estou feliz em tentar ajudar essa pessoa,

mas não vou limpar o rabo dele depois de cada peido.

Sim, é suficiente se você declarou MACDBuffer duplo MACDBuffer[20] estático e não é suficiente se você declarou MACDBuffer duplo MACDBuffer[] dinâmico.

artmedia70 lhe disse isso .

 
ALXIMIKS:

Sejamos claros, se alguém precisa de algo e eu sei de algo, fico feliz em tentar ajudar essa pessoa,

Mas eu não vou limpar o rabo dele depois de cada peido.

Sim, é suficiente se você declarou MACDBuffer duplo MACDBuffer[20] estático e não é suficiente se você declarou MACDBuffer duplo MACDBuffer[] dinâmico.

artmedia70 lhe disse isso .


OK, vamos torná-lo 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 que imprime 19__0 ????

 
lottamer:


ok, que seja estático.

por que imprime 19__0 ????


porque funciona bem. Algo mais?