Discussione: Come ottimizzare un Trading System
-
07-12-14, 12:08 #21
ciao,
guarda è molto semplice partiamo dal codice :
INPUTS: @price(CLOSE), @periods(80), @lev1(-65), @lev2(-35) SET v = Variance(@price, @periods, SIMPLE) SET o = Oscillator(v, @periods) SET VariaPeriodi = @periods + o - 50.0 # EasyScript internamente esegue gia' l'arrotondamento all'intero piu' vicino nel calcolo dei periodi # quindi questa riga non e' necessaria. # SET VariaPeriodi = ROUND((@period1 * allungaAccorcia),0) # Assicura di avere un valore valido per il calcolo di %R SET PeriodoWilliams = IF(VariaPeriodi < 2, 2, VariaPeriodi) SET A = WilliamsPctR(PeriodoWilliams) SET B = @lev1 SET C = @lev2 print (v, o, PeriodoWilliams) CROSSOVER(A, @lev1)
come vedi nell'istruzione:
SET VariaPeriodi = @periods + o - 50.0
c'è quel 50 che è una costante.
Magari non è adatta per il sottostante/TF/condizioni mercato....
Qui il coefficiente è sommatto/sottratto ma puoi anche moltiplicare dividere...inventare insomma premesso che le varianti sono ben piu che infinite... come prima cosa potresti PARAMETRIZZARLO:
INPUTS: @price(CLOSE), @periods(80), @lev1(-65), @lev2(-35), @variatore(50) SET v = Variance(@price, @periods, SIMPLE) SET o = Oscillator(v, @periods) SET VariaPeriodi = @periods + o - @variatore # EasyScript internamente esegue gia' l'arrotondamento all'intero piu' vicino nel calcolo dei periodi # quindi questa riga non e' necessaria. # SET VariaPeriodi = ROUND((@period1 * allungaAccorcia),0) # Assicura di avere un valore valido per il calcolo di %R SET PeriodoWilliams = IF(VariaPeriodi < 2, 2, VariaPeriodi) SET A = WilliamsPctR(PeriodoWilliams) SET B = @lev1 SET C = @lev2 print (v, o, PeriodoWilliams) CROSSOVER(A, @lev1)
adesso puoi quindi ottimizzarlo....
Questo è solo un esempio come ti dicevo...infatti essendo a sommare/sottrarre ed essendo lineare ottieni gli stessi risultati , della tua ottimizzazione originale... ma "shiftati" ....
Magari avvia a dividere / molitiplicare anche la varianza con un coeff. intorno all'unità...
esempio:
INPUTS: @price(CLOSE), @periods(80), @lev1(-65), @lev2(-35), @variatore(50) SET v = (Variance(@price, @periods, SIMPLE)) * 1,1 SET o = Oscillator(v, @periods) SET VariaPeriodi = @periods + o - @variatore # EasyScript internamente esegue gia' l'arrotondamento all'intero piu' vicino nel calcolo dei periodi # quindi questa riga non e' necessaria. # SET VariaPeriodi = ROUND((@period1 * allungaAccorcia),0) # Assicura di avere un valore valido per il calcolo di %R SET PeriodoWilliams = IF(VariaPeriodi < 2, 2, VariaPeriodi) SET A = WilliamsPctR(PeriodoWilliams) SET B = @lev1 SET C = @lev2 print (v, o, PeriodoWilliams) CROSSOVER(A, @lev1)
poi magari al posto di 1,1 lo parametrizzi e lo fai muovere di qualche decimo o centesimo e guardi come risponde.
Mentre con questi esempi sei andato a "sfasare" l'argomente della funzione WilliamsPctR, potresti adesso invece intervenire andando proprio ad amplificare la grandezza A, che poi è quella che deve incrociarsi con i livelli B o C.
quindi anche qua ... coefficiente:
INPUTS: @price(CLOSE), @periods(80), @lev1(-65), @lev2(-35), @variatore(50) SET v = (Variance(@price, @periods, SIMPLE)) * (1.1) SET o = Oscillator(v, @periods) SET VariaPeriodi = @periods + o - @variatore set PLOT1 = v # EasyScript internamente esegue gia' l'arrotondamento all'intero piu' vicino nel calcolo dei periodi # quindi questa riga non e' necessaria. # SET VariaPeriodi = ROUND((@period1 * allungaAccorcia),0) # Assicura di avere un valore valido per il calcolo di %R SET PeriodoWilliams = IF(VariaPeriodi < 2, 2, VariaPeriodi) SET A = (WilliamsPctR(PeriodoWilliams)) * 1,1 SET B = @lev1 SET C = @lev2 print (v, o, PeriodoWilliams) CROSSOVER(A, @lev1)
come vedi adesso A si amplifica
SET A = (WilliamsPctR(PeriodoWilliams)) * 1,1
Infine a titolo di debug prendi lo stesso codice e crei il segnale.
Ed usando le funzioni plot vai a disegnare queste grandezze.
esempio:
set PLOT1 = v
....quando poi sei pratico guardi direttamente i numeri nella finestra di debug dell'ambiente di sviluppo.
procedete a piccole modifiche alla volta.
salutiUltima modifica di Marco Bosco; 07-12-14 alle 12:27
I computer sono incredibilmente veloci, accurati e stupidi. Gli uomini sono incredibilmente lenti, inaccurati e intelligenti. L’insieme dei due costituisce una forza incalcolabile. (Albert Einstein)
-
07-12-14, 17:04 #22
Potrebbe essere utile nei risultati di backtest, aver una funzione come quella presente su OS, cioè "Show Invalid data" per avere una serie storica attendibile ?
-
07-12-14, 17:22 #23
- Data Registrazione
- Feb 2012
- Località
- Pisa
- Messaggi
- 351
-
07-12-14, 17:29 #24
- Data Registrazione
- Dec 2012
- Messaggi
- 432
Ciao fnet,
sì il TS in esame è con TF 1M.
Si potrebbe nel caso specifico provarlo con un TF maggiore.
Quello standard più vicino è 5M, ma si potrebbe valutare anche un TF intermedio (es. 2M o 3M).
Ovviamente bisogna valutare il peso del sottostante. Sul Dax eviterei, mentre sullo Stoxx o sul Bund è fattibile.
Partendo dal TF D1, penso che si potrebbero analogamente prendere in considerazione anche altri TF intermedi (es. 4H o 2H), arrivando a 1H ed eventualmente scendendo ancora.
E' corretta questa mia interpretazione?
-
07-12-14, 17:35 #25
ciao familytaz,
andrebbe prima definito cosa è attendibile?
In OS ci sono delle regole per stabilire se le due serie hanno le barre che matchano tra loro.
E qua?Cosa è attendibile e cosa no?....fare si può fare tutto , ma deve essere RIPETIBILE, AUTOMATIZZABILE, BEN DEFINITO.
Spiega meglio cosa stai pensando..I computer sono incredibilmente veloci, accurati e stupidi. Gli uomini sono incredibilmente lenti, inaccurati e intelligenti. L’insieme dei due costituisce una forza incalcolabile. (Albert Einstein)
-
07-12-14, 17:45 #26
- Data Registrazione
- Dec 2012
- Messaggi
- 432
Marco non so come ringraziarti, sei proprio gentilissimo!!!
Ora con calma devo digerire i vari passaggi che hai illustrato.
Una domanda:
I coefficienti dell'esempio (*1.1) , posso inserirli come parametri ed eventualmente ottimizzarli o è meglio procedere per singoli step e ottimizzare di volta in volta solo gli altri parametri?
Grazie.
-
07-12-14, 17:47 #27
ciao Marco,
certo....lancio solo l'idea però non ho provato..... come sai i nostri script lanciano gli ordini quando l'espressione dello script diventa vera (in termini booleani)
Quindi se l'espressione è TRUE (1) .... l'ordine viene eseguito...se è FALSE (0) l'ordine non viene eseguito...
prendiamo come esempio lo script che sta circolando adesso sul forum (il WilliamsPctR per capirsi)...
L'espressione finale è :
CROSSOVER( DecisionConst, @lowlevel)
che sarà vera se incrocia o non vera se non incrocia.
Quindi se scriviamo:
CROSSOVER( DecisionConst, @lowlevel) and 1
AND 1 sarà neutro...
se scriviamo :
CROSSOVER( DecisionConst, @lowlevel) and 0
sara sempre FALSA
Lo scopo qua quindi è di scrivere invece di subito 0 o 1 ... un qualcosa che scriva 0 o 1 in base a delle condizione.
Quindi va creata una funzione definita dall'utente... che chiameremo MyMatchCalendar()
CROSSOVER( DecisionConst, @lowlevel) and MyMatchCalendar()
dentro MyMatchCalendar() ci dovra essere scritto un qualcosa che : "se oggi parla draghi allora 0 se oggi NON parla Draghi allora 1"....I computer sono incredibilmente veloci, accurati e stupidi. Gli uomini sono incredibilmente lenti, inaccurati e intelligenti. L’insieme dei due costituisce una forza incalcolabile. (Albert Einstein)
-
07-12-14, 17:52 #28
"Come nell'OS ci sono delle regole per stabilire se le due serie hanno le barre che matchano tra loro",
è possibile creare delle regole sui backtest se la serie ha dati non attendibili ? Che ne so, magari se ci sono tot barre "strane" ricollegarsi con il broker e riscaricare la serie storica ripetendo il backtest.Ultima modifica di familytaz; 07-12-14 alle 18:27
-
07-12-14, 18:11 #29
ciao alex69,
mettili pure come variabili per renderti conto di cosa succede e ottimizzali.
Devo però dirti una cosa ... Purtroppo il fenomeno è fortemente non lineare (e tutte le variabili sono "legate tra loro"....in parole molto povere se ne tocchi una ...modifiche il comportamento di tutte) quindi NON è che puoi ottimizzare una variabile , scegli il valore che ti da il profit maggiore poi passi alla seconda variabile, poi fai lo stesso e passi ad ottimizzare la terza e cosi via....
Esempio ... trovi l'ottimo (per ottimo , in ricerca operativa, si intende la ricerca dei massimi e minimi di qualcosa ... nel nostro caso per esempio e solo per esempio la ricerca del Max total net profit e minimo del drawdown) della prima variabile e la fissi...poi vai ad ottimizzare la seconda. Non è detto che sia l'ottimo GLOBALE... perchè magari scegliendo un valore meno buono della prima...avresti trovato risultati di gran lunga migliori poi andando ad ottimizzare la seconda.
NOTA
in beeTrader verrà sviluppato un tool avanzato di analisi multidimensionale che permetterà proprio di verificare in modo semplice ed ancora più intuitivo, anche graficamente, come si comporteranno le varie grandezze al variare di altre due variabili (scelte a piacere). Andando quindi a costruire delle SUPERFICI di risposta.I computer sono incredibilmente veloci, accurati e stupidi. Gli uomini sono incredibilmente lenti, inaccurati e intelligenti. L’insieme dei due costituisce una forza incalcolabile. (Albert Einstein)
-
07-12-14, 18:35 #30
- Data Registrazione
- Aug 2010
- Località
- Padova
- Messaggi
- 738