Surfing Correlation

Midcap tedesche Solo long e VIX < di 40 ...rimango dell'idea che quando iniziano i guai è meglio starne fuori e rimanere liquidi. Quindi per me il problema di dove investire quando non si è long sullo strumento prescelto non si pone neanche, i soldi rimangono sul cc e buonanotte


Fra il 2007 e il 2009 vedo comunque un DD attorno al 20% con recovery time superiore ai due anni...

Da una strategia che richiede un controllo quotidiano delle quotazioni mi aspetto DD di gran lunga inferiori.
 
Io ho postato due papers recentemente, li riallego, in essi c'è, a mio avviso, una soluzione robusta ed idonea.

Il paper sul money management me lo ero perso, hai fatto benissimo a riproporlo, ottimo materiale.. OK!

Credo di aver capito dove vuoi arrivare, ma per sincerarmene prima allego un paper che forse rappresenta l`anello mancante tra i due studi che hai postato:

A Broad Hint From the Vix : Timing the market with the impiled volatility

Comunque l`idea di base di parametrare l`esposizione long della Quant_Vix al rischio attraverso un mix tra azionario/cash-obbligazionario mi sembra una buona idea che va nella direzione di massimizzare il rapporto rischio/rendimento..


paoly ha scritto:
Midcap tedesche Solo long e VIX < di 40 ...rimango dell'idea che quando iniziano i guai è meglio starne fuori e rimanere liquidi..

Oppure anche diluire gradualmente l`esposizione azionaria in accordo con l`evoluzione dei valori segnati dal Vix, o con cash o comunque con qualcosa di poco correlato..

:)
 
Ultima modifica:
Fra il 2007 e il 2009 vedo comunque un DD attorno al 20% con recovery time superiore ai due anni...

Da una strategia che richiede un controllo quotidiano delle quotazioni mi aspetto DD di gran lunga inferiori.

Si hai ragione 2007-2009 tra più grandi guai della storia dei mercati. Buttarsi però su un altro strumento finanziario (tlt o simili) nella speranza di non subire grossi DD non mi pare corretto, perché di "speranza" si tratta. Se veramente sono convinto che il bond X mi funzionerà da assicurazione contro i crolli me lo tengo fisso in portafoglio come fosse una Put che non ha scadenza. Tra l'altro passando da uno strumento all'altro aumento il numero delle operazioni. Il controllo della size sarebbe l'ideale ma ha il medesimo difetto se devi gestire la size quando sei già a mercato. Spiegatemi dove sbaglio? ...sono un trader della domenica :)
 
Fra il 2007 e il 2009 vedo comunque un DD attorno al 20% con recovery time superiore ai due anni...

Da una strategia che richiede un controllo quotidiano delle quotazioni mi aspetto DD di gran lunga inferiori.

E' giusto e cmprensibile, sono d'accordo.

Il paper sul money management me lo ero perso, hai fatto benissimo a riproporlo, ottimo materiale.. OK!

Credo di aver capito dove vuoi arrivare, ma per sincerarmene prima allego un paper che forse rappresenta l`anello mancante tra i due studi che hai postato:

A Broad Hint From the Vix : Timing the market with the impiled volatility

Comunque l`idea di base di parametrare l`esposizione long della Quant_Vix al rischio attraverso un mix tra azionario/cash-obbligazionario mi sembra una buona idea che va nella direzione di massimizzare il rapporto rischio/rendimento..




Oppure anche diluire gradualmente l`esposizione azionaria in accordo con l`evoluzione dei valori segnati dal Vix, o con cash o comunque con qualcosa di poco correlato..

:)

Sono d'accordo, grazie del paper

Si hai ragione 2007-2009 tra più grandi guai della storia dei mercati. Buttarsi però su un altro strumento finanziario (tlt o simili) nella speranza di non subire grossi DD non mi pare corretto, perché di "speranza" si tratta. Se veramente sono convinto che il bond X mi funzionerà da assicurazione contro i crolli me lo tengo fisso in portafoglio come fosse una Put che non ha scadenza. Tra l'altro passando da uno strumento all'altro aumento il numero delle operazioni. Il controllo della size sarebbe l'ideale ma ha il medesimo difetto se devi gestire la size quando sei già a mercato. Spiegatemi dove sbaglio? ...sono un trader della domenica :)

