{"id":11889,"date":"2022-12-29T00:00:00","date_gmt":"2022-12-28T23:00:00","guid":{"rendered":"https:\/\/ungeracademy.com\/it\/blog\/mito-o-realta-possiamo-creare-strategie-di-trading-efficaci-con-solo-3-righe-di-codice"},"modified":"2022-12-29T00:00:00","modified_gmt":"2022-12-28T23:00:00","slug":"mito-o-realta-possiamo-creare-strategie-di-trading-efficaci-con-solo-3-righe-di-codice","status":"publish","type":"post","link":"https:\/\/ungeracademy.com\/it\/blog\/mito-o-realta-possiamo-creare-strategie-di-trading-efficaci-con-solo-3-righe-di-codice","title":{"rendered":"Mito o realt\u00e0? Possiamo creare strategie di Trading efficaci con solo 3 righe di codice?"},"content":{"rendered":"

Introduzione<\/strong><\/p>\n

Buongiorno a tutti e ben ritrovati in questo nuovo video. Poche righe di codice non fanno certo una strategia tradabile.<\/p>\n

Spesso si sente dire infatti che ne servono molte, ma molte di pi\u00f9, svariate decine se non centinaia, per impostare gli ingressi, per tutte le condizioni al contorno, senza contare quelle per le uscite dalla posizione.<\/p>\n

Ma siamo proprio sicuri? Io sono Giuseppe Bucci, uno dei coach alla Unger Academy, e oggi vedremo come sfatare un mito abbastanza diffuso.<\/p>\n

Parliamo della lunghezza del codice necessaria per tradare live le nostre strategie.<\/p>\n

Cercheremo di capire se i nostri codici possono funzionare bene anche se fatti da pochissime righe.<\/p>\n

E lo faremo analizzando una strategia reale che \u00e8 attualmente live da ben cinque anni.<\/p>\n

La lunghezza del codice? Tre righe! Che tra poco scopriremo insieme.<\/p>\n

L’overfitting dei nostri sistemi<\/strong><\/p>\n

La questione di fondo \u00e8: avere un maggior numero di condizioni ci porta ad avere risultati migliori?<\/p>\n

Facciamo un piccolo passo indietro e introduciamo il concetto di overfitting, questo mostro invisibile che, ahim\u00e8, affligge tutte le nostre strategie e dal quale dobbiamo cercare di star lontani per quanto possibile.<\/p>\n

Ma che cos’\u00e8 l’overfitting e come pu\u00f2 il nostro codice tirarlo in ballo?<\/p>\n

Farei con voi un semplice esempio grafico che ci pu\u00f2 aiutare a capire meglio.<\/p>\n

Immaginiamo di voler raccogliere con una singola linea quante pi\u00f9 note verdi possibile.<\/p>\n

Qui, in questo primo esempio, abbiamo una linea retta e il risultato non \u00e8 certo il migliore.<\/p>\n

Andiamo ad inserire allora un maggior numero di condizioni, ossia le curve di questa linea, per poter massimizzare il nostro risultato.<\/p>\n

Beh, ma allora procediamo in questa direzione e introduciamo tante condizioni quante sono necessarie per portare a casa tutte le note verdi che sono sul nostro tavolo.<\/p>\n

Ecco, in quest’ultimo caso abbiamo palesemente introdotto dell’overfitting.<\/p>\n

Uscendo da questo esempio, per tornare ai nostri trading system, potremmo dire che quando inseriamo un numero eccessivo di condizioni stiamo di fatto modellando troppo la nostra strategia.<\/p>\n

E perch\u00e9 lo facciamo? Perch\u00e9 vogliamo che vada a pescare nello storico quasi tutti i trade vincenti, lasciando da parte gli altri.<\/p>\n

Questa pratica per\u00f2, nel trading reale, porta il pi\u00f9 delle volte a perdere denaro, proprio perch\u00e9 il sistema non conosce ancora i dati futuri.<\/p>\n

Volendo trovare il giusto trade off tra numero di condizioni e performance del sistema, potremmo dire che l’ottimo lo si ottiene con un numero limitato di condizioni oltre il quale le performance inevitabilmente degradano.<\/p>\n

Quando parlo di performance intendo quelle reali di un sistema live, non mi riferisco alle metriche in fase di test.<\/p>\n

Ok, ma come si fa a sapere quale sia il numero ottimo di condizioni?<\/p>\n

Non c’\u00e8 una formula magica. Il numero dipende da tanti fattori.<\/p>\n

Ma si tratta comunque di trovare il giusto equilibrio tra numero di condizioni e risultati e questo \u00e8 qualcosa che si affina col tempo, man mano che si sviluppano le strategie.<\/p>\n

Vi avevo anticipato che avremmo visto una semplice strategia fatta da pochissime righe e che ha comunque permesso di generare buoni profitti da quando \u00e8 a mercato.<\/p>\n

Un trigger di partenza sul Feeder Cattle<\/strong><\/p>\n

Andiamola a vederla da vicino.<\/p>\n

Spostiamoci sulla nostra piattaforma MultiCharts e carichiamo il grafico continuo del Feeder Cattle a 5 minuti con dati dal 2010.<\/p>\n

Dunque parto col dire che il Feeder Cattle \u00e8 un mercato un po’ particolare.<\/p>\n

Particolare perch\u00e9 innanzitutto la session \u00e8 abbastanza ridotta: va dalle 08:30 del mattino all’1:05 del pomeriggio orario dell’Exchange, quindi dura poco pi\u00f9 di 4 ore e questo pu\u00f2 causare dei gap overnight.<\/p>\n

Inoltre, in passato non \u00e8 sempre stata esattamente la stessa.<\/p>\n

Altro aspetto da considerare \u00e8 il fatto che l’Exchange fissi dei prezzi limite di ipercomprato o ipervenduto oltre i quali non \u00e8 pi\u00f9 possibile operare durante la sessione.<\/p>\n

Quindi talvolta ci potremmo trovare nell’impossibilit\u00e0 di entrare – fin qui poco male – o di uscire dalla posizione.<\/p>\n

Di contro per\u00f2 il Feeder Cattle mostra alcuni vantaggi, tra cui la possibilit\u00e0 di poterlo tradare con bassi capitali, prevedendo stop loss che in intraday possono anche essere di soli 400$-500$.<\/p>\n

Partiamo da un semplicissimo trigger composto da due righe.<\/p>\n

Dunque con la prima riga noi andremo a comprare con ordini stop al massimo della settimana corrente se nella giornata attuale non abbiamo ancora preso posizione.<\/p>\n

Viceversa al minimo della settimana corrente andremo a vendere sempre con ordini stop.<\/p>\n

Andiamo ad applicare il nostro segnale, o meglio il nostro trigger, sul chart e andiamo a verificarne le metriche.<\/p>\n

Innanzitutto, vediamo che la strategia, se vogliamo chiamarla cos\u00ec, ha un guadagno significativo di 168.000$, ben distribuito tra long short.<\/p>\n

Ha un massimo drawdown di 21.000$.<\/p>\n

La curva \u00e8 sicuramente gradevole e sia quella long che quella short mostrano una buona pendenza.<\/p>\n

L’average trade \u00e8 di 160$, anche qui ben ripartito tra long e short.<\/p>\n

Andando poi a vedere l’annual, ci rendiamo conto che al netto di quest’anno, la strategia ha performato davvero bene.<\/p>\n

Guardando il nostro codice per\u00f2, potrebbe venirci un dubbio:<\/p>\n

noi entriamo con ordini stop al massimo o minimo della settimana corrente, ma non abbiamo applicato nessuna finestra temporale.<\/p>\n

Quindi, all’inizio della settimana, massimo e minimo potrebbero non essersi ancora distanziati sufficientemente.<\/p>\n

Andiamolo a vedere sul chart.<\/p>\n

Questo \u00e8 un luned\u00ec mattina e come vediamo l’ingresso avviene dopo pochissime barre dall’avvio della sessione.<\/p>\n

Potremmo allora fare una prova, andare a modificare il nostro codice inserendo una nuova condizione.<\/p>\n

Andremo quindi ad escludere il primo giorno della settimana, il luned\u00ec, dalla nostra operativit\u00e0.<\/p>\n

Andiamo a caricare questo nuovo segnale sul nostro grafico e vediamo che cosa succede.<\/p>\n

Dunque, il net profit \u00e8 sceso, ma del resto abbiamo escluso un giorno dalla nostra operativit\u00e0 e quindi \u00e8 abbastanza naturale.<\/p>\n

L’equity non \u00e8 bella come prima, ma \u00e8 comunque crescente sia lato long che lato short.<\/p>\n

L’average trade \u00e8 rimasto pressoch\u00e9 inalterato.<\/p>\n

Quindi andiamo ad aggiungere questa nuova condizione?<\/p>\n

Direi di no, perch\u00e9 il nostro scopo \u00e8 quello di creare una strategia profittevole con un numero minimo di condizioni.<\/p>\n

Ci \u00e8 bastato sapere che escludere il luned\u00ec dall’operativit\u00e0 non ha cambiato sostanzialmente le nostre metriche.<\/p>\n

L’applicazione dello stoploss<\/strong><\/p>\n

Abbiamo per\u00f2 un trigger senza nessuno stop loss.<\/p>\n

Non lo abbiamo inserito volutamente perch\u00e9 volevamo capire come il nostro strumento rispondesse a questo semplice segnale col numero minore possibile di condizioni.<\/p>\n

Dal MAE per\u00f2 notiamo che, con un drawdown superiore ai 1.000$, abbiamo tantissimi trade perdenti.<\/p>\n

Questo ci suggerisce quindi di applicare uno stop nell’intorno di 1.000$.<\/p>\n

Andiamo quindi sul nostro codice e inseriamo una semplice riga che chiuda tutti i nostri trade dopo una perdita di 1.000$.<\/p>\n

Carichiamo questo nuovo segnale sulla nostra piattaforma e andiamo a vedere le nuove metriche.<\/p>\n

Beh, il Net profit \u00e8 salito a 180.000$.<\/p>\n

Il massimo drawdown \u00e8 sceso a 16.000$.<\/p>\n

Vediamo un equity crescente in modo regolare sia dalla parte long che dalla parte short.<\/p>\n

Abbiamo un average trade che si \u00e8 mantenuto a livello di circa 165$.<\/p>\n

Quindi possiamo dire di aver regolarizzato un po’ la nostra strategia e come vediamo anche dall’annual ne abbiamo tratto beneficio.<\/p>\n

**E’ solo un trigger o \u00e8 gi\u00e0 una strategia? **<\/p>\n

Bene ragazzi, ma questo \u00e8 un trigger o \u00e8 gi\u00e0 una strategia?<\/p>\n

Inizia a venirci qualche dubbio.<\/p>\n

Torniamo sulle metriche. Vediamo come il massimo drawdown sia inferiore al 10% del Net Profit.<\/p>\n

Lo vediamo anche dall’equity che \u00e8 molto regolare.<\/p>\n

L’average trade per\u00f2 ancora non \u00e8 sufficientemente capiente: 165$ per questo strumento non ci mettono al riparo dallo slippage che talvolta accusa.<\/p>\n

Dobbiamo quindi inevitabilmente introdurre un’altra condizione per cercare di migliorare il sistema.<\/p>\n

Potremmo per esempio introdurre un pattern. Io ho lanciato un’ottimizzazione che voglio mostrarvi e ho ordinato qui i risultati per Net Profit decrescente.<\/p>\n

Ricordiamoci che siamo su una commodity: dobbiamo quindi cercare delle condizioni che abbiano una specularit\u00e0 tra long e short.<\/p>\n

Siamo partiti dalla condizione che vi mostro adesso in assenza di pattern, e qui vediamo le metriche che gi\u00e0 conosciamo.<\/p>\n

Notiamo che il pattern che noi abbiamo chiamato "-13" porti s\u00ec ad un piccolo incremento del massimo drawdown, ma certamente faccia fare un balzo non indifferente all’Average trade.<\/p>\n

Quindi questo pattern ci piace.<\/p>\n

Peraltro il suo parente stretto, chiamiamolo, il "-14", porta un average trade molto simile a quello.<\/p>\n

Introduciamo allora questo pattern, ma di cosa si tratta?<\/p>\n

Andiamo sul nostro codice e vediamolo subito.<\/p>\n

Ecco, il codice cambierebbe cos\u00ec.<\/p>\n

Di fatto abbiamo inserito una condizione di downtrend lato long e di uptrend lato short.<\/p>\n

Andremo quindi a comprare sul massimo della settimana corrente se ieri c’\u00e8 stata una Close minore del giorno prima e a vendere al minimo della settimana corrente, se ieri c’\u00e8 stata una Close superiore a quella del giorno prima.<\/p>\n

La strategia ai raggi X<\/strong><\/p>\n

Questo \u00e8 il codice che abbiamo ottenuto. Semplicissimo.<\/p>\n

Ma non per questo dobbiamo fargli sconti, anzi dobbiamo analizzarlo letteralmente i raggi X per capire se c’\u00e8 qualcosa che non ci convince.<\/p>\n

Torniamo sulle metriche: il Net Profit \u00e8 di livello: 194.000$ ben ripartiti.<\/p>\n

Il massimo drawdown \u00e8 inferiore al suo 10% e questo ci piace.<\/p>\n

Possiamo vederlo anche dall’equity che ci appare molto regolare sia lato che lato short.<\/p>\n

Voglio peraltro farvi vedere come la strategia abbia proseguito la sua corsa dopo essere andata live pi\u00f9 o meno da dove vi sto mostrando adesso.<\/p>\n

Il Buy&Hold non ci indica un bias di fondo, quindi non possiamo pensare che la strategia sia stata aiutata dallo strumento stesso.<\/p>\n

L’average trade \u00e8 ottimo: 310$ ci mettono al riparo sicuramente da slippage e da commissioni.<\/p>\n

Nell’annual vediamo inoltre che la strategia ha performato bene in tutto l’arco storico e anche il 2022 ha risentito positivamente dell’introduzione dell’ultimo pattern.<\/p>\n

Opera circa una volta a settimana e l’average trade per anno ci indica che, a partire da quando \u00e8 stata messa live, quindi dal 2018, ha mantenuto decisamente un buon ruolino di marcia.<\/p>\n

Andiamo a vedere per\u00f2 alcune metriche che di solito guardiamo meno.<\/p>\n

Dunque, dalla time analysis possiamo vedere che la strategia resti a mercato per circa l’80% del tempo.<\/p>\n

La durata media dei trade la possiamo vedere qui come numero medio di barre per trade, direi circa 20 ore, quindi una settimana, in linea col trigger che abbiamo utilizzato all’inizio.<\/p>\n

Personalmente io vado a vedere anche i Total trades e come vediamo sono equamente distribuiti in tutto l’arco storico, non sono addensati in qualche zona in particolare e questo mi piace.<\/p>\n

Andando sul MAE per\u00f2 notiamo che a destra del massimo drawdown di 1.000$ ci sono dei trade perdenti.<\/p>\n

Ma come \u00e8 possibile? Noi avevamo impostato uno stop.<\/p>\n

La ragione sono i gap overnight.<\/p>\n

Come vediamo questo primo trade si \u00e8 chiuso in stop correttamente, mentre questo secondo si \u00e8 chiuso all’avvio della sessione successiva, ma con un valore di perdita superiore allo stop loss che avevamo impostato.<\/p>\n

**Aggiungere altre condizioni? **<\/p>\n

Possiamo introdurre delle nuove condizioni per migliorare il sistema?<\/p>\n

Potremmo inserire per esempio una time window, ma la session \u00e8 gi\u00e0 molto stretta di suo.<\/p>\n

Al limite potremmo escludere le prime e ultime due barre di giornata per evitare di operare proprio a ridosso dei cambi di sessione.<\/p>\n

Potremmo anche inserire un take profit o altri pattern, ma cos\u00ec facendo correremo due rischi.<\/p>\n

Innanzitutto aumenteremo il rischio di overfitting del sistema e questo non ci piace.<\/p>\n

Inoltre perderemmo anche cinque anni di performance out of sample che ci hanno detto molto su come si comporti la strategia una volta messa live.<\/p>\n

Conclusione<\/strong><\/p>\n

Decidiamo allora di tenerla cos\u00ec.<\/p>\n

Il nostro lavoro \u00e8 terminato e possiamo ufficialmente dire di aver creato una strategia composta da solamente tre righe.<\/p>\n

Questa ha funzionato bene negli ultimi cinque anni, dando ottimi risultati.<\/p>\n

Il bassissimo numero di condizioni peraltro ci lascia ragionevolmente confidenti che una strategia cos\u00ec quasi non conosca l’overfitting.<\/p>\n

Quindi, per rispondere alla domanda dalla quale eravamo partiti, cio\u00e8 un maggior numero di condizioni ci pu\u00f2 portare a risultati migliori?<\/p>\n

Quello che abbiamo visto sembra dirci il contrario.<\/p>\n

Questo non significa che una strategia con molte condizioni non possa funzionare una volta messa live, n\u00e9 significa certamente che tutte le nostre strategie debbano per forza essere ridotte a pochissime righe,<\/p>\n

ma, diciamo, che un sistema con tanti vincoli sar\u00e0 meno robusto e potr\u00e0 mostrare performance meno in linea con i nostri sviluppi.<\/p>\n

Bene ragazzi, abbiamo quindi visto come sia possibile sviluppare strategie profittevoli anche con pochissime righe di codice e questo ha per cos\u00ec dire sfatato il mito della complessit\u00e0 a tutti i costi.<\/p>\n

Se tra voi c’\u00e8 qualcuno interessato al mondo del trading sistematico, vi consiglio di cliccare link in descrizione.<\/p>\n

Da l\u00ec potrete vedere un video di Andrea Unger oppure ottenere il nostro libro best seller coprendo solo le spese di spedizione.<\/p>\n

Potrete inoltre prenotare una call gratuita con un membro del nostro team.<\/p>\n

Se il video vi \u00e8 piaciuto lasciate un bel like, iscrivetevi al canale e cliccate sulla campanella cos\u00ec resterete sempre aggiornati.<\/p>\n

Grazie dell’ascolto e alla prossima!<\/p>\n","protected":false},"excerpt":{"rendered":"

Introduzione Buongiorno a tutti e ben ritrovati in questo nuovo video. Poche righe di codice non fanno certo una strategia […]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"site-sidebar-layout":"default","site-content-layout":"","ast-site-content-layout":"default","site-content-style":"default","site-sidebar-style":"default","ast-global-header-display":"","ast-banner-title-visibility":"","ast-main-header-display":"","ast-hfb-above-header-display":"","ast-hfb-below-header-display":"","ast-hfb-mobile-header-display":"","site-post-title":"","ast-breadcrumbs-content":"","ast-featured-img":"","footer-sml-layout":"","theme-transparent-header-meta":"","adv-header-id-meta":"","stick-header-meta":"","header-above-stick-meta":"","header-main-stick-meta":"","header-below-stick-meta":"","astra-migrate-meta-layouts":"default","ast-page-background-enabled":"default","ast-page-background-meta":{"desktop":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"ast-content-background-meta":{"desktop":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"footnotes":""},"categories":[57],"tags":[69],"class_list":["post-11889","post","type-post","status-publish","format-standard","hentry","category-blog","tag-tecnici"],"acf":[],"_links":{"self":[{"href":"https:\/\/ungeracademy.com\/it\/wp-json\/wp\/v2\/posts\/11889","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/ungeracademy.com\/it\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/ungeracademy.com\/it\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/ungeracademy.com\/it\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/ungeracademy.com\/it\/wp-json\/wp\/v2\/comments?post=11889"}],"version-history":[{"count":0,"href":"https:\/\/ungeracademy.com\/it\/wp-json\/wp\/v2\/posts\/11889\/revisions"}],"wp:attachment":[{"href":"https:\/\/ungeracademy.com\/it\/wp-json\/wp\/v2\/media?parent=11889"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/ungeracademy.com\/it\/wp-json\/wp\/v2\/categories?post=11889"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/ungeracademy.com\/it\/wp-json\/wp\/v2\/tags?post=11889"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}