Indicador/Expert de cone de volatilidade

 

Caros,

É possível a criação de um indicador ou expert que plote em uma data futura as cotações calculadas a partir da volatilidade histórica de um ativo, até uma data parametriazada?

Segue uma imagem com o cone plotado como exemplo.

Arquivos anexados:
 
Glayton Teixeira de Araújo:

Caros,

É possível a criação de um indicador ou expert que plote em uma data futura as cotações calculadas a partir da volatilidade histórica de um ativo, até uma data parametriazada?

Segue uma imagem com o cone plotado como exemplo.

sim, veja o exemplo do alligator ou do ichimoku.
 
Ricardo Rodrigues Lucca #:
sim, veja o exemplo do alligator ou do ichimoku.

Já tentei com base no ichimoku, porém não funcionou.

 
Glayton Teixeira de Araújo #:

Já tentei com base no ichimoku, porém não funcionou.

Se quiser post o codigo que a gente pode dar uma olhada. Como que é feito no ichimoku ou no alligator, no OnInit é feito uma chamada pra dizer que a plotagem é deslocada pra direita ou esquerda e qual buffer. Eu recomendaria tu colocar tua media num buffer sem offset e a parte do cone em outro buffer com o offset pra direita. A parte maior do cone vai ser o mais recente do buffer e o restante tu mantem com desenho vazio (EMPTY_VALUE).
 
Ricardo Rodrigues Lucca #:
Se quiser post o codigo que a gente pode dar uma olhada. Como que é feito no ichimoku ou no alligator, no OnInit é feito uma chamada pra dizer que a plotagem é deslocada pra direita ou esquerda e qual buffer. Eu recomendaria tu colocar tua media num buffer sem offset e a parte do cone em outro buffer com o offset pra direita. A parte maior do cone vai ser o mais recente do buffer e o restante tu mantem com desenho vazio (EMPTY_VALUE).

Na verdade o que importa é a cotação da última barra. A partir dela, eu calculo as cotações diárias futuras de 1 desvio padrão da volatilidade histórica do ativo. O resultado desse cálculo é o que deve ser plotado, a partir da última barra. O PLOT_SHIFT não funcionou, para o meu caso, porque desloca o resultado de hoje para X dias. 

Segue um exemplo do indicador do tradingview.com com a plotagem do cone da volatilidade histórica e implícita do ativo.
Arquivos anexados:
 
Glayton Teixeira de Araújo #:

Na verdade o que importa é a cotação da última barra. A partir dela, eu calculo as cotações diárias futuras de 1 desvio padrão da volatilidade histórica do ativo. O resultado desse cálculo é o que deve ser plotado, a partir da última barra. O PLOT_SHIFT não funcionou, para o meu caso, porque desloca o resultado de hoje para X dias. 

Segue um exemplo do indicador do tradingview.com com a plotagem do cone da volatilidade histórica e implícita do ativo.
sim, o cone que voce mostrou tambem utiliza a informacao de X velas pra frente. No caso no exemplo ta em 30 minutos e ele no script calcula que sao X velas pra frente para o proximo dia e projeta o cone ate la. Nesse caso que ficaria mudando a cada vela realmente nao sei como se comportaria mesmo o PLOT_SHIFT.
 
Precisa ser mesmo um cone? Se vc tentar alguma outra figura, tipo uma piramide com blocos, ou linhas talvez seja mais fácil
 
Cesar Afif rezende Oaquim #:
Precisa ser mesmo um cone? Se vc tentar alguma outra figura, tipo uma piramide com blocos, ou linhas talvez seja mais fácil

A figura de cone é o resultado ao ligar os pontos do cálculo gerado. Ao invés da linha pode ser a figura do SAR parabólico.

 
Glayton Teixeira de Araújo #:

A figura de cone é o resultado ao ligar os pontos do cálculo gerado. Ao invés da linha pode ser a figura do SAR parabólico.