Sono d'accordissimo!


Problemi e\o vincoli

  • Io non devo overfittare

  • [*]Io non devo aumentare le operazioni

  • [*]Io non devo lasciare ai miei competitors (il Mathematics in questo caso..che ho deciso di battere per fine 2014) troppo vantaggi

Io non devo aumentare in nessun modo i costi (semmai devo tentare di diminuirli).

Do una frullatina ai papers che ho allegato e decido, inizialmente, di soddisfare Verde.

Via i DD brutti (tutti i DD non possedendo la palla di cristallo non posso). Tutto è rimasto immutato, inserisco un algo di controllo piuttosto banale (ma molto robusto)

Nb:Performance lorda, è importante.

(............)
 

Allegati

  • B.jpg
    B.jpg
    69,4 KB · Visite: 40
Sig Ernesto ha scritto:
Problemi e\o vincoli: Io non devo overfittare, Io non devo aumentare le operazioni, Io non devo lasciare ai miei competitors (il Mathematics in questo caso..che ho deciso di battere per fine 2014) troppo vantaggi, Io non devo aumentare in nessun modo i costi (semmai devo tentare di diminuirli).

Do una frullatina ai papers che ho allegato e decido, inizialmente, di soddisfare Verde. Via i DD brutti (tutti i DD non possedendo la palla di cristallo non posso). Tutto è rimasto immutato, inserisco un algo di controllo piuttosto banale (ma molto robusto).

In attesa che il buon Ernesto ci sveli l'algo banale ma molto robusto che ha utilizzato nell'ultimo BT, provo a buttare giù qualche proposta alternativa rispettando i vincoli che ha elencato..

Intanto la mia idea iniziale di spalmare l'eposizione Long in condizione di high risk su azionario, obbligazioni e cash non è attuabile perché andrebbe ad aumentare sensibilmente il numero già alto di operazioni apertr dalla strategia (allo stato attuale pari a 378), che invece vogliamo mantenere inalterato per non far lievitare il peso delle commissioni.

Ma possiamo sempre operare con la QuantVixx su tre sottostanti, rispettivamente azionario, obbligazionario lungo termine e liquidità (obbligazioni sovrane con duration 1-3Y), ed a seconda del livello di rischio misurato al momento in cui la strategia genera un nuovo segnale andiamo a ribilanciare come segue:

1) LongSignal _LowRisk = 100% Azioni
2) LongSignal_MediumRisk = 50% Azioni
3) LongSignal_HighRisk = 100% Obbligazioni 1-3Y
4) ShortSignal = 100% Obbligazioni 10-20Y

Anche in questo caso il numero di operazioni totali aperte dalla Quant_Vix potrebbe subire alterazioni, poiché in caso di permanenza del segnale Long con variazione del livello di rischio, con la riduzione dell'esposizione azionaria prima e lo switch sul cash poi, si aggiungono altre operazioni.

A questo punto non resta che decidere come 'quantificare' il rischio e qui possiamo seguire due strade:

A. Utilizzare la lettura dei valori del ^VIX con ad esempio i seguenti range: 0<x<20 Low Risk, 20<x<30 Medium Risk e x>30 High Risk;

B. Applicare uno dei tre metodi spiegati nel paper sul money management postato da Ernesto che utilizza rispettivamente il ValueAtRisk, il ConditionalValueAtRisk ed il ConditionalDrawdwonAtRisk, calcolati sulla serie dei rendimenti dell'indice azionario in uso, dopodiché assegnare i primi tre segnali visti sopra in base al livello di rischio atteso calcolato dal metodo scelto;

Pro e contro:
La soluzione 'A' è sicuramente molto semplice da implementare anche per il trader novizio, ma allo stesso tempo poco 'scientifica' perché soggetta ad una sorta di ex post bias nella definizione dei livelli di rischio (mio parere..), mentre la soluzione 'B' è invece scientificamente ineccepibile ma anche decisamente più complicata nei calcoli e quindi non facilmente replicabile da tutti..

Anche se credo che gli algoritmi utilizzati dal fondo Diaman Mathematics siano decisamente molto più complessi dell'ipotesi 'B'..

Cosa ne pensate?

:mmmm:
 
