Come ottimizzare un Trading System

Collapse
X
 
  • Ora
  • Show
Clear All
new posts
  • alex69
    Senior Member

    • Dec 2012
    • 432

    #16
    Originariamente Scritto da fnet
    efficiency analisys

    [ATTACH=CONFIG]17099[/ATTACH]
    Originariamente Scritto da Marco Bosco
    Ricordate di dare un\'occhio all\'anteprima della Equity .... scorrendo tra i risultati.
    In questo modo non state nemmeno ad aprire i report "inutili"...

    http://www.playoptions.it/vbforum/sh...ity-Line-Curve
    Originariamente Scritto da Marco Bosco
    1)La curva equity deve essere il piu possibile smussata.
    I trades devo essere mediamente sempre buoni.
    E\' ovvio che se si ha un TS che mediamente ha una equity orizzontale e poi pochissimi (isolati) trade la portano in alto non va bene.
    E se la portano in basso?

    quindi non si sta a guardare tutti i singoli trade ma se sono solo alcuni a fare la differenza qualcosa non va...


    2)Total eff. è un qualcosa che dipende da entry e exit eff.


    se Total >0 bene se Total < 0 male...

    Ci sono tutti i grafici per analizzare queste cose...

    Avvia a dare un\'occhio

    qua:


    Buongiorno, nella release di ieri sera e stata introdotta una nuova sezione nei report di beeAnalyzer : Analysis --&gt; Efficiency Da cui è possibile valutare a livello aggregato di Trading System le efficienze. Tutte le grandezze sono calcolate nel tempo e non solo al passo finale per cui è possibile selezionarle e


    e qua:





    3)Certo , prendi in considerazione altri risultati. Meglio che guadagni meno ma che la equity non abbia strani scossoni.


    4)in questo caso specifico magare va ritoccato un po il fattore di moltiplicazione / riduzione del periodo...
    (il famoso allulgaaccorcia di Tiziano)....prova a modificarlo (+ grande o piu piccolo...aitutati graficandolo su un indicatore)


    Ps. Tiziano l\'ha già detto... e sembra scontato... la diversificazione aiuta.


    Avete gli strumenti per vedere cosa succede applicando lo stesso TS a piu sottostanti contemporaneamente.
    Se il TS è buono la equity aggregata si smussa...
    Caspita!!!
    Grazie fnet e Marco.
    Mi sa che mi sono perso un bel po\' di cose strada facendo, nonostante segua il forum costantemente.
    Ci sono strumenti di cui ignoravo l\'esistenza e che sono stati creati apposta per semplificarci la vita.

    Marco, in riferimento al punto 4), puoi aiutarmi a capire meglio come devo intervenire?
    Grazie.

    Mi sembra che questo thread sia di grande utilità.
    E\' l\'occasione per fare un bel ripasso generale e per sfruttare al meglio le potenzialità di BT.
    Grazie Playoptions!!!

    Comment

    • fnet
      Senior Member
      • Aug 2010
      • 738

      #17
      Il sistemista Consiglia: Money Management

      .... altro componente da ottimizzare è il money management come da manuale ....

      ... per quanto riguarda lo stop loss, trovo utile fare un backtest senza utilizzarlo , poi controllo i trades perdenti più elevati e da questi valori inizio a cercare un valore di stop loss adeguato ....
      "Tempus omnia medetur" .... e fà guadagnare di Theta

      Comment

      • Cagalli Tiziano
        Senior Member
        • Dec 2007
        • 11252

        #18
        Originariamente Scritto da fnet
        .... altro componente da ottimizzare è il money management come da manuale ....

        ... per quanto riguarda lo stop loss, trovo utile fare un backtest senza utilizzarlo , poi controllo i trades perdenti più elevati e da questi valori inizio a cercare un valore di stop loss adeguato ....
        Premesso che il migliore valore di Stop Loss è quello che non verrà mai toccato, ci sono diverse funzionalità in beeTrader per capire quale sarebbe il migliore.
        Ovvero quello che escluderebbe solo i trades che sono rimasti in perdita e che non taglia quelli che sono andati in negativo ma che si sono chiusi in Gain.

        in Chart si trova l\'adverse exursion, il drawdown e il Loss Trdades che graficano il sistema che si sta testando permettendo di individuare il valore ottimale. Il Loss Trade restituisce il valore medio che è già una buona base di partenza:
        File Allegati
        Last edited by Cagalli Tiziano; 06-12-14, 22:50.
        ..se corri dietro a due lepri, non ne prendi nemmeno una.

        Comment

        • fnet
          Senior Member
          • Aug 2010
          • 738

          #19
          Originariamente Scritto da alex69
          ....
          Provo quindi a ricapitolare i criteri corretti per fare il backtest/paper/messa a mercato.
          Se sbaglio correggimi, per favore.

          1) Ottimizzo il TS su 1.500 barre.
          2) Faccio il backtest su 3.000 barre.
          3) Se i risultati sono in linea metto in paper per 3.000 barre.
          4) Se anche in paper i risultati sono in linea metto in reale.

          ....
          .... quanto sopra era riferito a un TS TF 1 minuto , corretto ? ...
          per i TS TF Day come si dovrebbe procedere ? si testa su un TF inferiore , per esempio l\'orario ?

          fabio
          "Tempus omnia medetur" .... e fà guadagnare di Theta

          Comment

          • fnet
            Senior Member
            • Aug 2010
            • 738

            #20
            Originariamente Scritto da Cagalli Tiziano
            ....
            in Chart si trova l\'adverse exursion, il drawdown e il Loss Trdades che graficano il sistema che si sta testando permettendo di individuare il valore ottimale. Il Loss Trade restituisce il valore medio che è già una buona base di partenza:
            grazie
            "Tempus omnia medetur" .... e fà guadagnare di Theta

            Comment

            • Marco Bosco
              Senior Member

              • Sep 2012
              • 419

              #21
              Originariamente Scritto da alex69
              Caspita!!!
              Grazie fnet e Marco.
              Mi sa che mi sono perso un bel po\' di cose strada facendo, nonostante segua il forum costantemente.
              Ci sono strumenti di cui ignoravo l\'esistenza e che sono stati creati apposta per semplificarci la vita.

              Marco, in riferimento al punto 4), puoi aiutarmi a capire meglio come devo intervenire?
              Grazie.

              Mi sembra che questo thread sia di grande utilità.
              E\' l\'occasione per fare un bel ripasso generale e per sfruttare al meglio le potenzialità di BT.
              Grazie Playoptions!!!

              ciao,
              guarda è molto semplice partiamo dal codice :

              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:

              Codice:
              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:

              Codice:
              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....

              Click image for larger version

