Announcement

Collapse
No announcement yet.

funzione di fitness CUSTOM per le ottimizzazioni

Collapse
X
 
  • Filter
  • Time
  • Show
Clear All
new posts

    #16
    Giusto, infatti per riallacciarmi al mio discorso inziale sottolineavo solo come apparenti definizioni di quanto sia buono un BT rispetto ad un altro sottendono trabocchetti non banali anche nelle formule più semplici.
    La statistica è l'unica scienza esatta!

    Comment


      #17
      Stimolato dall'utente ste che ha introdotto il Pessimistic Return on Margin di Robert Pardo, a questo post

      ho codificato il numeratore della formula, cioè
      il guadagno pessimistico del backtest.

      Robert Pardo, nel suo testo The Evaluation and Optimization of Trading Strategies (2008) afferma che, poiché una qualsiasi strategia di trading in real-time vince di meno e perde di più di quanto non sia in grado di fare in una simulazione dei dati storici su cui è stato ottimizzato,

      propone di calcolare il guadagno pessimistico del backtest, riducendo il numero di trade vincenti della sua radice quadrata ed aumentando il numero di trade perdenti della sua radice quadrata.

      La formula è quindi la seguente:




      Senza la modifica del numero di trade vincenti e perdenti, la formula calcolerebbe il normale Net Profit del backtest, con la versione pessimista il Pessimistic Net Profit si riduce necessariamente.

      Di seguito il codice pronto e funzionante da copiare e mettere in fondo ad un qualsiasi trading system



      PHP Code:
      //+------------------------------------------------------------------+
      // calcolo del "Pessimistic Net Profit" secondo la definizione di Robert Pardo in 'The Evaluation and Optimization of Trading Strategies' (2008)
      double OnTester()
        {
         
      double OnTesterResult;
         
      double PessimisticNetProfit;
         
      int n_win=0n_loss=0;
         
      double risultatoTrade=0;
         
      double AvgWin=0AvgLoss=0;
         
      int ihstTotal=OrdersHistoryTotal();

         if (
      hstTotal==0)
           {
            return(-
      1);  // OnTesterResult = -1;
           
      }

         
      double NetProfit TesterStatistics(STAT_PROFIT);

         for(
      i=0i<hstTotali++)
           {
            if (
      OrderSelect(i,SELECT_BY_POS,MODE_HISTORY))
              {
               
      risultatoTrade OrderProfit()+OrderCommission()+OrderSwap();
               if (
      risultatoTrade>=0)
                 {
                  
      AvgWin AvgWin risultatoTrade;
                  
      n_win++;
                 }
               else
                 {
                  
      AvgLoss AvgLoss MathAbs(risultatoTrade);
                  
      n_loss++;
                 }
              }
           }
         if (
      n_win==0)     AvgWin 0;
         else              
      AvgWin AvgWin/n_win;

         if (
      n_loss==0)    AvgLoss 0;
         else              
      AvgLoss AvgLoss/n_loss;

         
      //PessimisticNetProfit = AvgWin*(n_win-radQ(n_win)) - AvgLoss*(n_loss+radQ(n_loss))
         
      PessimisticNetProfit AvgWin*(n_win-MathSqrt(n_win)) - AvgLoss*(n_loss+MathSqrt(n_loss));

         Print (
      "Pessimistic Net Profit = "+DoubleToStr(PessimisticNetProfit,3)+"   "+DoubleToStr(AvgWin,2)+"*("+IntegerToString(n_win)+"-"+DoubleToStr(MathSqrt(n_win),3)+") - "+DoubleToStr(AvgLoss,2)+"*("+IntegerToString(n_loss)+"+"+DoubleToStr(MathSqrt(n_loss),3)+")");
         
         Print(
      "NetProfit originale = "+DoubleToStr(NetProfit,2)+"   numTrades="+IntegerToString(hstTotal)+"   n_win="+IntegerToString(n_win)+"   n_loss="+IntegerToString(n_loss)+"   AvgWin="+DoubleToStr(AvgWin,3)+"   AvgLoss="+DoubleToStr(AvgLoss,3));

         
      OnTesterResult PessimisticNetProfit;
         Print(
      "OnTesterResult="+DoubleToString(OnTesterResult,Digits));

         return(
      OnTesterResult);
        }  
      //+------------------------------------------------------------------+ 


      Qui un esempio di backtest di un EA di default nella piattaforma con il codice della funzione OnTester() inserito






      e di seguito cosa si legge nella scheda Journal al termine del backtest:

      al NetProfit originale di 395,64
      con un numero di 213 trade vincenti con valor medio di 3.62
      e numero di 8 trade perdenti con valor medio 43.297

      corrisponde un Pessimistic Net Profit di 221.35





      Ora che la funzione di fitness custom è creata dentro OnTester(), l'EA può essere ottimizzato massimizzando questa funzione, come descritto nei primi post di questa discussione.



      La vita non è un giro di prova, cogli l’attimo..
      Realizzazione per Metatrader4 di trading system, indicatori, pattern grafici, Ottimizzazioni IS-OOS su Forex e CFD, Analisi di Portafoglio .

      Comment


        #18
        Cari amici,

        Vediamo se riesco a dare un piccolo contributo in ricambio a tutto quello che, grazie a voi, sto imparando in questi giorni.
        Quindi... per gli appassionati di Object Oriented programming (OO) e per quelli che non lo sono, ecco a voi una "mini library" a oggetti per usare/crearvi tutte le funzioni di fitness custom che volete, con il minimo sforzo.

        Due premesse:
        1. Non vi spiego come funziona per non tediarvi. Do solo le istruzioni per l'utilizzo. Su richiesta sono ben contento di spiegare tutto quello che volete.
        2. Ho fatto un test abbastanza estensivo sulla versione "full" di questo oggetto. "Versione full", significa che esso è ora inserito all'interno di una mia piattaforma personale, quindi con cose sistemate un po' diversamente. Finora, nella mia piattaforma, non ho visto bugs di grande rilievo. Quella che vi offro è una versione "Standalone", come dice il nome, dove cioè ho riunito tutto quel che serve per farla funzionare in un unico posto, per evitare "dipendenze". Questa versione l'ho testata solo formalmente ossia ho visto che compila e crea le interfacce in maniera dovuta. Non posso garantire che le funzionalità non siano ancora "buggate": aspetto che siano gli interessati a testarle. Sono a disposizione per debugging e correzioni a richiesta (entro i limiti della decenza e del mio tempo). Come pure sono disposto ad aggiungere un po' di features (sempre con i limiti detti sopra).

        Dunque: come funziona:
        1. Scaricate lo zip allegato. Contiene un unico file: Standalone_FitnessFunction.mqh. Decomprimete il file nella vostra directory "Include" di MetaTrader4
        2. A questo punto, in ogni EA che volete, dovete solo aggiungere queste piccole cose:

        Sezione direttive del preprocessore:

        Code:
        #include <Standalone_FitnessFunction.mqh>
        Sin qui state solo dicendo al vostro EA dove andare a beccare la library.

        Sotto (o dentro) i vostri input per l'utente:

        Code:
        input string  lbl4              = "Optimization settings";
        input uint    c_min_trades      = 0;        //minimal number of trades required
        input double  c_min_profit      = 0;        //minimal profit required
        input double  c_max_profit      = 0;        //maximal profit allowed
        input ffunct  c_fitness         = r_stdev;  //Fitness function of choice
        
        FitnessFunction*  ff  = NULL;
        Gli inputs sono "normali". Vedete che la variabile che indica il tipo di funzione è di un "tipo" particolare, ffunct, definito nella library.
        Poi create un pointer di un altro tipo ancora (FitnessFunction), lo chiamate ff, ed esso è lì, pronto a "contenere" il nostro oggetto.

        In OnInit, aggiungete da qualche parte queste due righe:

        Code:
        int OnInit() {
          ff =
              new FitnessFunction(c_fitness, c_min_trades, c_min_profit, c_max_profit);
           return(INIT_SUCCEEDED);
        }
        Qui "create" il nostro buon oggetto, caricandolo con i parametri dell'utente (voi?)

        In C++ non c'é garbage collector, quindi alla fine bisogna distruggere quel che si è creato per non fare "memory leakage", e quindi facciamo pulizia in OnDeinit:

        Code:
        void OnDeinit(const int reason) {
          delete ff;
          ff = NULL;
        }
        Ed eccoci: fase finale. Se già non l'avete, create una bella funzione OnTester:

        Code:
        //+---------------------------------------------------------------------------+
        //| OnTester used for defining a custom fitness function                      |
        //+---------------------------------------------------------------------------+
        double OnTester() {
          return(ff.Calculate());
        }
        Tutto qua.

        Quando aprite adesso la finestra dei settaggi dell'EA, trovate

        3ed4df36af3b14076b57336a96c25ed3.png

        Un commento sui settings:
        • minimal number of trades required, come pure minimal profit required e maximal profit allowed vi consentono di specificare valori che ritorneranno un valore di Fitness Function pari a -1, indipendentemente dalla funzione scelta, quando il sistema risultante sta fuori dai parametri specificati. Questo penalizza il sistema nel ciclo di ottimizzazione genetica, ma non lo esclude a priori...
        • Le funzioni finora implementate sono
          • Il reciproco della deviazione standard (ovviamente, più basso è meglio è)
          • Il rapporto profitto medio/deviazione standard
          • la Martin Ratio
          • la funzione "custom" mostrata da Umberto nei primi posts di questo thread (magari avrò domande...)
          • Il profitto netto diviso il Drawdown massimo
          • Il reciproco dell'Ulcer Index (più basso è meglio è)
          • La Sharpe Ratio
          • SQN e SQN normalizzato a 100 trades
        • ...e per ora mi sono fermato

        Concludo questo post con due note:
        • Perchè mai OO? Se vedete il mio .mqh sono un bel po' di righe... Certo: però, adesso, con +/- dieci righe di codice potete inserire tutta questa funzionalità in 1000 EA presenti e futuri, senza minimamente preoccuparvi di come funzioni e di fare "aggiunte" negli EA stessi. Potete tranquillamente fare "copia e incolla" delle righe che ho scritto sopra: non c'è bisogno di alcuna modifica. Gli oggetti si comportano come "pezzi di Lego". Quello che succede dentro non è "affar vostro": voi date un input e sapete cosa aspettarvi... L'OO funziona così: bisogna "pensare bene" all'oggetto una volta... poi potete dimenticare l'implementazione... per sempre!
        • Ancor meglio: per coloro che ci capiscono (e per chiunque voglia imparare), la library è strutturata in maniera che sia molto semplice aggiungere nuove funzioni (vedete che sono tutte "raggruppate" in una sezione. Che si possono "comporre" tra loro (cioè utilizzarne una per crearne un'altra) e via discorrendo. Qualsiasi miglioramento/espansione della library si riflette automaticamente in tutti gli EA dove avete inserito, come a mo' di "templato", le righe indicate sopra. Senza neanche il bisogno di "toccare" il codice di tutti i vostri EA per questo scopo.

        Chiaro: al limite una cosa del genere si può fare anche con un buon "include" senza oggetti (farei a questo punto fatica a ricordarmi come). Nella library c'è qualche "nouance" in più come un uso estensivo del polimorfismo e un factory method design pattern. Ma queste cose, come detto, le lasciamo per gli eventuali interessati...

        Domani o stasera ritorno per un paio di argomenti "sodi", non di programmazione.
        Ossia:
        1. Devo discutere con Umberto circa la corretta formula della deviazione standard
        2. Devo chiedere lumi sul calcolo del coefficiente di determinazione
        3. Con orrore ho scoperto (mi sembra) che il calcolo del Drawdown effettuato automaticamente da MetaTrader... è sbagliato?!?

        A presto

        FS
        Attached Files
        Last edited by fsgi; 01-09-2017, 07:44. Reason: Screenshot sparito per qualche motivo: aggiunto di nuovo

        Comment


          #19
          OK, come promesso, adesso sono di nuovo qui con le "cose serie". Sono più che altro domande ad Umberto, ma penso la discussione possa essere valida per tutti. Premetto che questo post sta qui perchè ho dovuto lavorare sulle formule per il pacchetto, ma potrebbe benissimo stare anche nel thread sulla valutazione dei trading systems con Excel (dal quale molto è tratto).

          Punto 1: la deviazione standard. Umberto, nel tuo foglio usi la formula per la deviazione standard "di popolazione" (quindi assumendo di conoscere la distribuzione teorica): SD = SQRT(SSQ/N). (SSQ, Sum of Squares, è la somma degli scostamenti dei dati dalla media, ovviamente). In realtà, la teoria statistica ci dice che, su un campione, l'estimatore corretto di questo parametro dovrebbe essere SD_c = SQRT(SSQ/(N-1)). Nella mia library ho usato questa deviazione stadard campionaria. Umberto: come mai usi quella di popolazione? Bug o feature?

          Punto 2: sul tuo modo di calcolare R^2 (coefficiente di determinazione, che dovrebbe essere semplicemente il quadrato del coeff. di correlazione), mi perdo completamente. Tu lo calcoli come la somma di tutti i valori di 100 * (equity_i - max_equity_i)/max_equity_i al quadrato, dove equity_i è il valore dell'equity ad un certo trade e max_equity_i è il valore più alto raggiunto dall'equity sino a quel momento. Il 100 penso sia per esprimere R^2 in percentuale, anzichè come valore tra 0 e 1...
          Ora: io sono abituato a considerare R^2 nel contesto di una regressione lineare, dove hai bisogno di fittare il modello, e poi calcolare gli scostamenti dei residui rispetto agli scostamenti totali. Perchè qui si usa il massimo raggiunto dall'equity? Ogni link è bene accetto (google sembra aiutare poco...). Comunque nella library ho "copiato" le formule.

          Punto 3 è il più preoccupante.

          Per testare la library ho fatto girare delle ottimizzazioni "fasulle" (pochissimi cicli, con un solo parametro variato sei o sette volte, per ottenere sempre lo stesso sistema, anche se con diverse Fitness Functions). Mi sono poi "ricostruito" il file excel. Scusa: non è per sfiducia. E' che per "concentrarmi bene" sulle cose mi piace ogni tanto rifarle. Allego qui l'Excel per farvi vedere meglio.

          Se guardate nel primo Worksheet (chiamato Input), vedete il risultato di un semplice "copia-incolla" dei 43 trades direttamente dal report del backtest di MetaTrader4. I dati poi sono copiati (filtrando le entrate, e tenendo solo le "chiusure" delle operazioni) nella seconda tabella (Elaboration) dove ci sono tutti i calcoli. Potete controllare le formule.

          Vedete in questa seconda tabella la colonna O, che riporta "current Drawdown", calcolato come nel foglio di Umberto (correttamente. L'unica cosa non perfettamente chiara è perchè non usiamo la CurrentMaxEquity calcolata in colonna N). Passando i dati uno per uno (per fortuna solo 43 trades), a "occhio" sembra proprio che il Max DrawDown sia di 248,76€.

          Ora però guardate questo bellissimo report di MetaTrader, sullo stesso identico backtest:

          WrongDD.PNG

          Qualcuno mi sa spiegare da dove viene, in MetaTrader, il MaximalDrawDown di 341.33???

          Il problema è che nella library ci sono diversi parametri di valutazione che dipendono dal DrawDown "pescato" direttamente da TesterStatistics(STAT_EQUITY_DD), come ad es. NetProfit/MaxDD. E qui, ovviamente, ci sono differenze tra la library (che usa 341.33) ed il foglio Excel (che usa 248.76).

          Leggendo un po' qui mi sembra di aver trovato che il MaxDrawdown di MetaTrader è basato sulla "Equity". Quello che noi riportiamo nel foglio Excel, in realtà (al di là del nome della colonna) è la Balance finale dei trades chiusi. Quindi, Umberto...
          E' più corretto calcolare le statistiche del backtest sul DD della Equity o della Balance? Se questa seconda ipotesi è corretta, bisognerà correggere la library su questo punto (ed anche il codice degli EA che è stato postato all'inizio di questo thread).

          Grazie in anticipo per i vostri contributi.

          FS

          P.S.: il sistema che ho utilizzato per il testing è solo il prototipo che devo cominciare a sviluppare domani anche grazie alle fitness functions. L'ottimizzazione è "fasulla" come ho detto, i trades solo 43. Ma... che ve ne pare come inizio? Sono abbastanza eccitato...PF di 2, NetProf/DD di 5, SQN100 di 5.23, DD comunque del 3%. Butta benino, direi...
          Attached Files

          Comment


            #20
            Ciao fsgi, sono in ferie, torno a Roma tra 1 settimana, rispondo con dettaglio prossimamente.

            Qual è il tuo nome ?
            A presto, Umberto
            La vita non è un giro di prova, cogli l’attimo..
            Realizzazione per Metatrader4 di trading system, indicatori, pattern grafici, Ottimizzazioni IS-OOS su Forex e CFD, Analisi di Portafoglio .

            Comment


              #21
              Ciao caro Umberto,

              "no problem, take your time", come direbbero gli Inglesi. Io intanto vado avanti a lavorare sul sistema. Mi sembra che i punti che ho trovato, mentre ci lavoravo sopra, siano abbastanza importanti ma non così critici, almeno per la scelta di una Fitness Function per le ottimizzazioni ed la WFA. L'importante è trovare una metrica che sia in grado di evidenziare set di parametri il più possibile "stabili". Probabilmente i punti evidenziati sono più importanti quando si vogliano confrontare tra loro diverse strategie.

              Quando torni, prova a fare qualche pensiero anche sulla funzione che hai indicato all'inizio del thread: ProfitFactor + (NetProfit/MaxDD). Il secondo membro della somma, di solito, penso sia di un ordine di grandezza superiore al Profit Factor, quindi la metrica risulta molto "insensibile" al profit factor stesso e decisamente "sbilanciata" a favore di NetProfit/MaxDD (cioè, il Profit Factor "aggiunge poco"). Non sarebbe meglio ProfitFactor * NetProfit/MaxDD? Mi sono anche accorto di averla inserita "buggata" nella library. Correggo, e sostituisco il file (per favore, "riscaricatelo").

              Quindi, per altri utenti eventualmente interessati: il tool dovrebbe essere completamente funzionale, ma con i "caveat" di cui sopra.

              A presto

              Fabio

              Comment


                #22
                ciao Fabio, senza entrare troppo nei particolari, inizio a rispondere ai tuoi ottimi quesiti.

                Deviazione standard: avevo considerato anche io la formula teoricamente corretta con (N-1) al denominatore, non conoscendo la distribuzione del "fenomeno strumento finanziario", ma questa finezza statistica è per me irrilevante nel trading, essendo un fenomeno aleatorio mai uguale a se stesso e dove con N sufficientemente grande la differenza è davvero irrisoria.Ragion per cui ho sempre usato la formula più nota ed usata.


                Sul sul tuo modo di calcolare R^2 (coefficiente di determinazione: non trovo dove sta questa formula, senza link non ricordo dove l'ho postata.


                Sul drawdown posso dirti che Metatrader4 calcola il DD sull'equity line delle posizioni aperte, mentre l'Excel può soltanto farlo a posizioni chiuse perciò il valore del DD di Mt4 è sempre per definizione maggiore del DD calcolato con Excel.
                Non si può fare altrimenti con Excel, spannometricamente mi faccio bastare i calcoli con Excel senza preoccuparmi troppo del fatto che nella realtà la valutazione del DD corretto è quella maggiorata calcolata con Mt4.
                Un paio di anni fa ho voluto verificare se il calcolo del DD di Mt4 fosse corretto ed avevo codificato una funzione che la calcolava ad ogni tick su un EA per confrontarla con il risultato finale del backtest di Mt4 ... ho sempre verificato che il calcolo del DD di un backtest di Mt4 è corretto.


                Riguardo la formula ProfitFactor + (NetProfit/MaxDD) è stata usata solo per fare un esempio di come codificare una funzione Custom per le ottimizzazioni. Tra l'altro NetProfit/MaxDD tende in genere ad aumentare di valore all'aumentare dell'arco temporale del backtest, quindi non lo considero molto utile per fare confronti tra diversi EA.
                Preferisco al limite usare il solo profit factor o altre formule più sofisticate con dentro molte altre variabili.
                La vita non è un giro di prova, cogli l’attimo..
                Realizzazione per Metatrader4 di trading system, indicatori, pattern grafici, Ottimizzazioni IS-OOS su Forex e CFD, Analisi di Portafoglio .

                Comment


                  #23
                  Grazie mille, Umberto, risposta già così molto utile ed esauriente (a parte R^2).

                  Concordo su tutti gli aspetti. Per quel che riguarda la deviazione standard ti do ragione sul numero alto di trades. Comunque, essendo la "campionaria" più "conservativa" (un po' più alta) di quella teorica, mi sento libero di continuare ad usare la campionaria e a lasciarla così com'è nella library.

                  Sul drawdown adesso è tutto chiaro, e penso davvero che per stimare correttamente il RISCHIO di un sistema quello sulla Balance sia più corretto di quello sull'Equity. Sono contento di sapere che hai già verificato tu la correttezza di MetaTrader. In fondo si tratta di basare i conti sul MAE dei trades (Maximum Adverse Excursion) anzichè sulle chiusure. Nella mia library avrei la possibilità di farlo, ma è complicato al di fuori della mia "piattaforma". Un "workaround" per il foglio Excel sarebbe molto semplice: invece che far calcolare il DrawDown massimo da Excel, cui mancano i dati, si potrebbe semplicemente ricopiare in quella casella il dato fornito da MetaTrader, che comunque è disponibile (ed utilizzato) nella mini-library che ho postato. Anche qui, probabilmente, l'uso del dato MetaTrader potrebbe essere migliore perchè "più conservativo". (Off topic)... appena riesco faccio qualcosa con R: un templato che, importando direttamente il report di MetaTrader, faccia tutti i calcoli e i grafici di Excel automaticamente... Terrò conto di questa differenza nei DrawDown. Poi magari posto il tutto qui... Ma con pazienza!

                  Grazie per la spiegazione del significato della tua formula. E' a disposizione, nel file che ho postato. Chiunque può decidere di usarlo oppure no. Qualsiasi ulteriore formula per la Fitness Function può essere implementata facilmente nel codice che ho postato. Se qualcuno ha suggerimenti, programmatore o meno, posso dare una mano ed inserirlo.

                  Buona giornata!

                  FS

                  Comment


                    #24
                    Originally posted by fsgi View Post
                    Punto 2: sul tuo modo di calcolare R^2 (coefficiente di determinazione, che dovrebbe essere semplicemente il quadrato del coeff. di correlazione), mi perdo completamente. Tu lo calcoli come la somma di tutti i valori di 100 * (equity_i - max_equity_i)/max_equity_i al quadrato, dove equity_i è il valore dell'equity ad un certo trade e max_equity_i è il valore più alto raggiunto dall'equity sino a quel momento. Il 100 penso sia per esprimere R^2 in percentuale, anzichè come valore tra 0 e 1...
                    Fabio, ti chiedevo prima, dove hai trovato le formule che io avrei scritto? Mi metti il link?
                    La vita non è un giro di prova, cogli l’attimo..
                    Realizzazione per Metatrader4 di trading system, indicatori, pattern grafici, Ottimizzazioni IS-OOS su Forex e CFD, Analisi di Portafoglio .

                    Comment


                      #25
                      Ciao Umberto,
                      scusa, ci siamo capiti male... pensavo fosse una "citazione della mia domanda"!

                      Le formule di R^2 non le ho prese da nessuna parte se non... dal tuo foglio Excel :03.bigsmile_80_anim


                      Per questo chiedevo a te di spiegarmi da dove venissero!!! :28.nerd_80_anim_gif

                      Comment


                        #26
                        Ok Fabio,
                        allora quelle formule con R^2 NON sono relative al coefficiente di determinazione , ma mi servono per calcolare l'Ulcer Index.

                        Al primo post del mio thread spiego tra i vari parametri anche l'Ulcer Index e faccio riferimento ad un link di soldionline.it dove viene spiegato nel dettaglio.


                        Di seguito una immagine di un mio file word che spiega la formula dell'Ulcer Index

                        ulcerIndex.png



                        La vita non è un giro di prova, cogli l’attimo..
                        Realizzazione per Metatrader4 di trading system, indicatori, pattern grafici, Ottimizzazioni IS-OOS su Forex e CFD, Analisi di Portafoglio .

                        Comment


                          #27
                          Carissimo Umberto,
                          Ti ringrazio molto della risposta. Capisco ora che la R di cui si parla qui non ha niente a che vedere con la correlazione, la determinazione ed altre misure statistiche che possono tornare altrimenti utili. Grazie del link, che mi ha anche stimolato a "guardare un po' in giro" e scoprire che l'Ulcer Index è stato inventato da Peter G. Martin nel 1987, come step intermedio nello sviluppo della Martin Ratio, da lui concepita come sostituto della Sharpe (vedi qui). Per quel che mi riguarda le cambierò il nome, nei miei sistemi, proprio per non creare confusione. C'è anche chi usa l'R quadro della regressione per valutare i sistemi, con l'idea che più lineare la curva dell'equity, tanto più facilmente resterà lineare anche OOS/nel futuro...

                          Usando le "nuove cose" di questa settimana (vedi miei post) ho passato un bel po' di tempo a fare esperimenti abbastanza sistematici sul modello che sto sviluppando ora.

                          Mi chiedevo se, nel forum intero (che sto ancora esplorando) ci fosse già un thread per discutere della "teoria e pratica" di come impostare una strategia di ottimizzazione "sensata". Non parlo del banale utilizzo di MT4 (o di qualsiasi altro tool), ma di come raggiungere dei risultati che possano aiutare il sistema a divenire profittevole in reale.

                          Per esempio, in questa indagine sistematica, ho visto come l'uso di alcune fitness functions provochino l'evoluzione di strategie con un range target/stop loss molto ampio. Altre funzioni favoriscono altissima %win (che io chiamo accuratezza) a scapito di reward/risk pietoso. Altre finess favoriscono il contrario...

                          Un'altra osservazione è che, in mano mia e per quanto valga/copra l'esperimento effettuato, sembra che una certa "garanzia" di sopravvivenza in out of sample (OOS) sia una buona "accuratezza" (%win) con un R/R decente. Tutto ciò mi sembra essenziale per la buona scelta di una fitness function soprattutto in vista di una WFA, altrimenti il rischio di lavorare per niente, e non ottenere alcun processo di ottimizzazione ripetibile nel futuro, è alto.

                          Infine, essendo il mio modello abbastanza complesso/modulare, includendo un timer, un segnale, e tecniche avanzate di trade management, intravedo la necessità/opportunità di procedere ad un'ottimizzazione "per gradi", o per area di funzionamento del sistema (ecco perché sono partito da un semplice SL/TP).

                          Forse sarebbe bello scambiarci esperienze, perché ad esempio val molto la pena di sapere se sia solo col mio sistema oppure un'esperienza generalizzata/generalizzabile che una buona accuratezza favorisca una robustezza OOS dei sistemi, o che una certa fitness faccia non solo al mio, ma a tutti i sistemi un "certo effetto"...

                          Ovviamente thread o non thread, sono MOLTO curioso (gli Inglesi direbbero "all ears") se, dall'alto della tua esperienza volessi già regalarmi "qualche dritta". Poi magari ne discutiamo con calma...

                          Grazie e buona serata.

                          Comment


                            #28
                            Ottime osservazioni Fabio.

                            Ho cercato a lungo delle fitness custom che nel processo di ottimizzazione (normale o genetica), mi permettessero di scegliere dei setting che poi superassero brillantemente e costantemente per ogni EA la fase OOS.

                            Non ne ho trovati, e la mia conclusione ad oggi è che non è tanto la funzione di fitness che fa la differenza, ma la logica dell'EA che deve riuscire ad individuare quelle dinamiche di mercato che si ripetono anche nel futuro.

                            Perciò oggi può bastarmi anche il solo Profit factor come variabile discriminante ed un numero sufficientemente elevato di trade (oltre i 100),
                            sapendo che è comunque la robustezza della logica che può rendere l'EA profittevole nel futuro.










                            La vita non è un giro di prova, cogli l’attimo..
                            Realizzazione per Metatrader4 di trading system, indicatori, pattern grafici, Ottimizzazioni IS-OOS su Forex e CFD, Analisi di Portafoglio .

                            Comment


                              #29
                              Ciao Umberto,

                              Grazie a te del "parere esperto".
                              1. Come fai dunque a fare una WFA? O testi a mano (ma se selezioni i set di parametri con una "supervisione esperta" non sei poi sicuro della "ripetibilità nel futuro") oppure devi impostare una fitness f.
                              2. Pensi che una discussione valga la pena?
                              3. Sulla "logica ripetibile" o disegniamo sistemi senza parametri (possibile, ma almeno in mano mia la profittabilità è indecente... Sicuramente conosci Daniel Fernandez e Asirikuy) oppure anche una scelta "ragionata" dei parametri è un'ottimizzazione, come dicono Pardo, Jaeckle, Stridsman e compagni... Per questo accennavo sopra a un processo "stepwise". Prima i parametri ed il segnale, poi il timer, poi le altre logiche... È ovvio che ci saranno delle "interazioni" che verranno perse lungo la strada...

                              Sono apertissimo a critiche e, se possibile, felice di essere smentito!

                              Comment


                                #30
                                Originally posted by fsgi View Post
                                1. Come fai dunque a fare una WFA? O testi a mano (ma se selezioni i set di parametri con una "supervisione esperta" non sei poi sicuro della "ripetibilità nel futuro") oppure devi impostare una fitness f.
                                2. Pensi che una discussione valga la pena?
                                Sulla WFA c'è già un thread aperto nel forum, dove ho detto la mia con molti dettagli:

                                Walk Forward Analysis
                                https://www.forexdream.net/forum/trad...rward-analysis



                                Originally posted by fsgi View Post
                                3. Sulla "logica ripetibile" o disegniamo sistemi senza parametri (possibile, ma almeno in mano mia la profittabilità è indecente... Sicuramente conosci Daniel Fernandez e Asirikuy) oppure anche una scelta "ragionata" dei parametri è un'ottimizzazione, come dicono Pardo, Jaeckle, Stridsman e compagni... Per questo accennavo sopra a un processo "stepwise". Prima i parametri ed il segnale, poi il timer, poi le altre logiche... È ovvio che ci saranno delle "interazioni" che verranno perse lungo la strada...
                                Sono stato abbonato ad Asirikuy di Daniel Fernandez per due anni dal 2011 al 2013: allora Daniel non credeva nella WFA ed ho avuto vari scambi email con lui per convincerlo della bontà, ma lui negava l'utilità.
                                Poi dal 2014 ha cambiato completamente rotta e si è buttato nella WFA con notevole sforzo statistico nel cercare variabili in grado di predire la profittabilità di un test buono su IIS che fosse buono anche su OOS, ma non ha trovato ancora nulla di pratico.

                                La vita non è un giro di prova, cogli l’attimo..
                                Realizzazione per Metatrader4 di trading system, indicatori, pattern grafici, Ottimizzazioni IS-OOS su Forex e CFD, Analisi di Portafoglio .

                                Comment

                                Working...
                                X