Ultima modifica:
In attesa che il buon Ernesto ci sveli l'algo banale ma molto robusto che ha utilizzato nell'ultimo BT, provo a buttare giù qualche proposta alternativa rispettando i vincoli che ha elencato..

Intanto la mia idea iniziale di spalmare l'eposizione Long in condizione di high risk su azionario, obbligazioni e cash non è attuabile perché andrebbe ad aumentare sensibilmente il numero già alto di operazioni apertr dalla strategia (allo stato attuale pari a 378), che invece vogliamo mantenere inalterato per non far lievitare il peso delle commissioni.

Ma possiamo sempre operare con la QuantVixx su tre sottostanti, rispettivamente azionario, obbligazionario lungo termine e liquidità (obbligazioni sovrane con duration 1-3Y), ed a seconda del livello di rischio misurato al momento in cui la strategia genera un nuovo segnale andiamo a ribilanciare come segue:

1) LongSignal _LowRisk = 100% Azioni
2) LongSignal_MediumRisk = 50% Azioni
3) LongSignal_HighRisk = 100% Obbligazioni 1-3Y
4) ShortSignal = 100% Obbligazioni 10-20Y

Anche in questo caso il numero di operazioni totali aperte dalla Quant_Vix potrebbe subire alterazioni, poiché in caso di permanenza del segnale Long con variazione del livello di rischio, con la riduzione dell'esposizione azionaria prima e lo switch sul cash poi, si aggiungono altre operazioni.

A questo punto non resta che decidere come 'quantificare' il rischio e qui possiamo seguire due strade:

A. Utilizzare la lettura dei valori del ^VIX con ad esempio i seguenti range: 0<x<20 Low Risk, 20<x<30 Medium Risk e x>30 High Risk;

B. Applicare uno dei tre metodi spiegati nel paper sul money management postato da Ernesto che utilizza rispettivamente il ValueAtRisk, il ConditionalValueAtRisk ed il ConditionalDrawdwonAtRisk, calcolati sulla serie dei rendimenti dell'indice azionario in uso, dopodiché assegnare i primi tre segnali visti sopra in base al livello di rischio atteso calcolato dal metodo scelto;

Pro e contro:
La soluzione 'A' è sicuramente molto semplice da implementare anche per il trader novizio, ma allo stesso tempo poco 'scientifica' perché soggetta ad una sorta di ex post bias nella definizione dei livelli di rischio (mio parere..), mentre la soluzione 'B' è invece scientificamente ineccepibile ma anche decisamente più complicata nei calcoli e quindi non facilmente replicabile da tutti..

Anche se credo che gli algoritmi utilizzati dal fondo Diaman Mathematics siano decisamente molto più complessi dell'ipotesi 'B'..

Cosa ne pensate?

:mmmm:


E speriamo che li semplifichino amico mio..perchè quello che aveva in mente questa giovane e promettente(spero) firm italiana dubito sia quello che vediamo.

In effetti servirebbe qui l'Ing.Bernardi ma dubito che dopo le severe recensioni espresse dalla sezione sul Diaman Ratio abbia ancora voglia di partecipare (fa male a mio avviso..io sono cafone ma perchè sono ignorante..di animo sono buono. Gli altri sono buoni e meno cafoni di me perchè meno ignoranti. Insomma, un insieme variegato ma bene o male si va avanti da anni..).

Se lo comparo con lo stesso bench che ho utilizzato prima, tenendo conto che l'europa ha viaggiato con velocità maggiore e tenendoo conto delle sofisticazioni (multitimeframe, leva anche negativa sulla'azonario, esposizione sul vix etc..etc.etc..) i risultati a me personalmente non fanno impazzire.

Il problema è uno e sempre uno solo: se hai una ricetta per fare una torta e manca la vaniglia, puoi mischiare e ottimizzare gli ingredienti come vuoi..ma non saprà mai di vaniglia.

Tradotto: o rischi e cammini (vaniglia) o rischi meno e cammini o meno o per nulla (no vaniglia)
 

Allegati

  • Graph3.png
    Graph3.png
    71,8 KB · Visite: 32
Allora, con l'aiuto di Risiko e di Frank(inconsapevole) forse mi è venuta un'idea interessante.

Domani si prosegue.

 
Sig Ernesto ha scritto:
Allora, con l'aiuto di Risiko e di Frank(inconsapevole) forse mi è venuta un'idea interessante.

