NeW VaR

Citazione:
Originalmente inviato da Paolo1956
C'era una una cosa che non mi tornava, adesso che lo rivedo ho capito cos'era.

Dalla definizione formale sembrerebbe che per calcolare il termine aggiuntivo si deve estrarre dal campione dei rendimenti quelli inferiori al var e su quelli e solo su quelli calcolare media e dev.

Dalle formole successive, con quella che chiami funzione di ripartizione, sembrerebbe invece che i rend. > Var li moltiplichi per zero e poi calcoli m e dev su tutto il campione così modificato.

Qual'è l'interpretazione giusta?



Vengono moltiplicati per zero quelli che non eccedono il VaR canonico così da avere una stima approssimativa(teoricamente andrebbero eliminati) dei valori overVaR.

Su questa stima (che assumerà valore zero in assenza di outliers >VaR canonico) calcoliamo un nuovo VaR(Plus) con intervallo di confidenza a nostra scelta (<>= all'intervallo utilizzato per il VaR canonico, a seconda dell'importanza che vogliamo attribuire agli outliers) che, sommato al VaR canonico darà origine al NeW VaR.

La finestra è variabile e con essa la reattività della stima.

L'utilizzo della EWMA RiskMetrics con decay factor=0.94, come proxy per il NeW VaR è, ad oggi, imbattuta:)

Ciao Paolo,

Paponzi, vorrei approfittare della sua pazienza per chiedere
come si calcola la EWMA RiskMetrics? Tradotto in linguaggio naturale.

Cosi integro l'excel e pubblico tutto. In modo che se ci sono errori nell'excel li potete correggere.
 

Allegati

  • WindowsLiveWriterEWMAmodelquantitative_D0D7image_thumb_1.png
    WindowsLiveWriterEWMAmodelquantitative_D0D7image_thumb_1.png
    80,1 KB · Visite: 268
s2t+1 = r2t*(1-lambda)+lambda*s2t
e ti ricavi la varianza
 
Paponzi, vorrei approfittare della sua pazienza per chiedere
come si calcola la EWMA RiskMetrics? Tradotto in linguaggio naturale.

Cosi integro l'excel e pubblico tutto. In modo che se ci sono errori nell'excel li potete correggere.

Mi hai preceduto :(
 
se non dico cavolate dovrebbe esser così, dove la JP ha stimato lamba per dati EOD uguale a 0,94 e 0,97 per dati mensili.

ma paponzi saprà dire meglio queste cose certamente
 
ewma.gif


dove: Sigma squared è la varianza, U squared è il rendimento logaritmico periodico al quadrato, Lambda è il fattore di decadimento(peso) che imponiamo alle nuove osservazioni.

Il tutto stimato in forma ricorsiva.​
 
Visto che tanti fanno uso di excel, due funzioni definite dall'utente per l'argomento: ValueAtRisk e NewVar:

Codice:
Private Const mConfLev As Double = 2.326
Public Function ValueAtRisk(r As Range) As Double
    'Retrieve VAR of price's range
    'Tipically lenght of range should be 252
    'Arguments of function:
    '   r:  a range of prices
    '________________________________________
    
    Dim nData As Integer
    Dim mRend() As Double
    Dim i As Integer
    
    
    
    nData = r.Rows.Count
    ReDim mRend(nData - 2)
    For i = 2 To nData
        mRend(i - 2) = Log((r(i).Value / r(i - 1).Value)) * 100
        Next
        
     ValueAtRisk = vSimpleAve(mRend) - mConfLev * vStandDev(mRend)
     
End Function
Public Function NewVar(r1 As Range, r2 As Range) As Double
    'Retrieve NewVar of a range of prices(r1) and a range of VAR(r2)
    'For references see:
    'http://www.finanzaonline.com/forum/econometria-e-modelli-di-trading-operativo/1205400-new-var.html
    'Tipically lenght of range should be 252
    'Arguments of function:
    '   r1:  a range of prices
    '   r2:  a range of ValueAtRisk
    '________________________________________
    
    Dim nData As Integer
    Dim mRend() As Double
    Dim mTemp() As Double
    Dim i As Integer
    
    nData = r1.Rows.Count
    ReDim mRend(nData - 2)
    
    
    For i = 2 To nData
        mRend(i - 2) = Log((r1(i).Value / r1(i - 1).Value)) * 100
        Next
    
    
    For i = 0 To nData - 2
    
        If mRend(i) > r2(i + 1) Then
            mRend(i) = 0
            End If
            
        Next
    
            
    NewVar = r2(nData).Value + (vSimpleAve(mRend) - mConfLev * vStandDev(mRend))
         
        
End Function
Private Function vSimpleAve(dArray() As Double) As Double
    Dim nData As Integer
    Dim i As Integer
    Dim mSum As Double
    
    nData = UBound(dArray)
    For i = 0 To nData
        mSum = mSum + dArray(i)
        Next i
        
    vSimpleAve = mSum / (nData + 1)
    
    
End Function
Private Function vStandDev(dArray() As Double) As Double
    Dim nData As Integer
    Dim i As Integer
    Dim mSum As Double
    Dim mAve As Double
    
    mAve = vSimpleAve(dArray)
    
    nData = UBound(dArray)
    If nData = 0 Then
        vStandDev = 0
        Exit Function
        End If
        
    For i = 0 To nData
        mSum = (dArray(i) - mAve) ^ 2 + mSum
        Next i
    mSum = mSum / nData
    vStandDev = Sqr(mSum)
    
End Function

In excel si apre VBA, si crea un nuovo modulo, ci si incolla il codice, si compila, e si hanno a disposizione le due funzioni.

:)
 
