Sistemi a FUZZY LOGIC (1 Viewer)

Piedi a Terra

Forumer storico
Nell’applicare la fuzzy logic, il primo problema che ho incontrato e’ la normalizzazione dei dati in caso di grandezze economiche non aventi tutte segno positivo.
Esempio.
Abbiamo delle aziende (in numero di 10) e per ognuna di esse abbiamo due colonne di dati. Nella prima colonna viene esposto il tasso di crescita e nella seconda la distanza dal minimo. La prima colonna esprime il tasso di crescita degli utili da "t" a "t+1" Piu' crescono gli utili di un'azienda, piu' diventa appetibile in borsa. La seconda colonna esprime il recupero dei prezzi dai minimi toccati in precedenza. Qui il motivo di preferenza e' l'inverso del primo: piu' un'azienda ha recuperato meno dai mini di borsa, piu' e' preferibile ("ha fatto meno strada")".

Detto in parole semplici comprensibili, a tutti i dati raccolti relativi dalle aziende possono essere talvolta anche negativi, per cui prima di passarli in pasto agli algoritmi fuzzy e' necessario un pretrattamento, al fine di cambiare i segni negativi e renderli tutti positivi.
 

Allegati

  • scelta%20aziende.JPG
    scelta%20aziende.JPG
    35,9 KB · Visite: 374

Piedi a Terra

Forumer storico
Nel caso non avessimo degli assunti di partenza sulla distribuzione dei dati – e nel caso in esempio dei dati delle aziende inventate dello specchietto sopra che ho buttato in maniera del tutto random evidentemente non li abbiamo - un metodo banale di pretrattamento/trasformazione/normalizzazione dei dati e' la trasformazione lineare.
Nel caso i dati di crescita/calo degli utili siano distribuiti normalmente una trasformazione lineare cerca di mantenere l'ordine dei componenti, in particolare rispetta le proprieta' della simmetria, anche tra dati positivi e negativi.

La formula della trasformazione lineare ("normalizzazione") e’ data:

X = l'intero campione di dati
mu = la media dei dati
sigma = la deviazione standard dei dati
n= la numerosita' del campione


Per ogni singola azienda, che chiamero' x(n), la normalizzazione dei dati all'interno di un intervallo arbitrario che va da 0 a 100 che chiamero' (i) e' la seguente:

