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 252

 
ALXIMIKS:
Veja este artigo, não é tão simples quanto parece, e geralmente é bastante útil.

dei uma olhada. levarei uma semana para estudá-lo em detalhes. mas o pior é que não consegui encontrar nenhum lugar nele que estivesse relacionado à minha tarefa. não pinto os indicadores e não os modifico de forma alguma. só quero encontrar altos e baixos nas últimas barras. há uma dica de similaridade no RSI_Extremums_Sample.mq4 mas não posso fazer isso. há muita coisa extra, o indicador é desenhado em.... e não preciso disso...
 
lottamer:

eu olhei para ele. levarei uma semana para estudá-lo em detalhes. mas o pior é que não consegui encontrar nenhum lugar que fosse relevante para a minha tarefa. eu não faço indicadores de cor e não os modifico de forma alguma. eu só quero encontrar máximos e mínimos nas últimas barras. há uma dica de similaridade no RSI_Extremums_Sample.mq4 mas não consigo lidar com este código. é muito desnecessário, o indicador DRAWNS.... e não preciso disso...


3173
artmedia70 27.10.2013 15:42 #
Forexman77:

É possível, com a função "ArrayMaximum", calcular o máximo próximo de um indicador personalizado?

Ou eu preciso de outras funções para isso?

Eu tentei desta maneira:

E nada sai. Gurus, você pode me dizer como fazer isso?

   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 pesquisar na EA. NÃO em um indicador.

 
lottamer:

A única coisa que eu não entendo é como calcular os extremos do indicador MACD, por exemplo, em vez dos extremos do preço em n períodos ?

Acho que preciso mudar ALTO e BAIXO para MACD no bloco chave. Mas eu não entendo como ... todas as minhas tentativas de fazer bobagens terminaram em nulling.

Eu entendo que preciso criar uma matriz MACD.

MACDBuffer duplo[];

Também já vi tal seqüência em outros Consultores Especialistas

mas não posso medir um no outro...

Por favor, aconselhe como fazer isso?


Artigo.
 

encontrou algo semelhante na 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);
  }
}

pergunta: como posso criar uma série de valores indicadores?

 
lottamer:

encontrou algo semelhante na Kim's

Pergunta: como posso criar uma série de valores indicadores?

reli o que foi pedido, enganei-me no início (

Para obter um buffer de dados indicadores, você pode

1) executar um loop com a coleta de valores iMACD no buffer

2) pegue o código fonte do MACD, há um buffer lá

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:

releia o que foi perguntado, entendeu mal no início(

Para obter um buffer com os dados de um indicador, você pode:

1) executar um loop com a coleta de valores iMACD no buffer

2) pegar o código fonte do MACD onde está o buffer


Como visualizar o buffer, caso contrário não sei o que fazer com ele....

Print(MACDBuffer[1]); ?? imprime zero... por quê? em teoria deve ser o valor do 1º bar....

e outra coisa... por que calcular MACD usando MA quando há uma função direta iMACD ???

 
lottamer:


e como visualizo o buffer senão não entendo o que fazer com ele....

Print(MACDBuffer[1]); ?? imprime zero...por quê? deve ser o valor do 1º bar....

e outra coisa... por que calcular MACD usando MA, quando há uma função direta iMACD ???


Por favor, diga-me o que você precisa,

mas deve ser mais claro, para que até mesmo uma pessoa burra possa entendê-lo.

 
ALXIMIKS:


Por favor, diga-me o que você quer,

mas de uma forma clara, de modo que até o burro entenda.

Preciso determinar os valores mínimos (como na figura) e máximos do indicador MACD para um determinado número de barras. (20, neste caso).

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



 
artmedia70:
O trabalho dos CDs é dar uma boa história. Eles são preguiçosos e sempre culpam os MCs.


Obrigado!
 
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....

Inserir no final do 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. embora isto seja mais correto e melhor:

   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);
   }