Visto che tanti fanno uso di excel, due funzioni definite dall'utente per l'argomento: ValueAtRisk e NewVar:

Codice:
Private Const mConfLev As Double = 2.326
Public Function ValueAtRisk(r As Range) As Double
    'Retrieve VAR of price's range
    'Tipically lenght of range should be 252
    'Arguments of function:
    '   r:  a range of prices
    '________________________________________
    
    Dim nData As Integer
    Dim mRend() As Double
    Dim i As Integer
    
    
    
    nData = r.Rows.Count
    ReDim mRend(nData - 2)
    For i = 2 To nData
        mRend(i - 2) = Log((r(i).Value / r(i - 1).Value)) * 100
        Next
        
     ValueAtRisk = vSimpleAve(mRend) - mConfLev * vStandDev(mRend)
     
End Function
Public Function NewVar(r1 As Range, r2 As Range) As Double
    'Retrieve NewVar of a range of prices(r1) and a range of VAR(r2)
    'For references see:
    'http://www.finanzaonline.com/forum/econometria-e-modelli-di-trading-operativo/1205400-new-var.html
    'Tipically lenght of range should be 252
    'Arguments of function:
    '   r1:  a range of prices
    '   r2:  a range of ValueAtRisk
    '________________________________________
    
    Dim nData As Integer
    Dim mRend() As Double
    Dim mTemp() As Double
    Dim i As Integer
    
    nData = r1.Rows.Count
    ReDim mRend(nData - 2)
    
    
    For i = 2 To nData
        mRend(i - 2) = Log((r1(i).Value / r1(i - 1).Value)) * 100
        Next
    
    
    For i = 0 To nData - 2
    
        If mRend(i) > r2(i + 1) Then
            mRend(i) = 0
            End If
            
        Next
    
            
    NewVar = r2(nData).Value + (vSimpleAve(mRend) - mConfLev * vStandDev(mRend))
         
        
End Function
Private Function vSimpleAve(dArray() As Double) As Double
    Dim nData As Integer
    Dim i As Integer
    Dim mSum As Double
    
    nData = UBound(dArray)
    For i = 0 To nData
        mSum = mSum + dArray(i)
        Next i
        
    vSimpleAve = mSum / (nData + 1)
    
    
End Function
Private Function vStandDev(dArray() As Double) As Double
    Dim nData As Integer
    Dim i As Integer
    Dim mSum As Double
    Dim mAve As Double
    
    mAve = vSimpleAve(dArray)
    
    nData = UBound(dArray)
    If nData = 0 Then
        vStandDev = 0
        Exit Function
        End If
        
    For i = 0 To nData
        mSum = (dArray(i) - mAve) ^ 2 + mSum
        Next i
    mSum = mSum / nData
    vStandDev = Sqr(mSum)
    
End Function

In excel si apre VBA, si crea un nuovo modulo, ci si incolla il codice, si compila, e si hanno a disposizione le due funzioni.

:)

:clap:OK!

Ma che gentile cavolo!!!!

Non è che fai pure la EWMA? :)

Grazie Paponzi, Luka e Paolo!!!!
 
Alpha:=0.94;

ZetaVaR:=Input("Zeta VaR(confidence level):",0,2.326350,2.326);
ZetaNeWVaR:=Input("Zeta NeWVaR(confidence level):",0,3.3,2.326);