x(n') = (i/2) - mu* n/sigma + x(n)*n/sigma

Anche se non posso garantire che la formula di normalizzazione sopra usata vada bene, o sia meglio di altre, ( perché non ho informazioni a sufficienza circa i momenti come media, sd kurtosi, asimmetria, ecc), l'insieme dei dati normalizzati dovrebbe avere una probabilità molto bassa di presentare dei valori al di fuori del campo da 0 a 100. Uno statistico potrebbe fare molto di piu’ e meglio, come ad esempio verificare se le classi di frequenza di un istrogramma sono troppo ravvicinate e studiare un algoritmo ad hoc per aumentare la deviazione standard, oppure l’inverso.
Se ti vengono in mente altri metodi di pretrattamento fuzzy migliori per i dati, fammeli conoscere.
Ripeto che in un processo di normalizzazione stare per forza all’interno dell’intervallo 0 a 100 per me non e’ un tabu.
 

Skarso

Forumer attivo
Detto in parole semplici comprensibili, a tutti i dati raccolti relativi dalle aziende possono essere talvolta anche negativi, per cui prima di passarli in pasto agli algoritmi fuzzy e' necessario un pretrattamento, al fine di cambiare i segni negativi e renderli tutti positivi.

non è detto che sia necessario, la Fuzzy Logic può trattare anche dati negativi ( v. esempi postati su Dropbox ) dipende solo se è + comodo averli tutti positivi
ad es se si devono prendere decisioni in base ai soli fuzzy sets senza regole che vi si riferiscano come accade solitamente nei problemi di decision making allora è + comodo che siano positivi
 

Skarso

Forumer attivo
Se ti vengono in mente altri metodi di pretrattamento fuzzy migliori per i dati, fammeli conoscere.
Ripeto che in un processo di normalizzazione stare per forza all’interno dell’intervallo 0 a 100 per me non e’ un tabu.

suggerirei di consultare qualche testo sul Data Mining ( to mine = scavare x etrarre )
di solito ci sono capitoli dedicati al pre - trattamento dei dati
 

Skarso

Forumer attivo
adesso tentiamo un esperimento un po’ strano forse folle x aumentare i lettori interessati da 2 – 3 ad almeno 4 - 5 . . . :D
cerchiamo di rendere “fuzzy “un indicatore ad es il famoso RSI ed applichiamolo al sistema su Fiat delle 16 . . .
io non sono pratico di ‘sta roba, ho calcolato lo RSI a 30 gg (anziché sulle differenze di prezzo sulle differenze percentuali ) ma se ho sbagliato invito gli espertoni in materia a partecipare e dare suggerimenti . . .
ho suddiviso lo RSI x semplicità in 3 fuzzy sets “basso”, “medio”, “alto” con ascisse 0.20, 0.50, 0.80 . e ho diviso il rendimento 16 vs apertura pure in 3 fuzzy sets “neg”, “zero”, “pos” con ascisse -2, 0, + 2
questo porta a dover esplicitare 3 x 3 = 9 regole linguistiche:
IF RSI = BASSO AND RENDIMENTO = NEG THEN . . .
IF RSI = BASSO AND RENDIMENTO = ZERO THEN . . .
IF RSI = BASSO AND RENDIMENTO = POS THEN . . .
IF RSI = MEDIO AND RENDIMENTO = NEG THEN . . .
IF RSI = MEDIO AND RENDIMENTO = ZERO THEN . . .
IF RSI = MEDIO AND RENDIMENTO = POS THEN . . .
IF RSI = MEDIO AND RENDIMENTO = NEG THEN . . .
x completare lì dove ci sono I puntini servirebbe qualche esperto, quindi non avendo l’ esperienza necessaria ho cercato di apprendere dai dati stessi con un procedimento Data In Rules Out
nel foglio2 del file PROVA-F-RSI-1 caricato come al solito su Dropbox, ci sono 9 colonne da comb1 a comb9 dove ci sono le inferenze delle 9 combinazioni effettuate col metodo del prodotto:
comb1 = basso*neg
comb2 = basso*zero
comb3 = basso*pos
comb4 = medio*neg
comb5 = medio *zero
comb6 = medio *pos
comb7 = alto*neg
comb8 = alto *zero
comb9 = alto *pos
le 9 regole da rule1 a rule9 vengono calcolate aggiornando ogni regola ogni qualvolta ci è nuova informazione relativa a ciascuna combinazione:
rule1 = ( 1 – beta*comb1 ) + beta*comb1*yield2
. . . . . .
Rule9 = ( 1 – beta*comb9 ) + beta*comb9*yield2
dove beta è un fattore di smoothing dettato dall’ esperienza e yield2 il valore del rendimento open di domani vs h 16 di oggi
dato che x costruzione la sommatoria
comb1 + comb2 + . . . + comb9 = 1
la media pesata x ottenere la previsione al tempo t si ottiene facendo la somma
previsione( t ) = comb1(t)*rule1( t – 1) + comb2(t)*rule2( t – 1) + . . . + comb9(t)*rule9( t – 1)
se la previsione è maggiore di una certa soglia kappa1 si va long viceversa se è minore di una soglia kappa2
i risultati della simulazione sono discreti anzi imo superiori alle attese:
trade positivi = 55% netto = 65% omega = 1.526 MDD = - 20%

 

Piedi a Terra

Forumer storico
non è detto che sia necessario, la Fuzzy Logic può trattare anche dati negativi ( v. esempi postati su Dropbox ) dipende solo se è + comodo averli tutti positivi
ad es se si devono prendere decisioni in base ai soli fuzzy sets senza regole che vi si riferiscano come accade solitamente nei problemi di decision making allora è + comodo che siano positivi

Si, nelle decisioni in finanza e' molto piu' comodo avere a che fare con dei dati pretrattati. In molti casi c'e' almeno una buona ragione giustificativa: eliminare o attribuire poca importanza ai dati outlier.
 

Skarso

Forumer attivo
sembra interessante anche lo RSI-fuzzy sul multiday v. file PROVA-F-RSI-2 caricato su Dropbox
si compra o si vende in asta di chiusura a seconda che la previsione sia positiva o negativa e si mantiene la posizione finchè sussiste la condizione di entrata
essendo il titolo sempre sceso il “long” praticamente non guadagna mentre lo “short” guadagna ben il 97% con MDD relativamente contenuto – 20% e Omega = 1.626
naturalmente data la mia scarsa conoscenza in questo campo gli espertoni dello RSI sono invitati ad intervenire con suggerimenti
 

expectancy.pm

Nuovo forumer
Sto provando a seguirvi ma ho moltissime difficoltà... giusto per capire, il FUZZY può essere utilizzato, ad esempio, a calcolare una soglia di ingresso? Se si potreste gentilmente fare un esempio pratico?
Supponiamo ad esempio che io voglia entrare long al break del massimo precedente più una quota X di vola, il fuzzy può essere d'aiuto a calcolare questa x? Se si, fatta 100 la vola, come si effettua il calcolo?
Scusate la domanda troppo elementare ma non ci ho capito molto....
Vi ringrazio!
 
Ultima modifica:

luka46

Dracarys
adesso tentiamo un esperimento un po’ strano forse folle x aumentare i lettori interessati da 2 – 3 ad almeno 4 - 5 . . . :D
cerchiamo di rendere “fuzzy “un indicatore ad es il famoso RSI ed applichiamolo al sistema su Fiat delle 16 . . .
io non sono pratico di ‘sta roba, ho calcolato lo RSI a 30 gg (anziché sulle differenze di prezzo sulle differenze percentuali ) ma se ho sbagliato invito gli espertoni in materia a partecipare e dare suggerimenti . . .
ho suddiviso lo RSI x semplicità in 3 fuzzy sets “basso”, “medio”, “alto” con ascisse 0.20, 0.50, 0.80 . e ho diviso il rendimento 16 vs apertura pure in 3 fuzzy sets “neg”, “zero”, “pos” con ascisse -2, 0, + 2
questo porta a dover esplicitare 3 x 3 = 9 regole linguistiche:
IF RSI = BASSO AND RENDIMENTO = NEG THEN . . .
IF RSI = BASSO AND RENDIMENTO = ZERO THEN . . .
IF RSI = BASSO AND RENDIMENTO = POS THEN . . .
IF RSI = MEDIO AND RENDIMENTO = NEG THEN . . .
IF RSI = MEDIO AND RENDIMENTO = ZERO THEN . . .
IF RSI = MEDIO AND RENDIMENTO = POS THEN . . .
IF RSI = MEDIO AND RENDIMENTO = NEG THEN . . .
x completare lì dove ci sono I puntini servirebbe qualche esperto, quindi non avendo l’ esperienza necessaria ho cercato di apprendere dai dati stessi con un procedimento Data In Rules Out
nel foglio2 del file PROVA-F-RSI-1 caricato come al solito su Dropbox, ci sono 9 colonne da comb1 a comb9 dove ci sono le inferenze delle 9 combinazioni effettuate col metodo del prodotto:
comb1 = basso*neg
comb2 = basso*zero
comb3 = basso*pos
comb4 = medio*neg
comb5 = medio *zero
comb6 = medio *pos
comb7 = alto*neg
comb8 = alto *zero
comb9 = alto *pos
le 9 regole da rule1 a rule9 vengono calcolate aggiornando ogni regola ogni qualvolta ci è nuova informazione relativa a ciascuna combinazione:
rule1 = ( 1 – beta*comb1 ) + beta*comb1*yield2
. . . . . .
Rule9 = ( 1 – beta*comb9 ) + beta*comb9*yield2
dove beta è un fattore di smoothing dettato dall’ esperienza e yield2 il valore del rendimento open di domani vs h 16 di oggi
dato che x costruzione la sommatoria
comb1 + comb2 + . . . + comb9 = 1
la media pesata x ottenere la previsione al tempo t si ottiene facendo la somma
previsione( t ) = comb1(t)*rule1( t – 1) + comb2(t)*rule2( t – 1) + . . . + comb9(t)*rule9( t – 1)
se la previsione è maggiore di una certa soglia kappa1 si va long viceversa se è minore di una soglia kappa2
i risultati della simulazione sono discreti anzi imo superiori alle attese:
trade positivi = 55% netto = 65% omega = 1.526 MDD = - 20%

quello che non capisco è : il volore aggiunto è dato dalla fuzzy o dall'ottimizzazione di kappa?
si può fare delle prove ricavando k senza ottimizzazione per vedere se la fuzzy fa il suo dovere?
in pratica separiamo i due fattori altrimenti non si riesce a capire se tutti e due fanno il lavoro o uno tira e l'altro guarda...

magari è un osservazione stupida però.. meglio pensarci una volta in più che una in meno credo :up:
 

Skarso

Forumer attivo
Sto provando a seguirvi ma ho moltissime difficoltà... giusto per capire, il FUZZY può essere utilizzato, ad esempio, a calcolare una soglia di ingresso? Se si potreste gentilmente fare un esempio pratico?
Supponiamo ad esempio che io voglia entrare long al break del massimo precedente più una quota X di vola, il fuzzy può essere d'aiuto a calcolare questa x? Se si, fatta 100 la vola, come si effettua il calcolo?
Scusate la domanda troppo elementare ma non ci ho capito molto....
Vi ringrazio!


non capisco bene cosa intendi con “quota X di vola” . . .
immagino tu voglia dire che non conosci la soglia di volatilità da abbinare alla prima condizione fissa e che vuoi calcolarla
in tal caso la fuzzy logic può essere utile e allora basta normalizzare in qualche modo la volatilità e suddividere l’ intervallo di variazione in un numero dispari di sotto intervalli
poi occorre ricorrere a delle regole linguistiche del tipo ad es :
IF break AND VOLA =BASSA then . . .
IF break AND VOLA =MEDIA then . . .
IF break AND VOLA =ALTA then . . .
dopo di che o sai x esperienza cosa mettere al posto dei puntini ( es compra, vendi, flat, compra n contratti etc ) oppure bisogna apprendere dai dati come mostrato negli esempi postati su Dropbox
 

Users who are viewing this thread

Alto