Salve a tutti,
mentre Ernesto pensa a come migliorare le performance della QuantVix inserendo un ETN in leva un minimo liquido che permetta di mettere un pizzico di pepe ai rendimenti e di compensare eventuali minus riportate con le plusvalenze riportate dagli altri ETF su cui la strategia opera, io posto qualche esperimento fatto con 'R'..

Premesso che ho lavorato sul codice postato a suo tempo da Cren su cui sto facendo esperimenti per fare un po di pratica con il linguaggio..

La strategia di base è sempre la stessa: si entra in posizione Long sull'indice SP500 (MDY) se l'asimmetria rolling a 20 periodi tra i prezzi Open(t)/Close(t-1) del Vix è positiva, viceversa ( se diventa negativa) si entra Long sui treasuries bonds a lunga scadenza (TLT).

Ho semplicemente aggiunto un controllo del rischio corrente misurato sulla media delle ultime 20 chiusure del VIX e se questo supera un valore pari a 40 ( vedi tabella qui), in caso di asimmetria positiva, allora sia in caso di un cambio di segnale che di conferma del segnale precedente si investe tutto il capitale sul cash (SHY - IShares Treasury Bonds 1-3Y).

Invece in caso di asimmetria negativa la strategia continua ad investire sempre sui bonds a lunga scadenza a prescindere dal livello di rischio corrente.

Questi i rendimenti (lordi e aritmetici) ottenuti:


4xc2.png



Codice:
> table.AnnualizedReturns(R, scale = 252)
                          Position
Annualized Return           0.1762
Annualized Std Dev          0.1624
Annualized Sharpe (Rf=0%)   1.0853
> table.Drawdowns(R)
        From     Trough         To   Depth Length To Trough Recovery
1 2008-06-06 2009-02-04 2009-08-03 -0.1903    292       168      124
2 2012-12-21 2013-06-24 2014-01-17 -0.1661    270       126      144
3 2011-09-01 2011-10-03 2011-11-01 -0.1487     43        22       21
4 2010-09-29 2011-03-16 2011-08-09 -0.1328    218       117      101
5 2007-06-05 2007-08-16 2007-11-26 -0.1167    122        52       70
> table.CalendarReturns(R)
      gen  feb  mar  apr  mag  giu  lug  ago  set  ott  nov  dic Position
2004   NA  0.5  0.5  0.4  1.1  0.7 -0.1  0.6  0.5  0.3 -0.4 -0.1      4.0
2005  1.1 -0.2  0.2 -0.2  1.2 -0.2 -0.2  0.8  0.7  0.2 -0.1 -0.2      3.2
2006  0.1  0.5  0.0  0.7  1.9  1.0  0.1  0.0 -0.7 -0.4  0.1 -0.7      2.5
2007  0.5  0.7 -0.2  1.0  0.7  1.0 -1.1  0.1 -0.1 -0.9 -0.5  0.6      1.8
2008  2.5 -2.3  0.3 -0.2  1.0 -0.2 -1.5 -1.0 -2.2 -1.3  0.1 -2.1     -6.9
2009 -0.3  0.1  0.1 -0.2  1.6 -0.4  0.0 -1.4 -0.6  1.5  0.3 -1.3     -0.6
2010  0.9 -0.1 -0.7  1.2  0.5 -0.8  0.2 -0.1 -0.1  0.9  0.5 -0.6      1.7
2011 -0.8  0.1  0.6  0.3  1.5  0.5 -0.2  0.3 -2.7  4.0  5.0 -0.6      8.1
2012 -0.2 -0.8 -0.1 -0.9 -0.3  2.7 -0.6  0.0 -0.4  0.4  0.0  1.6      1.5
2013  0.0  0.2  0.6  0.1 -1.0 -0.6  0.4 -1.6  0.1 -0.1  0.1 -0.6     -2.5
2014 -0.4  0.1  0.3  0.7 -1.1   NA   NA   NA   NA   NA   NA   NA     -0.4
>

Purtroppo non sono riuscito a computare il mumero di operazioni della strategia, perché nonostante abbia creato un vettore delle posizioni aperte ( 1 Stocks; 0 Cash; -1 Bonds) se lo inserisco nel grafico dei rendimenti il programma mi somma i valori e non li riporta nel modo corretto..

