spero tu abbia capito il funzionamento in quanto la presunta difficoltà è solo a livello di novità
x il resto la routine che serve a stimare ”kappa1” ( o kappa2 ) su una “rolling window” è abbastanza semplice, solo pochi loops
quello utilizzato è un procedimento cosiddetto “a griglia” : si creano inizialmente 2 tabelle Tabkappa1 e Tabkappa2 che contengono i valori che devono assumere kappa1 e kappa2 con step qualsivoglia, nel caso specifico è stato scelto uno step = 0.05
dopo di che si scorre dall’ inizio alla fine l’ array che contiene il valore di yield1 ( il rendimento open to 1630 ) considerando x ogni giorno “N” i dati dei soli “window” giorni precedenti a ”N”
in questo caso è stato scelto il valore window = 200 gg dato che le occasioni sono piuttosto rare, in altri casi un valore window = 100 è adeguato e consigliabile
se Input1( i ) contiene i valori giornalieri di yield1 e Volat1( i ) un proxy della volatilità di yield1 allora queste le istruzioni in linguaggio BASIC, il + facile ed intuitivo che esiste:
For k = 5 To Last
‘ stabilisci il primo giorno della rolling window
Primo = 1
If k > Window Then
Primo = k - Window + 1
End If
‘ vai alla subroutine Findbestx1
Findbestx1 Input1(), k
‘ scrivi nella colonna kappa1 del Foglio2
R_kappa1.Cells(k + 3, 1).Value = Tabkappa1(Best1)
Findbestx2 Input1(), k
R_kappa2.Cells(k + 3, 1).Value = Tabkappa2(Best1)
Next k
Sub Findbestx1(fx() As Double, k As Integer)
Dim i As Integer
Dim j As Integer
Dim m As Integer
Dim cumx As Double
Dim bestx As Double
'
‘ dimensiona l’ array Inputz
ReDim Inputz(1 To Window) As Double
'
Ultimo = k
Best1 = Items1: Best2 = 1
'
For m = 1 To Items1
j = 0
For i = Primo To Ultimo - 1
If Input1(i) >= Volat1(i) * Tabkappa1(m) Then
j = j + 1
Inputz(j) = Input2(i)
End If
Next i
'
‘ a questo punto la matrice Inputz( j ) contiene i valori dei risultati ( yield2 ) relativi
‘ al valore Tabkappa1( m )
‘ a seconda del valore del controllo “Scelta” del Foglio1 si sceglie un certo indice
‘ di performance
Select Case Scelta
Case 1
cumx = Cum(Inputz(), j)
Case 2
cumx = Ema(Inputz(), j)
Case 3
cumx = ES(Inputz(), j)
Case 4
cumx = Omega(Inputz(), j)
Case 5
cumx = Sharpe(Inputz(), j)
End Select
‘ memorizza il valore migliore di “m”
If cumx > Best2 Then
Best2 = cumx
Best1 = m
End If
Next m
'
End Sub