venerdì 6 maggio 2016

Le bande di Bollinger*

Le Bande di Bollinger (che prendono il nome dal suo ideatore) vogliono essere d'aiuto per misurare e sfruttare, nell'operatività quotidiana, un aspetto che molto influisce sull'andamento delle quotazioni: la volatilità.
La volatilità, o variabilità di un titolo, la possiamo definire semplicemente (anche se non del tutto correttamente) come l'escursione media del prezzo in un dato periodo di tempo, e viene definita dalla cosiddetta Deviazione Standard.
Per calcolare le Bande di Bollinger si usa dapprima una media mobile a G giorni (spesso 20) a cui viene aggiunto o sottratto il valore della deviazione standard moltiplicata per un determinato fattore F (spesso intorno a 2).

 La banda superiore è quindi ottenuta aggiungendo alla media mobile F volte la deviazione standard. 

La banda centrale (se la si vuole visualizzare) è data dalla media mobile. 

La banda inferiore è calcolata sottraendo alla media mobile F volte la deviazione standard. La banda, delimitata dalla linea superiore e dalla linea inferiore, formerà una specie di canale dinamico la cui ampiezza aumenta e diminuisce in funzione della volatilità del titolo, racchiudendo così un'alta percentuale delle sue oscillazioni.

Il beneficio più grande che si ricava dall'uso delle Bande di Bollinger sta nell'immediato impatto visivo che permette all'analista di farsi subito un'idea circa la volatilità che è presente sul mercato.
E' risaputo che un periodo di bassa volatilità viene, solitamente, seguito da uno di alta volatilità e forte direzionalità. Un periodo di alta volatilità è, a sua volta, motivo di forte rischio di un improvviso e brusco cambiamento del trend. Necessita, infine, di un periodo di assestamento.

Per poter calcolare le bande di Bollinger prima di tutte serve definire una funzione che calcoli la Deviazione Standard
Function DevSt(ByVal Serie As List(Of Osservazione))
   Dim somma As Double   Dim count As Double   Dim scarti As Double   Dim scartiquadrati As Double   Dim media As Double   Dim varianza As Double   Dim deviazionestandard As Double
 For i As Integer = i To Serie.Count - 1
   somma += Serie(i).Prezzo   count += 1   media = somma / count   scarti = Serie(i).Prezzo - media   scartiquadrati = scarti ^ 2   varianza = scartiquadrati / count
 Next
 deviazionestandard = Math.Sqrt(varianza)
  Return deviazionestandard
End Function
 'Calcoliamo ora le bande di Bollinger

Dim BollingerSup As Double
Dim BollingerInf As Double
Dim i As Integer = 0
  For i = i To SerieMoving.Count - 1
     Dim s As Double = Me.DevSt(SerieMoving)
     BollingerSup = SerieMoving(i).Prezzo + (2 * s)
     Dim bs As New Osservazione       With bs              .Prezzo = BollingerSup              .Istante = SerieMoving(i).Istante              SerieBollingerSup.Add(bs)
       End With
     BollingerInf = SerieMoving(i).Prezzo - (2 * s)
       Dim bi As New Osservazione         With bi               .Prezzo = BollingerInf               .Istante = SerieMoving(i).Istante               SerieBollingerInf.Add(bi)
        End With  Next

Per poter calcolare le Running Mean e Moving Mean
Public SS As New List(Of Osservazione)
Public SerieRunning As New List(Of Osservazione)
Public SerieMoving As New List(Of Osservazione)
Public PuntiSS As New List(Of Point)
Public PuntiSR As New List(Of Point)
Public PuntiSM As New List(Of Point)

Public k1 As Integer  

Private Sub Button1_Click(ByVal sender As System.ObjectByVal e As System.EventArgsHandles Button1.Click
'Questo comando serve per resettare gli oggetti ogni volta che viene premuto button
   Me.SS.Clear()
   Me.SerieRunning.Clear()   Me.SerieMoving.Clear()
   Dim RunningMean As Double
   Dim MovingMean As Double
 'Si crea la serie storica random come visto nello script precedente, dopodichè
RunningMean = (RunningMean*SS.Count+prezzoCorrente)/(SS.Count+1)
    Dim r As New Osservazione()
    With r
        .Prezzo = RunningMean
        .Istante = osservazione.Istante
        .X = osservazione.X
        .Y = r.Prezzo

     Me.SerieRunning.Add(r)
   End With


Me.k1 = NumericUpDown1.Value

MovingMean=
MovingMean+(SS(SS.Count-1).Prezzo/Me.k1)-(SS(SS.Count-Me.k1-1).Prezzo/Me.k1)

 Dim m As New Osservazione()
 With m
        .Prezzo = MovingMean
        .Istante = osservazione.Istante
        .X = osservazione.X
        .Y = m.Prezzo

     Me.SerieMoving.Add(r)
   End With
 SS.Add(osservazione)
Loop

(...)
Me.grafico.Clear(Color.White)
Me.grafico.DrawLines(Pens.Black, Me.PuntiSS.ToArray)Me.grafico.DrawLines(Pens.DarkViolet, Me.PuntiSR.ToArray)
Me.grafico.DrawLines(Pens.Red, Me.PuntiSM.ToArray)
Me.PictureBox1.Image = Me.bitmap


Nessun commento:

Posta un commento