:(

In proposito accetto suggerimenti e consigli..

;)

A questo punto il passo successivo sarà quello di imporre il passaggio al cash anche in caso di posizione Short (asimmetria negativa), ovvero quando la strategia investe su TLT.

In questo caso però ho preso in considerazione la correlazione 'rolling' tra MDY/TLT misurata sempre a 20 periodi, imponendo l'investimento in cash quando questa assume valori positivi.


nxfr.png



La ragione è ovvia, difatti se azionario e bond si correlano troppo, stante la correlazione inversa tra Vix ed SP500, allora investendo sul cash invece che sui bonds evitiamo possibili operazione in loss.

Work in progress..

:bye:
 
Salve a tutti,
mentre Ernesto pensa a come migliorare le performance della QuantVix inserendo un ETN in leva un minimo liquido che permetta di mettere un pizzico di pepe ai rendimenti e di compensare eventuali minus riportate con le plusvalenze riportate dagli altri ETF su cui la strategia opera, io posto qualche esperimento fatto con 'R'..

Premesso che ho lavorato sul codice postato a suo tempo da Cren su cui sto facendo esperimenti per fare un po di pratica con il linguaggio..

La strategia di base è sempre la stessa: si entra in posizione Long sull'indice SP500 (MDY) se l'asimmetria rolling a 20 periodi tra i prezzi Open(t)/Close(t-1) del Vix è positiva, viceversa ( se diventa negativa) si entra Long sui treasuries bonds a lunga scadenza (TLT).

Ho semplicemente aggiunto un controllo del rischio corrente misurato sulla media delle ultime 20 chiusure del VIX e se questo supera un valore pari a 40 ( vedi tabella qui), in caso di asimmetria positiva, allora sia in caso di un cambio di segnale che di conferma del segnale precedente si investe tutto il capitale sul cash (SHY - IShares Treasury Bonds 1-3Y).

Invece in caso di asimmetria negativa la strategia continua ad investire sempre sui bonds a lunga scadenza a prescindere dal livello di rischio corrente.

Questi i rendimenti (lordi e aritmetici) ottenuti:


4xc2.png



Codice:
> table.AnnualizedReturns(R, scale = 252)
                          Position
Annualized Return           0.1762
Annualized Std Dev          0.1624
Annualized Sharpe (Rf=0%)   1.0853
> table.Drawdowns(R)
        From     Trough         To   Depth Length To Trough Recovery
1 2008-06-06 2009-02-04 2009-08-03 -0.1903    292       168      124
2 2012-12-21 2013-06-24 2014-01-17 -0.1661    270       126      144
3 2011-09-01 2011-10-03 2011-11-01 -0.1487     43        22       21
4 2010-09-29 2011-03-16 2011-08-09 -0.1328    218       117      101
5 2007-06-05 2007-08-16 2007-11-26 -0.1167    122        52       70
> table.CalendarReturns(R)
      gen  feb  mar  apr  mag  giu  lug  ago  set  ott  nov  dic Position
2004   NA  0.5  0.5  0.4  1.1  0.7 -0.1  0.6  0.5  0.3 -0.4 -0.1      4.0
2005  1.1 -0.2  0.2 -0.2  1.2 -0.2 -0.2  0.8  0.7  0.2 -0.1 -0.2      3.2
2006  0.1  0.5  0.0  0.7  1.9  1.0  0.1  0.0 -0.7 -0.4  0.1 -0.7      2.5
2007  0.5  0.7 -0.2  1.0  0.7  1.0 -1.1  0.1 -0.1 -0.9 -0.5  0.6      1.8
2008  2.5 -2.3  0.3 -0.2  1.0 -0.2 -1.5 -1.0 -2.2 -1.3  0.1 -2.1     -6.9
2009 -0.3  0.1  0.1 -0.2  1.6 -0.4  0.0 -1.4 -0.6  1.5  0.3 -1.3     -0.6
2010  0.9 -0.1 -0.7  1.2  0.5 -0.8  0.2 -0.1 -0.1  0.9  0.5 -0.6      1.7
2011 -0.8  0.1  0.6  0.3  1.5  0.5 -0.2  0.3 -2.7  4.0  5.0 -0.6      8.1
2012 -0.2 -0.8 -0.1 -0.9 -0.3  2.7 -0.6  0.0 -0.4  0.4  0.0  1.6      1.5
2013  0.0  0.2  0.6  0.1 -1.0 -0.6  0.4 -1.6  0.1 -0.1  0.1 -0.6     -2.5
2014 -0.4  0.1  0.3  0.7 -1.1   NA   NA   NA   NA   NA   NA   NA     -0.4
>

