Stima della soglia kappa1
definita l’ ampiezza di una finestra che contiene N giorni antecedenti il giorno su cui si vuole fare la previsione, il procedimento, trattandosi di 1 solo parametro, è del tipo a “griglia” cioè si parte da un certo valore, si varia detto valore a piccoli step ( es 0.1 ) e si sceglie quello che massimizza una certa fitness function ( nel caso specifico x semplicità è stata scelta la somma dell’ utile, vedi controllo “metodo di scelta soglia” sul Foglio1 )
quando i parametri da stimare sono + di 1 si ricorre a metodi numerici oppure meglio ancora agli algoritmi genetici che in quanto approssimatori universali sono adatti a trovare soluzioni a molti problemi di calcolo
poiché i loops in Excel non sono possibili, detta stima viene fatta col VB che è il grande valore aggiunto di Office
il Visual Basic è molto semplice, come parlare in Inglese tecnico, e deriva direttamente dal vecchio BASIC ( acronimo x Beginners All Purpose System Instruction Coding ) degli anni ’70 o giù di lì
riassumo qui le istruzioni principali:
Items1 = 20
For i=1 to Items1
Tabkappa1(i) = 0.1 – 0.1*i
Next i
‘
For k = 5 To Last
Primo = 1
If k > Window Then
Primo = k - Window + 1
End If
Findbestx1 Input1(), k
R_kappa1(k + 3, 1) = Tabkappa1(Best1)
R_casi.Cells(k + 3, 1).Value = Best3
Next k
'
dove input1 = inputx del Foglio2
yield2 = yield2 del Foglio2
'
Sub Findbestx1(fx() As Double, k As Integer)
Dim i As Integer
Dim j As Integer
Dim m As Integer
Dim d As Double
Dim cumx As Double
Dim bestx As Double
'
ReDim Inputz(1 To Window) As Double
'
Ultimo = k
Best1 = Items1: Best2 = 0
Best3 = 0
'
For m = 1 To Items1
j = 0
For i = Primo To Ultimo - 1
If fx(i) <= Tabkappa1(m) Then
j = j + 1
Inputz(j) = Yield2(i)
End If
Next i
'
If j > 8 Then
Select Case Scelta
Case 1
cumx = Cum(Inputz(), j)
Case 2
cumx = Ema(Inputz(), j)
Case 3
cumx = Omega(Inputz(), j)
Case 4
cumx = Sharpe(Inputz(), j)
End Select
If cumx > Best2 Then
Best2 = cumx
Best1 = m
Best3 = j
End If
End If
Next m
'
End Sub
‘
Public Function Cum(f() As Double, j As Integer)
Dim n As Integer
Dim cum1 As Double
'
For n = 1 To j
cum1 = cum1 + f(n)
Next n
Cum = cum1
'
End Function
mi sembra che sia abbastanza semplice interpretare le istruzioni sopra esposte x chi ha un po’ di dimestichezza con la programmazione, tuttavia chi ha bisogno di chiarimenti chieda pure liberamente senza problemi