Programmazione Excel analisi di un TS (1 Viewer)

Skarso

Forumer attivo
dato che sei gentilissimo, chiedo la domanda principe:
su quale range calcoli avgc ?
x la valutazione finale su tutto il periodo
poi volendo se "ris" è l' array dei risultati del sistema
avgc =MEDIA(INDICE(ris;first+3):INDICE(ris;last+3))
dove first e last sono variabili determinati da 2 controlli

ot
sto cercando di far partire un TS demo su TraderXL ...

lascia perdere, quello serve solo x gli "indicatori" . . . :eek:
 

f4f

翠鸟科
x la valutazione finale su tutto il periodo
poi volendo se "ris" è l' array dei risultati del sistema
avgc =MEDIA(INDICE(ris;first+3):INDICE(ris;last+3))
dove first e last sono variabili determinati da 2 controlli



lascia perdere, quello serve solo x gli "indicatori" . . . :eek:


credevo facessi avgc su un anno rolling ( gli ultimi 252 giorni)



lascia perdere, quello serve solo x gli "indicatori" . . .

ot ,
temo tu abbia ragione
cmq, faccio il TS 65sma3cc e vedo come va la valutazione
 
Complimenti per come è stato costruito il foglio e per l’uso delle label che d’ora in avanti diventeranno un must anche per me.
Il meccanismo principale del trading system è chiaro, lo condivido e condivido ampiamente il pensiero di Skarso riguardo gli indicatori tecnici di cui troppo spesso si abusa.
Sto cercando di seguire il suo ragionamento, istruzione per istruzione, e procedo lentamente a causa delle mie limitate conoscenze di Vba. Qualche difficoltà l’ho avuta nella comprensione della routine che effettua la scelta di Kappa1 e Kappa2. Skarso, sei decisamente un passo avanti :)
Però avevo notato l’”erore” e avevo già corretto con un =5 in testa alla colonna in modo tale che i trascinamenti non creino problemi.
Ho avuto l’ardire di sostituire i valori inseriti nella colonna 1630 con valori differenti. Una evoluzione del ts potrebbe riguardare la possibilità di effettuare una scelta attraverso i consueti comandi.
Chiedo scusa e torno a studiare, che è meglio.
 

Skarso

Forumer attivo
Qualche difficoltà l’ho avuta nella comprensione della routine che effettua la scelta di Kappa1 e Kappa2. .

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
 

f4f

翠鸟科
Ho una certa antipatia per le nuove versioni di Office e non vorrei pagare uno strumento che ritengo che non mi serva, per cui mi sono permesso di convertire l'ottimo codice di Skarso in Excel 2003 :)

Praticamente ho caricato il foglio in Excel 2010 (come da indicazioni) e ho fatto un salva con nome in formato Excel 2003. La cosa curiosa è che nel salvare dichiara che ci sono caratteristiche incompatibili ma io non ne ho trovate. L'unica cosa antipatica è che fa sparire dei nomi di array in modo totalmente ingiustificato. Basta ricrearli in Excel 2003 e tutto si sistema.

Ovviamente la cosa più interessante non è la versione di Excel, ma gli algoritmi. Ci sono delle questioni interessanti che approfondirò con calma e sulle quali sarei interessato ad approfondire con voi. :)


pigrizia mi spinge a chiederti se, per piacere e con il consenso di Skarso, potrei avere la versione in excel2003 ...
grazie :)

ot
sono andato assai avanti ad analizzare TraderXL, ho realizzato un TS demo
non sono affatto convinto di seguire questa strada
ad adesso, penso ad una mia struttura standard
more to come ...
 

f4f

翠鸟科
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

davvero ottimo...
ora non ho tempo di capire bene, ma colgo l'idea ( credo) : un sistema auto-adattivo , che si ritaglia il campo di analisi
cmq su excel sei più avanti ... io non ricordo la gestione delle subroutine
( ma basta leggere e imparare... :wall::wall: )

complimenti :up::up:
 

f4f

翠鸟科
Se Skarso è d'accordo te lo passo, ovviamente scaricando lui della responsabilità per eventuali malfunzionamenti :)
...che invece a me interessano per debugging


Come nota a latere continuo a pensare che Excel non potrà mai essere veloce come Amibroker. Il foglio di Skarso lavora su 2000 dati, io ho analizzato 120000 dati (su tre fogli per superate capacità delle vecchie versioni Excel). Ovviamente sono sempre disponibile a cambiare idea :)


non vorri disperdere il thread .. magari poi tagliaincolliamo

in generale, ogno scelta non è ad un 'meglio' teorico, ma ad un 'più adatto':
e diversi utenti potrebbero avere necessità diverse
io ad esempio dò premio alla portabilità e, lavorando EOD, non ho grosse masse di dati (2000 righe EOD sono 10 anni circa) - la velocità non è a premio per me
invece, usare matrici e sistemi adattivi è la mia area di interesse
usare criteri diversi di open/close per long/short ecc ecc -- tutta roba relativamente facile con VB

capisco perfettamente che ci siano esigenze diverse , ad esempio nell'intraday :)
 

Skarso

Forumer attivo
pigrizia mi spinge a chiederti se, per piacere e con il consenso di Skarso, potrei avere la versione in excel2003 ...
grazie :)

...

nessun problema, siete liberissimi di scambiarvi privatamente tutti i files che volete . . . ;)
io non divulgherò una versione 2003, ritengo che il 2010 sia largamente superiore e valga ampiamente i 100 euro necessari x l' acquisto dopo i 2 mesi di prova . . . :eek:
quanto alla velocità di Excel mi pare di aver già detto che occorra impostare il calcolo su "manuale" e bloccare il refresh dello schermo
nulla impedisce poi ai + esperti di compilare delle DLL . . .
ma riporterei la discussione sugli algoritmi ed il loro possibile eventuale miglioramento . . .
 

Users who are viewing this thread

Alto