Purtroppo non sono riuscito a computare il mumero di operazioni della strategia, perché nonostante abbia creato un vettore delle posizioni aperte ( 1 Stocks; 0 Cash; -1 Bonds) se lo inserisco nel grafico dei rendimenti il programma mi somma i valori e non li riporta nel modo corretto..

:(

In proposito accetto suggerimenti e consigli..

;)

A questo punto il passo successivo sarà quello di imporre il passaggio al cash anche in caso di posizione Short (asimmetria negativa), ovvero quando la strategia investe su TLT.

In questo caso però ho preso in considerazione la correlazione 'rolling' tra MDY/TLT misurata sempre a 20 periodi, imponendo l'investimento in cash quando questa assume valori positivi.


nxfr.png



La ragione è ovvia, difatti se azionario e bond si correlano troppo, stante la correlazione inversa tra Vix ed SP500, allora investendo sul cash invece che sui bonds evitiamo possibili operazione in loss.

Work in progress..

:bye:

Buon lavoro graper, ma credo che le operazioni aumentino in maniera esponenziale ed alla fine, si faccian più danni che altro.

Ma bravo cmq.:)
 
Le ultime aperture segnalano Risk off.
 
Non scordiamoci la terza gamba (!) della ns. strategia. Puntiamo ad un apprezzamento del dollaro.



z
 
Sig Ernesto ha scritto:
Buon lavoro graper, ma credo che le operazioni aumentino in maniera esponenziale ed alla fine, si faccian più danni che altro. Ma bravo cmq.

Esatto,
in effetti anche io mi aspettavo che le operazioni sarebbero aumentate in maniera insostenibile, invece mi sono dovuto ricredere..

Risolti alcuni miei limiti di apprendimento dell'ambiente 'R' (ma non tutti..), sono riuscito ad estrarre dal vettore dei cambi di posizione della 'QuantVix + RiskControl' (esportandolo su un file di testo e 'rimaneggiandolo' con Excel..) il loro numero, che risulta essere pari a 190 nel periodo che va dal 02/02/2004 al 22/05/2014 (vs 186 dell'originale).

Pertanto ho pensato di proseguire nelle mie sperimentazioni..

:)

Ricordo che la modifica prevede che in caso di posizione long, se il valore medio delle ultime 20 chiusure del Vix supera '40', sia in caso di conferma del segnale precedente che in caso di cambio di segnale, la posizione Long viene aperta sul cash (SHY). Viceversa in posizione Short si investe sempre sui bonds (TLT) a prescindere dal livello di rischio.

Intanto riallego le performance ottenute da questa modifica aggiornate alla luce di alcune correzioni apportate al codice, i risultati non cambiano di molto:


ebe6.png


0qa9.png



Codice:
> table.AnnualizedReturns(R, scale = 252)
                          Position
Annualized Return           0.1696
Annualized Std Dev          0.1664
Annualized Sharpe (Rf=0%)   1.0191
> table.Drawdowns(R)
        From     Trough         To   Depth Length To Trough Recovery
1 2008-06-06 2009-02-06 2009-09-09 -0.2116    318       170      148
2 2011-09-01 2011-10-03 2011-11-01 -0.1487     43        22       21
3 2012-12-21 2013-06-24 2013-10-18 -0.1415    208       126       82
4 2010-09-29 2011-03-16 2011-08-11 -0.1385    220       117      103
5 2007-06-05 2007-08-16 2008-01-22 -0.1205    160        52      108
>

A questo come spiegato nel post precedente volevo aggiungere la modalità risk-off anche per le operazioni Short, utilizzando come filtro la lettura della correlazione rolling tra i due assets MDY-TLT misurata sempre a 20 periodi e quindi investire tutto in cash quando questa diviene positiva.

Purtroppo però il comando della libreria quantmod rollapply(Corr.data, width,cor, method = "pearson", by.column = FALSE), non funziona e il vettore dei livelli di correlazione misurato sul ROC (Return of Change) dei due assets (MDY-TLT) mi ritorna il valore '1' su tutte le rilevazioni, peraltro senza dare alcun warning di compilazione..