Name:	A.png
Views:	1
Size:	20.6 KB
ID:	156879


              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:

              Codice:
              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:

              Codice:
              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

              Codice:
              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:

              Codice:
              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.

              saluti
              Last edited by Marco Bosco; 07-12-14, 11: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)

              Comment

              • familytaz
                Senior Member
                • Oct 2008
                • 1779

                #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 ?

                File Allegati

                Comment

                • Smash
                  Senior Member

                  • Feb 2012
                  • 351

                  #23
                  Originariamente Scritto da Marco Bosco
                  ciao a tutti,
                  aggiungo una cosa al mio post di prima.

                  -In attesa che sia sviluppato un calendario si può implementare anche di stare FUORI DAL MERCATO da script, andando ad escludere certi giorni nel backtest.
                  Usando ovviamente la logica booleana.

                  Le righe di easyscript per stare fuori dal mercato poi si possono riusare in tutti gli script.....si fa anche prima

                  ...ancora meglio , si può creare una funzione definita dall\'utente che ritorna 1 o 0 in base al mathcing con le date che si vogliono escludere cosi poi nel signal basta aggiungere alla condizione finale "and MyCalendarFunction()

                  Chi la costruisce ?

                  ciao,
                  Marco

                  Ciao Marco,
                  la costruisco io!

                  Potresti magari essere un po\' più dettagliato sull\'ultimo punto,
                  così mi metto al lavoro?

                  Comment

                  • alex69
                    Senior Member

                    • Dec 2012
                    • 432

                    #24
                    Originariamente Scritto da fnet
                    .... quanto sopra era riferito a un TS TF 1 minuto , corretto ? ...
                    per i TS TF Day come si dovrebbe procedere ? si testa su un TF inferiore , per esempio l\'orario ?

                    fabio
                    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?

                    Comment

                    • Marco Bosco
                      Senior Member

                      • Sep 2012
                      • 419

                      #25
                      Originariamente Scritto da familytaz
                      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 ?

                      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)

                      Comment

                      • alex69
                        Senior Member

                        • Dec 2012
                        • 432

                        #26
                        Originariamente Scritto da Marco Bosco

                        ....quando poi sei pratico guardi direttamente i numeri nella finestra di debug dell\'ambiente di sviluppo.

                        procedete a piccole modifiche alla volta.

                        saluti
                        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.

                        Comment

                        • Marco Bosco
                          Senior Member

                          • Sep 2012
                          • 419

                          #27
                          Originariamente Scritto da Smash
                          Ciao Marco,
                          la costruisco io!

                          Potresti magari essere un po\' più dettagliato sull\'ultimo punto,
                          così mi metto al lavoro?

                          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 è :

                          Codice:
                          CROSSOVER( DecisionConst, @lowlevel)

                          che sarà vera se incrocia o non vera se non incrocia.


                          Quindi se scriviamo:

                          Codice:
                          CROSSOVER( DecisionConst, @lowlevel) and 1
                          AND 1 sarà neutro...

                          se scriviamo :

                          Codice:
                          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()

                          Codice:
                          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)

                          Comment

                          • familytaz
                            Senior Member
                            • Oct 2008
                            • 1779

                            #28
                            Originariamente Scritto da Marco Bosco
                            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..
                            "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.
                            File Allegati
                            Last edited by familytaz; 07-12-14, 17:27.

                            Comment

                            • Marco Bosco
                              Senior Member

                              • Sep 2012
                              • 419

                              #29
                              Originariamente Scritto da alex69
                              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.
                              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)

                              Comment

                              • fnet
                                Senior Member
                                • Aug 2010
                                • 738

                                #30
                                Originariamente Scritto da alex69
                                Ciao fnet,
                                ....

                                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?
                                ... non sò , la mia era proprio una domanda, vediamo se cortesemente qualcuno del forum ha qualche indicazione in merito ... ...

                                fabio
                                "Tempus omnia medetur" .... e fà guadagnare di Theta

                                Comment

                                Working...