r:= 100*Log(C/Ref(C,-1));
avgrend:= PREV*(alpha)+ r*(1-alpha);
volatilita:=Sqr(Power(PREV,2)*(alpha)+(1-alpha)*Power(r-avgrend,2));
vr:=-zetavar*volatilita;
Dt:=If(r<Ref(vr,-1),1,0);

r:=r*dt;


avgrend:= PREV*(alpha)+ r*(1-alpha);
volatilita:=Sqr(Power(PREV,2)*(alpha)+(1-alpha)*Power(r-avgrend,2));
varplus:=-zetaNeWVaR*volatilita;


NEWVAR(t+1):=varplus+vr;NEWVAR(t+1)
 
Alpha:=0.94;

ZetaVaR:=Input("Zeta VaR(confidence level):",0,2.326350,2.326);
ZetaNeWVaR:=Input("Zeta NeWVaR(confidence level):",0,3.3,2.326);

r:= 100*Log(C/Ref(C,-1));
avgrend:= PREV*(alpha)+ r*(1-alpha);
volatilita:=Sqr(Power(PREV,2)*(alpha)+(1-alpha)*Power(r-avgrend,2));
vr:=-zetavar*volatilita;
Dt:=If(r<Ref(vr,-1),1,0);

r:=r*dt;


avgrend:= PREV*(alpha)+ r*(1-alpha);
volatilita:=Sqr(Power(PREV,2)*(alpha)+(1-alpha)*Power(r-avgrend,2));
varplus:=-zetaNeWVaR*volatilita;


NEWVAR(t+1):=varplus+vr;NEWVAR(t+1)

avgrend:= PREV*(alpha)+ r*(1-alpha);
volatilita:=Sqr(Power(PREV,2)*(alpha)+(1-alpha)*Power(r-avgrend,2));

prev? (lo voglio tradurre per... non so PREV che vuol dire in MS)
power?

Grazie :)
 
avgrend:= PREV*(alpha)+ r*(1-alpha);
volatilita:=Sqr(Power(PREV,2)*(alpha)+(1-alpha)*Power(r-avgrend,2));

prev? (lo voglio tradurre per... non so PREV che vuol dire in MS)
power?

Grazie :)


prev è la notazione ricorsiva-

;)
 
Ciao

a meno di errori viene cosi' ?
la formula l'avevo presa dal blog di Surcontre.
 

Allegati

  • EWMA risk metric.txt
    539 bytes · Visite: 118
Ultima modifica:
è giustoOK!
 

Allegati

  • giusto.jpg
    giusto.jpg
    67,9 KB · Visite: 50
Tiè, ma controllalo.....

Grazie. Beh lascio dire a Paponzi se è corretto anche perchè qui non ho modo di verificarlo...

Intanto faccio domanda a Paponzi. Ovvero: ok che il new Var viene bucato meno frequentemente del VAR dagli spike dei rendimenti... Ma....

... Il ma è: non si sopravvaluta il rischio? Ok che posso variare la Z ma lo spread VAR-New VAR su certi titoli è davvero alto. Quindi se il var mi dice "rischi il 2%" ed il new var "il 2,5%".... Quello 0.5% (che varia a seconda della soglia yield<var etc..) sommato per le rilevazioni non rende meno realistica la stima delle frequenze corrette? Per la fretta forse mi esprimo male. Sul documento tecnico ho letto qualcosa. Ma era sempre riferito all'sp500.
 
Grazie. Beh lascio dire a Paponzi se è corretto anche perchè qui non ho modo di verificarlo...

Intanto faccio domanda a Paponzi. Ovvero: ok che il new Var viene bucato meno frequentemente del VAR dagli spike dei rendimenti... Ma....

... Il ma è: non si sopravvaluta il rischio? Ok che posso variare la Z ma lo spread VAR-New VAR su certi titoli è davvero alto. Quindi se il var mi dice "rischi il 2%" ed il new var "il 2,5%".... Quello 0.5% (che varia a seconda della soglia yield<var etc..) sommato per le rilevazioni non rende meno realistica la stima delle frequenze corrette? Per la fretta forse mi esprimo male. Sul documento tecnico ho letto qualcosa. Ma era sempre riferito all'sp500.


Il contrario: è il VaR che lo sottovaluta (altrimenti in NeWVaR coinciderebbe..):)
 
Ciao

scusate ma mi sono perso qualche calcolo,

non dovrei calcolare la varianza dei rendimenti prima e poi calcolare la formula ?
 
Indietro