:angry:

In pratica stante questo bug, la strategia leggendo sempre massima correlazione positiva tra stocks e bonds, sui segnali Short investe sempre sul cash. Ebbene a conferma della validità del motore della QuantVix, la strategia rende bene anche in questa modalità, tra l'altro con un numero di cambi di posizione quasi invariato (183)..

:yes:

Queste sono le performance ottenute:


twif.png


5ujf.png


Codice:
> table.AnnualizedReturns(R, scale = 252)
                          Position
Annualized Return           0.1399
Annualized Std Dev          0.1451
Annualized Sharpe (Rf=0%)   0.9637
> table.Drawdowns(R)
        From     Trough         To   Depth Length To Trough Recovery
1 2008-06-06 2008-10-01 2009-08-03 -0.1605    292        82      210
2 2011-09-01 2011-10-03 2011-11-28 -0.1487     61        22       39
3 2007-06-05 2007-09-04 2008-01-31 -0.1302    167        64      103
4 2010-04-15 2010-07-06 2010-09-13 -0.1292    105        57       48
5 2011-07-08 2011-08-08 2011-08-15 -0.1105     27        22        5
>


A questo punto mi rimetto al tuo parere se continuare in questa direzione o meno..

Io da semplice praticante sono del parere che se le modifiche non faranno salire troppo il numero di operazioni e migliorano il rapporto risk/reward della Quant_Vix senza aggiungere overfitting, allora in caso di un utilizzo a mercato con ETN/ETF in leva ci potrebbero tornare utili..


Nel frattempo allego il codice completo della strategia da me modificata, così magari se qualche utente riesce a risolvere il problema del calcolo della correlazione rolling e perché no anche a trovare un metodo meno ortodosso di quello usato dal sottoscritto per computare i cambi di segnale, servirà a tutti per imparare qualcosa in più..

Codice:
# **********************************************
#  QUANT_VIX  Risk & Correlation Filtered    
# **********************************************

# Modello: Calcolo l'asimmetria rolling a 20gg 
# (un mese di borsa) circa del logrendimento 
# openvix su lagged closevix. 

rm(list=ls())
setInternet2(TRUE) 


# Carico le librerie

require(compiler)
require(PerformanceAnalytics)
require(quantmod)


# Scarico e allineo i dati

Symbols = c("^VIX", "MDY", "TLT", "SHY")
env = new.env()
getSymbols(Symbols,env,from = "2004-01-01")
args = eapply(env, function(x){OHLC(x)})
my_data = do.call(cbind,args,envir = env)


# Calcolo il rendimento logaritmico
# del VIX chiusura (t - 1) vs.
# apertura (t) e il valore 
# dell'ultima chiusura del VIX 

Vix.skew = log(my_data[,"VIX.Open"] / lag(my_data[,"VIX.Close"]))

# Estraggo il prezzo di chiusura del Vix (t-1)

Vix.value = lag(my_data[,"VIX.Close"])

# Estraggo i dati per il calcolo della correlazione

Corr.data =merge.xts(ROC(my_data[,"MDY.Close"]),
                     ROC(my_data[,"TLT.Close"]))

# Imposto l'ampiezza in giorni della finestra mobile

slow_window_width = 20

# Imposto dei livelli di rischio
# calcolati sulla media rolling
# 20 periodi sul Close del Vix

Risk_level = 40

# Imposto un livello massimo di correlazione
Corr_level = 0


# Aggiungo il vettore dei segnali al mio data set
my_data$Slow_Skewness = rollapplyr(Vix.skew,
                                   slow_window_width,
                                   skewness,
                                   na.rm = TRUE,
                                   method = "sample",
                                   by.column = FALSE)

# Aggiungo il vettore del rischio al mio data set
my_data$Vix_Mean = rollapplyr(Vix.value,
                              slow_window_width,
                              mean,
                              na.rm = TRUE,
                              method = "sample",
                              by.column = TRUE)


# Aggiungo il vettore di correlazione rolling al mio data set

my_data$Corr = rollapply(Corr.data, 
                         slow_window_width, 
                         function(x) cor(x[,1], x[,2]), 
                         by.column = FALSE)


