Constantes de Preço

Cálculos de indicatores técnicos requerem valores de preço e/ou valores de volumes, sob os quais cálculos serão realizados. Existem 7 indicadores pré-definidos a partir da enumeração ENUM_APPLIED_PRICE, usados para especificar o preço base desejado para os cálculos.

ENUM_APPLIED_PRICE

ID

Descrição

PRICE_CLOSE

Preço de Fechamento

PRICE_OPEN

Preço de Abertura

PRICE_HIGH

O preço máximo para o período

PRICE_LOW

O preço mínimo para o período

PRICE_MEDIAN

O preço mediano, (máximo + mínimo)/2

PRICE_TYPICAL

Preço típico, (máximo + mínimo + fechamento)/3

PRICE_WEIGHTED

Preço médio, (máximo + mínimo + fechamento + fechamento)/4

Caso o volume seja usado nos cálculos, é necessário especificar um dos dois valores a partir da enumeração ENUM_APPLIED_VOLUME.

ENUM_APPLIED_VOLUME

ID

Descrição

VOLUME_TICK

Volume de Tick

VOLUME_REAL

Volume de negociação

O indicador técnico iStochastic() pode ser calculado de duas formas usando:

  • ou somente preços de Fechamento;
  • ou preços de Máximo e Mínimo.

Para selecionar uma variante necessária para o cálculo, especifique um dos valores da enumeração ENUM_STO_PRICE.

ENUM_STO_PRICE

ID

Descrição

STO_LOWHIGH

Cálculo é baseado em preços Mínimo/Máximo

STO_CLOSECLOSE

Cálculo é baseado em preços Fechamento/Fechamento

Se um indicador técnico usa nos cálculos dados de preço, seu tipo é definido por ENUM_APPLIED_PRICE, então o handle de qualquer indicador (incorporado no terminal ou escrito por um usuário) pode ser usado como a série de preço de entrada. Neste caso, os valores do buffer zero do indicador serão utilizados para os cálculos. Isso torna fácil construir valores de um indicador usando valores de um outro indicador. O handle de um indicador customizado é criado por meio de chamada da função iCustom().

Exemplo:

#property indicator_separate_window
#property indicator_buffers 2
#property indicator_plots   2
//--- parâmetros de entrada
input int      RSIperiod=14;         // Período para cálculo do RSI
input int      Smooth=8;             // Período de suavização do RSI
input ENUM_MA_METHOD meth=MODE_SMMA// Método de suavização
//---- plotar RSI
#property indicator_label1  "RSI"
#property indicator_type1   DRAW_LINE
#property indicator_color1  clrRed
#property indicator_style1  STYLE_SOLID
#property indicator_width1  1
//---- plotar RSI_Smoothed
#property indicator_label2  "RSI_Smoothed"
#property indicator_type2   DRAW_LINE
#property indicator_color2  clrNavy
#property indicator_style2  STYLE_SOLID
#property indicator_width2  1
//--- buffers do indicador
double         RSIBuffer[];          // Aqui nós armazenamos os valores do RSI
double         RSI_SmoothedBuffer[]; // Aqui estarão os valores suavizados dos RSI
int            RSIhandle;            // Handle do indicador RSI
//+------------------------------------------------------------------+
//| Função de inicialização do indicador customizado                 |
//+------------------------------------------------------------------+
void OnInit()
  {
//--- mapeamento de buffers do indicador
   SetIndexBuffer(0,RSIBuffer,INDICATOR_DATA);
   SetIndexBuffer(1,RSI_SmoothedBuffer,INDICATOR_DATA);
   IndicatorSetString(INDICATOR_SHORTNAME,"iRSI");
   IndicatorSetInteger(INDICATOR_DIGITS,2);
//--- 
   RSIhandle=iRSI(NULL,0,RSIperiod,PRICE_CLOSE);
//---
  }
//+------------------------------------------------------------------+
//| Função de iteração do indicador customizado                      |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
                 const int prev_calculated,
                 const int begin,
                 const double &price[]
                 )
 
  {
//---  Redefine o valor do último erro
   ResetLastError();
//--- Obtém dados do indicador RSI em um array RSIBuffer[]
   int copied=CopyBuffer(RSIhandle,0,0,rates_total,RSIBuffer);
   if(copied<=0)
     {
      Print("Não é possível copiar os valores do indicador RSI. Erro = ",
            GetLastError(),",  copiado =",copied);
      return(0);
     }
//--- Cria o indicador de valores médios usando valores do RSI
   int RSI_MA_handle=iMA(NULL,0,Smooth,0,meth,RSIhandle);
   copied=CopyBuffer(RSI_MA_handle,0,0,rates_total,RSI_SmoothedBuffer);
   if(copied<=0)
     {
      Print("Não é possível copiar o indicador suavizado do RSI. Erro = ",
            GetLastError(),",  copiado =",copied);
      return(0);
     }
//--- valor retorno de prev_calculated para a próxima chamada
   return(rates_total);
  }