Tava brincando aqui com a ideia de fazer um cone acabou ficando cmpletamente diferente hahaha.


 
Ricardo Rodrigues Lucca #:

Tava brincando aqui com a ideia de fazer um cone acabou ficando cmpletamente diferente hahaha.


Nossa, que interessante. Você pode compartilhar o código? Minha maior dificuldade é a plotagem no tempo futuro.

 
Glayton Teixeira de Araújo #:

Nossa, que interessante. Você pode compartilhar o código? Minha maior dificuldade é a plotagem no tempo futuro.

sim

#property version   "1.00"
#property indicator_chart_window
#property indicator_buffers 4
#property indicator_plots   4
//--- plot Label1
#property indicator_label1  "Label1"
#property indicator_type1   DRAW_LINE
#property indicator_color1  clrRed
#property indicator_style1  STYLE_SOLID
#property indicator_width1  1
//--- plot Label2
#property indicator_label2  "Label2"
#property indicator_type2   DRAW_LINE
#property indicator_color2  clrRed
#property indicator_style2  STYLE_SOLID
#property indicator_width2  1
//--- plot Label3
#property indicator_label3  "Label3"
#property indicator_type3   DRAW_LINE
#property indicator_color3  clrBlue
#property indicator_style3  STYLE_SOLID
#property indicator_width3  1
//--- plot Label4
#property indicator_label4  "Label4"
#property indicator_type4   DRAW_LINE
#property indicator_color4  clrBlue
#property indicator_style4  STYLE_SOLID
#property indicator_width4  1
//--- input parameters
input double   Input1=0.02;
//--- indicator buffers
double         Label1Buffer[];
double         Label2Buffer[];
double         Label3Buffer[];
double         Label4Buffer[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- indicator buffers mapping
   SetIndexBuffer(0,Label1Buffer,INDICATOR_DATA);
   SetIndexBuffer(1,Label2Buffer,INDICATOR_DATA);
   SetIndexBuffer(2,Label3Buffer,INDICATOR_DATA);
   SetIndexBuffer(3,Label4Buffer,INDICATOR_DATA);

   PlotIndexSetInteger(0,PLOT_SHIFT, 26);
   PlotIndexSetInteger(1,PLOT_SHIFT, 26);
   PlotIndexSetInteger(2,PLOT_SHIFT, 26);
   PlotIndexSetInteger(3,PLOT_SHIFT, 26);

//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
                const int prev_calculated,
                const int begin,
                const double &price[])
  {
//--- coloca tudo com vazio
   for(int I=0; I<rates_total; I++)
     {
      Label1Buffer[I] = Label2Buffer[I] = Label3Buffer[I] = Label4Buffer[I] = EMPTY_VALUE;
     }
//--- passa na parte mais recente do array desenhando
//--- o elemento I=0 eh o elemento mais distante e o I=25 o primeiro candle futuro.
//--- note que todos os elementos usam como base a vela atual (mais recente)
   for(int I=0; I<26; I++)
     {
      int offset = 26 - I;
      double value = (Input1 / price[rates_total - 1]) * offset * MathLog(I);
      Label1Buffer[rates_total-1-I] = price[rates_total-1] + value;
      Label2Buffer[rates_total-1-I] = price[rates_total-1] - value;
      Label3Buffer[rates_total-1-I] = price[rates_total-1] + value * 2.0;
      Label4Buffer[rates_total-1-I] = price[rates_total-1] - value * 2.0;
     }

//--- como deslocamos 26 pra direita, esse elemento eh a vela atual entao
//--- colocamos o preco que recebemos que por padrao eh o fechamento.
   Label1Buffer[rates_total-1-26] = price[rates_total-1];
   Label2Buffer[rates_total-1-26] = price[rates_total-1];
   Label3Buffer[rates_total-1-26] = price[rates_total-1];
   Label4Buffer[rates_total-1-26] = price[rates_total-1];

//--- return value of prev_calculated for next call
   return(rates_total);
  }
//+------------------------------------------------------------------+