# Genero i vettori di posizione, di rischio e di correlazione.

my_data$Position = ifelse(my_data$Slow_Skewness > 0, 1, -1)

my_data$Risk_Off = ifelse(my_data$Vix_Mean < Risk_level, 0, 1)

my_data$Corr_Off = ifelse(my_data$Corr < Corr_level, 0, 1)


# Computo i rendimenti aritmetici
# sullo stock index, sui bond e sul cash.
# I due comandi seguenti mi consentono di estrarre al volo
# dal mio data set tutte le colonne che contengono le parole
# del ticker nel loro nome, quindi mi evito di
# specificare aperture, massimi, minimi etc. 

my_MDY = my_data[,substr(colnames(my_data), 1, 3) == Symbols[2]]
my_TLT = my_data[,substr(colnames(my_data), 1, 3) == Symbols[3]]
my_SHY = my_data[,substr(colnames(my_data), 1, 3) == Symbols[4]]

# Calcolo rendimenti aritmetici
MDY_OC_ret = OpCl(my_MDY)
MDY_CC_ret = ClCl(my_MDY)
TLT_OC_ret = OpCl(my_TLT)
TLT_CC_ret = ClCl(my_TLT)
SHY_OC_ret = OpCl(my_SHY)
SHY_CC_ret = ClCl(my_SHY)


# Calcolo il rendimento della mia
# posizione. Anche qui l'ifelse()
# vettorizzato è la soluzione più
# comoda

# Facciamo switch tra rendimenti 
# Open-to-Close e Close-to-Close
# se c'è stato un cambio segnale,
# e in base al livello di rischio
# misurato entriamo Long con 100%
# stocks o 100% cash, in caso di
# segnale Short invece entramo con
# 100% bond se la correlazione è 
# sotto il limite diversamente 
# 100% Cash.

R = ifelse(my_data$Position == 1, 
           ifelse(my_data$Position == lag(my_data$Position),           
                  ifelse(my_data$Risk_Off == 0, MDY_CC_ret,SHY_CC_ret),           
                  ifelse(my_data$Risk_Off == 0, MDY_OC_ret,SHY_OC_ret)),                             
           ifelse(my_data$Position == lag(my_data$Position),
                  ifelse(my_data$Corr_Off == 0, TLT_CC_ret,SHY_CC_ret),
                  ifelse(my_data$Corr_Off == 0, TLT_OC_ret,SHY_OC_ret)))

Signals = ifelse(my_data$Position == 1, 
                ifelse(my_data$Position == lag(my_data$Position),           
                       ifelse(my_data$Risk_Off == 0, 1,0),           
                       ifelse(my_data$Risk_Off == 0, 1,0)),                             
                ifelse(my_data$Position == lag(my_data$Position),
                ifelse(my_data$Corr_Off == 0, -1,0),
                ifelse(my_data$Corr_Off == 0,-1,0)))


# Analisi delle performance strategia
charts.PerformanceSummary(R, geometric=FALSE, ylog = FALSE, lwd = 1, main = "QuantVix + Risk Control")
table.AnnualizedReturns(R, scale = 252)
table.Drawdowns(R)

# Analisi delle performance comparativa B&H
rtn.obj = merge(R,MDY_CC_ret,TLT_CC_ret,SHY_CC_ret)
colnames(rtn.obj) = c("QuantVix_RCC","MDY_B&H","TLT_B&H","SHY_B&H")
charts.PerformanceSummary(rtn.obj, geometric=FALSE, ylog=FALSE, 
              lwd = 1, main = "QuantVix + Risk & Corr. Control")

# Salva i segnali su un file .txt
write.zoo(Signals, file="C:/Signals.txt", sep=",")

:bye:
 
Ultima modifica:
E io non posso che farti i miei più sinceri, ammirati, affettuosi complimenti.

Mi fido del tuo codice senza controllarlo; questo è quello che io chiamo: "sporcarsi le mani".

Ora, resetta tutto quello che hai fatto, che hai ipotizzato e che hai, con buona volontà e pazienza (uguali a: esperienza acquisita).

Io ti chiedo:

"oppure?"

e ti rimando alla affermazione:

"You Can't Get What You Want (Till You Know What You Want) "



(sia chiaro...bravo..c'è passione..c'è volontà, c'è caparbietà..bravissimo)
 
Indietro