 |
|
16-11-2011, 11:51
|
#1 (permalink)
|
|
Utente Senior
Data registrazione: Jun 2009
Località: Neanderthal
Messaggi: 398
|
TS costruiti con metodi non convenzionali
apro un nuovo thread in quanto quello su FI è stato scorrettamente inquinato con grafici voodoo ed argomenti OT da un personaggio molto invasivo . . .
che “minkia cccentrrano” i grafici voodoo con la logica fuzzy ? nulla proprio nulla . . .
inoltre personalmente non capisco e quindi detesto questi grafici ed i programmi “pacco” che li generano perché – imo - se talvolta spiegano il passato cioè quello che è successo prima, quasi sempre toppano quando si vuole prevedere il futuro . . .
il problema – imo – è che i grafici vanno bene x dati ed eventi deterministici mentre i dati di borsa sono a volte caotici, quasi sempre pieni di noise, direi “casinisti” . . .
x rispondere alla domanda di reef
“al verificarsi delle condizioni, si prendono le uscite yield2 (16.00-Close, ma perchè queste non sono normalizzate?) in corrispondenza delle colonne R-V, cercando il rapporto causa-effetto nei numeri.”
dirò che occorre dare dei valori alle 5 regole corrispondenti alle 5 suddivisioni del rendimento del titolo e ciò viene fatto con una media esponenziale attribuendo a ciascuna regola ogni volta la porzione di risultato ( yield2 ) di sua spettanza
passiamo ora ad esaminare un altro metodo “non convenzionale” di costruire TS, secondo il principio dei Nearest Neighbour ( vicini + vicini ) utilizzato nel file PROVA-FI-NN disponibile come al solito su Dropbox ( x molti ma non x tutti . . . )
il metodo è abbastanza intuitivo: l’ idea di base è che stati simili nel breve periodo avranno successori ( cioè esiti ) simili
poiché i valori dei successori di stati simili sono noti , questi possono essere utilizzati per predire il valore futuro di stati correnti simili
un esempio in linguaggio Basic, che è simile all’ inglese parlato, chiarirà forse meglio ( o peggio ? . . . )
For k = 1 to Last
FindNN Input1(), k
R_pevis( 3 + k ) = bestx
Next k
‘
Sub FindNN(fx() As Double, k As Integer)
Dim i As Integer
Dim j As Integer
Dim m As Integer
Dim dist As Double
Dim cumx As Double
'
Ultimo = k: Primo = 1
'
BW = 0
For m = 1 To 10
BW = BW + 0.05
j = 0
For i = Primo To Ultimo - 1
If Abs(Input1(k) - Input1(i)) < BW Then
j = j + 1
dist = (1 - Abs(Input1(k) - Input1(i)) / BW)
If j = 1 Then
cumx = dist * Input2(i)
Else
cumx = (1 - Beta * dist) * cumx + Beta * dist * Input2(i)
End If
End If
Next i
If j >= Nvic Then Exit For
Next m
Bestx = cumx
Best0 = j
'
End Sub
|
|
|
| Avviso pubblicitario - i seguenti Banner Pubblicitari permettono al sito di offrirvi il consueto, alto standard qualitativo. |
| |
|
16-11-2011, 12:09
|
#2 (permalink)
|
|
Utente Senior
Data registrazione: Jun 2009
Località: Neanderthal
Messaggi: 398
|
scusate, ho omesso di dire che la “similitudine” tra stati ( in questo caso i valori di Input1 ) si ricava tramite una misura di “distanza”
vi sono vari metodi per calcolare questa distanza, nel programma ne ho utilizzato uno molto semplice, noto come mappa triangolare o tent map la cui equazione è
dist = 1 - | x1 – x2 |/ v
essendo v l’ intervallo ammesso di variazione
è anche molto usata la funzione pseudo – normale
dist = exp( 0.5*( - (( x – media )/sigma) ^2 )
|
|
|
16-11-2011, 12:14
|
#3 (permalink)
|
|
...
Data registrazione: Jun 2003
Messaggi: 3,223
|
Citazione:
Originalmente inviato da Skarso
il metodo è abbastanza intuitivo: l’ idea di base è che stati simili nel breve periodo avranno successori ( cioè esiti ) simili
poiché i valori dei successori di stati simili sono noti , questi possono essere utilizzati per predire il valore futuro di stati correnti simili
|
Ottima partenza...
Citazione:
Originalmente inviato da Skarso
un esempio in linguaggio Basic, che è simile all’ inglese parlato, chiarirà forse meglio ( o peggio ? . . . )
|
 Magari così è più leggibile?
Codice:
For k = 1 to Last
FindNN Input1(), k
R_pevis( 3 + k ) = bestx
Next k
‘
Sub FindNN(fx() As Double, k As Integer)
Dim i As Integer
Dim j As Integer
Dim m As Integer
Dim dist As Double
Dim cumx As Double
'
Ultimo = k: Primo = 1
'
BW = 0
For m = 1 To 10
BW = BW + 0.05
j = 0
For i = Primo To Ultimo - 1
If Abs(Input1(k) - Input1(i)) < BW Then
j = j + 1
dist = (1 - Abs(Input1(k) - Input1(i)) / BW)
If j = 1 Then
cumx = dist * Input2(i)
Else
cumx = (1 - Beta * dist) * cumx + Beta * dist * Input2(i)
End If
End If
Next i
If j >= Nvic Then Exit For
Next m
Bestx = cumx
Best0 = j
'
End Sub
|
|
|
16-11-2011, 12:45
|
#4 (permalink)
|
|
翠鸟科
Data registrazione: Oct 2003
Località: taglialegna da CiubeBBa;at Tokyo as Zenigata;capt Orr;lednàcèk;Orazio;and miles to go before I sleep
Messaggi: 34,061
|
Citazione:
Originalmente inviato da Skarso
apro un nuovo thread in quanto quello su FI è stato scorrettamente inquinato con grafici voodoo ed argomenti OT da un personaggio molto invasivo . . .
che “minkia cccentrrano” i grafici voodoo con la logica fuzzy ? nulla proprio nulla . . .
inoltre personalmente non capisco e quindi detesto questi grafici ed i programmi “pacco” che li generano perché – imo - se talvolta spiegano il passato cioè quello che è successo prima, quasi sempre toppano quando si vuole prevedere il futuro . . .
il problema – imo – è che i grafici vanno bene x dati ed eventi deterministici mentre i dati di borsa sono a volte caotici, quasi sempre pieni di noise, direi “casinisti” . . .
x rispondere alla domanda di reef
“al verificarsi delle condizioni, si prendono le uscite yield2 (16.00-Close, ma perchè queste non sono normalizzate?) in corrispondenza delle colonne R-V, cercando il rapporto causa-effetto nei numeri.”
dirò che occorre dare dei valori alle 5 regole corrispondenti alle 5 suddivisioni del rendimento del titolo e ciò viene fatto con una media esponenziale attribuendo a ciascuna regola ogni volta la porzione di risultato ( yield2 ) di sua spettanza
passiamo ora ad esaminare un altro metodo “non convenzionale” di costruire TS, secondo il principio dei Nearest Neighbour ( vicini + vicini ) utilizzato nel file PROVA-FI-NN disponibile come al solito su Dropbox ( x molti ma non x tutti . . . )
il metodo è abbastanza intuitivo: l’ idea di base è che stati simili nel breve periodo avranno successori ( cioè esiti ) simili
poiché i valori dei successori di stati simili sono noti , questi possono essere utilizzati per predire il valore futuro di stati correnti simili
un esempio in linguaggio Basic, che è simile all’ inglese parlato, chiarirà forse meglio ( o peggio ? . . . )
For k = 1 to Last
FindNN Input1(), k
R_pevis( 3 + k ) = bestx
Next k
‘
Sub FindNN(fx() As Double, k As Integer)
Dim i As Integer
Dim j As Integer
Dim m As Integer
Dim dist As Double
Dim cumx As Double
'
Ultimo = k: Primo = 1
'
BW = 0
For m = 1 To 10
BW = BW + 0.05
j = 0
For i = Primo To Ultimo - 1
If Abs(Input1(k) - Input1(i)) < BW Then
j = j + 1
dist = (1 - Abs(Input1(k) - Input1(i)) / BW)
If j = 1 Then
cumx = dist * Input2(i)
Else
cumx = (1 - Beta * dist) * cumx + Beta * dist * Input2(i)
End If
End If
Next i
If j >= Nvic Then Exit For
Next m
Bestx = cumx
Best0 = j
'
End Sub
|
posso?
scusa l'ignoranza, ma ...
la variabile input2 come è definita ?
lo 0.05 nella definizione di BW da cosa deriva?
grazie 
__________________
per aspera ad astra,
ma che fatica però
|
|
|
16-11-2011, 13:04
|
#5 (permalink)
|
|
Utente Senior
Data registrazione: Jun 2009
Località: Neanderthal
Messaggi: 398
|
Citazione:
Originalmente inviato da f4f
posso?
scusa l'ignoranza, ma ...
la variabile input2 come è definita ?
lo 0.05 nella definizione di BW da cosa deriva?
grazie 
|
domande + che legittime, debbo io scusarmi x la fretta e la conseguente poca chiarezza . . .
se guardi le dichiarazioni e le assegnazioni ( Sub Inizia ) Input2 è il rendimento successivo alle 16.00 fino alla close oppure a scelta alla open successiva
sono stati stabiliti come necessari 11 ( numero dispari intorno a 10 ) vicini - se si trovano – per calcolare la previsione come media esponenziale dei rendimenti + simili passati
BW è il campo di variazione x il calcolo della distanza che aumenta progressivamente a step di 0.05% quando non ci sono sufficienti vicini cioè quando i valori di Input1 sono + lontani dalla media
si poteva ovviamente anche scegliere un valore di step + fine ( es 0.01% ) ma 0.05 mi è sembrato un buon trade-off ( compromesso ) almeno così risulta dall' esperienza . . .
|
|
|
19-11-2011, 16:19
|
#6 (permalink)
|
|
Utente Senior
Data registrazione: Jun 2009
Località: Neanderthal
Messaggi: 398
|
proviamo ora ad aggiungere un secondo predittore, il rendimento 16. 00 vs 15.30 del DJ ottenendo il file PROVA-FI-NN-2
come distanza tra 2 configurazioni ( giornate ) ”k” ed “i” scegliamo la cosiddetta “distanza euclidea”:
dist = Sqr( ( Input1( k ) – Input1( i ) )^2 + (Input2( k ) – Input2( i ) )^2 )
in pratica il Teorema di Pitagora che si studia alla scuola dell’ obbligo
se il valore dell’ intervallo di variabilità è BW per entrambe le coppie allora questo valore di distanza varierà tra un minimo = 0 ed un max = BW*Sqr( 2 )
però x i calcoli è + comodo indicare con 1 il valore della distanza minima ( punti coincidenti nel piano delle variabili Input1, Input2 ) e 0 quello distanza max ( punti posti negli estremi dell’ intervallo BW ) e di conseguenza la formula della distanza diviene:
dist = 1 - Sqr( ( Input1( k ) – Input1( i ) )^2 + (Input2( k ) – Input2( i ) )^2 )/( BW*Sqr( 2 ) )
nella subroutine FindNN che calcola la previsione, il loop for m = 1 to 20 fa sì che m e di conseguenza BW cresce quando ci sono nell’ intervallo pochi vicini il che accade generalmente quando i valori di Input1 e/o Input2 sono abbastanza alti
i risultati pur nel difficile periodo sembrano abbastanza soddisfacenti in termini di indici di performance:
trade positivi = 65% Omega = 2.243 MDD = - 4.36%
Codice:
Sub FindNN(fx() As Double, k As Integer)
Dim i As Integer
Dim j As Integer
Dim m As Integer
Dim n As Integer
Dim dist As Double
Dim cumx As Double
'
'
' Ultimo = giorno in esame x previsione
' Primo = giorno da cui iniziare
' BW = ampiezza banda di variazione ammessa x calcolo distanza
' cumx = variabile di comodo x accumulo media exp
' j = contatore vicini
' Input1(k) = rendimento del titolo nel giorno in esame
' Input2(k) = rendimento del DJIA nel giorno in esame
' Input1(i) = rendimento del titolo nel giorno i
' Input2(i) = rendimento del DJIA nel giorno i
' BW * Sqr(2) = distanza max relativ. a intervalli di ampiezza BW
' Nvic = numero di vicini desiderato
' Beta = fattore di smoothing
'
Ultimo = k: Primo = 1
BW = 0
For m = 1 To 20
BW = BW + 0.05
j = 0: cumx = 0
For i = Primo To Ultimo - 1
If Abs(Input1(k) - Input1(i)) < BW And Abs(Input2(k) - Input2(i)) < BW Then
j = j + 1
dist = 1 - Sqr((Input1(k) - Input1(i)) ^ 2 + (Input2(k) - Input2(i)) ^ 2) / (BW * Sqr(2))
If j = 1 Then
cumx = dist * Yield2(i)
Else
cumx = (1 - Beta * dist) * cumx + Beta * dist * Yield2(i)
End If
End If
Next i
If j >= Nvic Then Exit For
Next m
Bestx = cumx
Best0 = j
Best4 = BW
'
End Sub
|
|
|
19-11-2011, 19:17
|
#7 (permalink)
|
|
翠鸟科
Data registrazione: Oct 2003
Località: taglialegna da CiubeBBa;at Tokyo as Zenigata;capt Orr;lednàcèk;Orazio;and miles to go before I sleep
Messaggi: 34,061
|
__________________
per aspera ad astra,
ma che fatica però
|
|
|
21-11-2011, 10:20
|
#8 (permalink)
|
|
...
Data registrazione: Jun 2003
Messaggi: 3,223
|
Ho qualche domanda sul codice. Anzitutto sarebbe eccellente se riuscissi, in qualche modo, a dare qualche riferimento di partenza a monte del codice, tipo un articolo, qualche formula...  Francamente, dal codice non riesco a risalire banalmente a quel che ci sta dietro.
Nonostante ciò, ti sottopongo una richiesta di chiarimento, che magari sarà un'occasione di approfondimento.
Citazione:
|
Originalmente inviato da skarso
Codice:
Ultimo = k: Primo = 1
'
BW = 0
For m = 1 To 10
BW = BW + 0.05
j = 0
For i = Primo To Ultimo - 1
|
Prendi sempre in esame tutta la serie dati, non sarebbe meglio considerare una finestra di n elementi? Tipo:
Codice:
Window=40 'il numero di elementi da considerare nell'ottimizzazione
If Ultimo<Window w=Ultimo else w= Window
For m = 1 To 10
BW = BW + 0.05
j = 0
For i = Ultimo-w To Ultimo - 1
Il considerare tutta la serie comporta, inoltre, che pesi di più valori lontani a minore distanza (=BW), piuttosto che valori più vicini a distanza inferiore. Hai fatto delle prove in questo senso?
Grazie ancora per gli ottimi spunti 
Ultima modifica di reef : 21-11-2011 alle ore 10:45.
|
|
|
21-11-2011, 11:30
|
#9 (permalink)
|
|
Utente Senior
Data registrazione: Jun 2009
Località: Neanderthal
Messaggi: 398
|
Citazione:
Originalmente inviato da reef
Ho qualche domanda sul codice. Anzitutto sarebbe eccellente se riuscissi, in qualche modo, a dare qualche riferimento di partenza a monte del codice, tipo un articolo, qualche formula...  Francamente, dal codice non riesco a risalire banalmente a quel che ci sta dietro.
Nonostante ciò, ti sottopongo una richiesta di chiarimento, che magari sarà un'occasione di approfondimento.
Prendi sempre in esame tutta la serie dati, non sarebbe meglio considerare una finestra di n elementi? Tipo:
Codice:
Window=40 'il numero di elementi da considerare nell'ottimizzazione
If Ultimo<Window w=Ultimo else w= Window
For m = 1 To 10
BW = BW + 0.05
j = 0
For i = Ultimo-w To Ultimo - 1
Il considerare tutta la serie comporta, inoltre, che pesi di più valori lontani a minore distanza (=BW), piuttosto che valori più vicini a distanza inferiore. Hai fatto delle prove in questo senso?
Grazie ancora per gli ottimi spunti 
|
il metodo dei ”nearest neighbour” rientra nella categoria dei metodi di “classificazione”, cercando con queste parole chiave credo tu possa trovare articoli sul web
questi metodi non parametrici che apprendono dai dati ( data in rules out ) non funzionano bene quando soffrono della cosiddetta “curse of dimensionality” cioè in pratica dell’ insufficienza di dati disponibili
di qui la scelta di considerare l’ intero data set anche se i dati + lontani nel tempo sono meno significativi
come soluzione si potrebbe pensare ad una pesatura dei dati secondo il tempo ma non ho fatto prove in tal senso
|
|
|
22-11-2011, 09:29
|
#10 (permalink)
|
|
...
Data registrazione: Jun 2003
Messaggi: 3,223
|
Citazione:
Originalmente inviato da Skarso
il metodo dei ”nearest neighbour” rientra nella categoria dei metodi di “classificazione”, cercando con queste parole chiave credo tu possa trovare articoli sul web
questi metodi non parametrici che apprendono dai dati ( data in rules out ) non funzionano bene quando soffrono della cosiddetta “curse of dimensionality” cioè in pratica dell’ insufficienza di dati disponibili
di qui la scelta di considerare l’ intero data set anche se i dati + lontani nel tempo sono meno significativi
come soluzione si potrebbe pensare ad una pesatura dei dati secondo il tempo ma non ho fatto prove in tal senso
|
Provo a fare un riepilogo da newbie. Vediamo cosa ho capito.
1. Per raggiungere un risultato positivo (gain alle 17.30), fisso un'orario X<17.30, orario al quale deciderò se e come procedere con l'acquisto di un titolo, sulla base di uno o più indicatori.
2. Nel primo dei due esempi l'indicatore è l'andamento del titolo dall'apertura all'orario X, diciamo G%
3. Per determinare la probabilità di guadagno, misuro la relazione causa-effetto in un set di dati, assegnando punteggi di "winning bet" al verificarsi di alcune condizioni, es. G%<A, G%<B, G%>C, G%>D. A,B,C,D sono soglie stabilite sulla base della distribuzione dei risultati.
4. Per dare robustezza al sistema, nel secondo esempio individuo una variabile esogena che influisce sull'andamento della scommessa (quindi ben correlata a quella sotto osservazione), valutando la relazione causa-effetto tra le due variabili (esogena e osservata).
Se fin qui va bene, poi procedo 
Ultima modifica di reef : 22-11-2011 alle ore 09:31.
|
|
|
|