Backtesting un Moving Average Crossover in Python con pandas. In precedente articolo sulla ricerca Backtesting ambienti in Python con i panda abbiamo creato un ambiente di backtesting basata sulla ricerca orientata agli oggetti e testato su una strategia di previsione casuale In questo articolo andremo a fare uso del macchinari abbiamo introdotto per effettuare ricerche su una strategia vera e propria, vale a dire il Moving Average Crossover su AAPL. Moving media Crossover strategy. The Moving Average Crossover tecnica è una strategia momentum semplicistico estremamente noto si è spesso considerato l'esempio Ciao mondo per la negoziazione quantitativa. La strategia come indicato qui è si creano lungo solo due semplici separato in movimento filtri medi, con diversi periodi di lookback, di una particolare Segnali di serie storiche per l'acquisto di verifica del bene quando la media mobile lookback più breve supera la media più lookback movimento se il più a lungo media successivamente supera la media più breve, l'attività è venduta indietro la strategia funziona bene quando una serie di tempo entra in un periodo di forte tendenza e poi inverte lentamente il trend. For questo esempio, ho scelto di Apple, Inc. AAPL come le serie storiche, con una breve lookback di 100 giorni e una lunga lookback di 400 giorni questo è l'esempio fornito dalla zipline biblioteca trading algoritmico Quindi se vogliamo implementare la nostra backtester dobbiamo garantire che corrisponda i risultati in zipline, come mezzo di base di validation. Make assicurarsi di seguire il tutorial precedente qui che descrive come la gerarchia degli oggetti iniziale per l'backtester è costruito, in caso contrario il codice qui sotto non funziona per questa particolare applicazione ho usato la seguente implementazione libraries. The del richiede dal precedente esercitazione il primo passo è quello di importare i moduli e objects. As necessarie nel precedente tutorial andremo a creare una sottoclasse della classe astratta di base strategia per la produzione di MovingAverageCrossStrategy che contiene tutti i dettagli su come generare i segnali quando le medie mobili di AAPL attraversare ogni oggetto other. The richiede un shortwindow e un longwindow su cui operare i valori sono stati impostati, rispettivamente, ai valori di default di 100 giorni e 400 giorni, che sono gli stessi parametri utilizzati nell'esempio principale del zipline. The medie mobili vengono creati utilizzando il panda funzione rollingmean sul bar nelle vicinanze prezzo del titolo AAPL chiusura volta che l'individuo medie mobili sono stati costruiti, la serie segnale viene generato impostando la Colum uguale a 1 0 quando la media breve in movimento è superiore alla media a lungo in movimento, o 0 0 altrimenti da questo le posizioni di ordini possono essere generati per rappresentare il commercio signals. The MarketOnClosePortfolio è una sottoclasse di portafoglio che si trova in è quasi identica alla realizzazione descritto nel tutorial precedente, con l'eccezione che le operazioni sono ora effettuate in un Close-a-Chiudere base, piuttosto che una base open-to-Open per i dettagli su come l'oggetto del portafoglio è definito, si veda il precedente tutorial io ho lasciato il codice per completezza e per mantenere questo tutorial self-contained. Now che il sono state definite le classi MovingAverageCrossStrategy e MarketOnClosePortfolio, una funzione principale sarà chiamata a legare tutte le funzionalità insieme Inoltre le prestazioni della strategia sarà esaminata tramite un terreno di download degli oggetti equità curve. The panda DataReader OHLCV prezzi di AAPL magazzino per il periodo 1 gennaio 1990 al 1 Gennaio, 2002, momento in cui i segnali dataframe è stato creato per generare i segnali di lunga solo successivamente il portafoglio è generato con una base di 100.000 dollari di capitale iniziale e il rendimento sono calcolate sulla fase finale equità curve. The è quello di utilizzare matplotlib per tracciare un diagramma a due cifre di entrambi i prezzi AAPL, sovrapposto con le medie mobili e comprare vendere di segnali, così come la curva di equità con lo stesso buy vendere di segnali il codice di tracciamento è preso e modificato dal esempio di implementazione zipline. il output grafico del codice è il seguente ho fatto uso del comando incolla IPython di mettere questo direttamente nella console IPython mentre in Ubuntu, in modo che l'output grafico è rimasto in vista i upticks rosa rappresentano l'acquisto del magazzino, mentre i neri downticks rappresentano venderlo back. AAPL Moving performance media Crossover dal 1990-01-01 al 2002-01-01.As si può vedere la strategia perde denaro nel corso del periodo, con cinque di andata e ritorno dalle compravendite Questo non è sorprendente dato il comportamento di AAPL nel corso del periodo, che era una leggera tendenza al ribasso, seguito da un significativo aumento a partire dal 1998 il periodo lookback dei mobili segnali media è piuttosto grande e questo influenzato il profitto del commercio finale, che altrimenti potrebbe aver fatto la strategia proficua. Negli articoli successivi creeremo un mezzo più sofisticati di analisi delle prestazioni, oltre a descrivere come ottimizzare i periodi lookback del singolo movimento signals. Just media Introduzione a quantitativa Trading. Analysis di Moving Average Crossover strategia Backtest Restituisce Utilizzando Pandas. In questo post ho pensato i d approfittare dei risultati che abbiamo ottenuto dal movimento backtest media strategia di crossover nell'ultimo post può essere trovato qui, e trascorrere un po 'di tempo a scavare un po' più in profondità nella curva di equità e produrre un po 'di analisi per quanto riguarda alcuni indicatori chiave di performance e un po 'di dati generalmente si spera interessante per completezza, sotto è tutto il codice necessario per produrre i risultati strategia backtest per la nostra analisi imminente, insieme a tracciare la curva di equità solo per assicurarsi che abbiamo eseguito in modo corretto. importazione relativi moduli di importazione panda come NumPy pd importazione come NP dai dati pandasdatareader di importazione dalla importazione di matematica importazione sqrt come dati PLT scaricare in dataframe e creano medie mobili colonne SP500 yahoo, avviare 1 1 2000 SP500 42d SP500 252D creare colonna con media mobile diffusione differenziale SP500 42-252 SP500 42d - SP500 252D set desiderato certo numero di punti come soglia per la differenza diffusione e creare colonna contenente strategia Stance X 50 SP500 Stance GT X, 1, 0 SP500 Stance lt X, -1, SP500 Stance creare colonne contenenti registro mercato giornaliero i rendimenti e la strategia registro giornaliero restituisce SP500 mercato Restituisce SP500 strategia ritorni SP500 mercato impostato la strategia di partenza patrimonio netto a 1, cioè 100 e generare equità curva SP500 equity Strategy 1 spettacolo grafico della curva di equità analisi SP500 strategy. The ho progettato è come sezione Charting follows.1 creeremo tabelle per la seguente serie di rotolamento 1 anno volatilità annualizzata b rotolamento 1 anno colpito rapporto c volventi 1 anno i rendimenti d distribuzione ritorno giornaliero Std ritorno e histogram. Our primo passo è quello di creare un dataframe fresca che contiene solo i dati necessari , che è la curva strategia azionaria, insieme con la strategia di tutti i giorni ritorna Questo viene fatto come follows. strat Equity. Now dobbiamo costruire la dataframe di includere tutti i dati grezzi che avremo bisogno di calcolare la serie delineato sopra, che abbiamo desiderare di tracciare il codice per questo è. creare colonne che indica se ogni ritorno giorni è stato positivo, negativo o appartamento strat vittoria gt 0, 1,0 strat perdita lt 0, 1,0 strat zero 0, 1,0 creare colonne con una somma cumulativa di ciascuna delle colonne creato in precedenza strat wincum gt 0, strat losscum lt 0, strat scratchcum 0, creare una colonna che contiene una somma parziale dei giorni di negoziazione - useremo questo per creare le nostre percentuali dopo giorni strat strat wincum strat losscum strat scratchcum creano colonne che mostra il 252 giorno rollimg somma della vincita perdere giorni piatte strat rollwin strat rollloss strat rollscratch creare colonne con hit ratio e il rapporto di perdita di dati strat hitratio strat wincum strat wincum strat losscum strat lossratio 1 - Strat hitratio creare colonne con rotolamento hit ratio 252 giorni e la perdita di strat dati rapporto rollhitratio strat rolllossratio 1 - Strat rollhitratio creare colonna con rolling 12 mesi strat ritorno roll12mret creare colonna con vittoria media, perdita media e media strat dati ritorno quotidiano averagewin strategia strat strat strategia gt strat averageloss strat strategia strat strategia lt strat averagedailyret creare colonna con rotolamento 1 anno quotidiano deviazione standard e rotolamento 1 anno deviazione standard annualizzata strat roll12mstdev strat roll12mannualisedvol strat roll12mstdev sqrt 252.Ok grande, ora abbiamo tutti i nostri dati pronti per tracciare le varie classifiche di cui abbiamo parlato above. We può fare questo nel modo seguente. 10 di mesi redditizio AMP Mesi non redditizie positivemonths len Strategia STRATM STRATM Strategia gt 0 negativemonths len STRATM strategia STRATM strategia lt 0 flatmonths len STRATM strategia STRATM strategia 0 percpositivemonths positivemonths positivemonths negativemonths flatmonths percnegativemonths negativemonths positivemonths negativemonths flatmonths stampa di mesi redditizio, str percpositivemonths rotonde , 2 100 stampa di mesi non redditizie, percnegativemonths rotonde str, 2 100. dei Mesi redditizio 49 0 di mesi non redditizie 45 0. 11 Numero di mesi redditizio numero di mesi non redditizie profunprofmonths positivemonths negativemonths stampa numero di mesi redditizio Numero di Mesi non redditizio, profunprofmonths rotonde, 2.Numero di mesi redditizia numero di mesi non redditizie 1 08. 12 avmonthlypos media mensile di profitto STRATM strategia STRATM strategia gt stampa medio mensile di profitto, avmonthlypos rotonde str, 4 100 13 media Perdita mensile avmonthlyneg STRATM strategia STRATM strategia lt stampa media Perdita mensile, str avmonthlyneg rotondo 100,2 14 media mensile profitto medio mensile posnegmonth Perdita abs avmonthlypos avmonthlyneg stampare perdita media mensile profitto medio mensile, posnegmonth rotondo, 4.Average mensile Profit 3 56 media Perdita mensile -3 33 media mensile Utile media Perdita mensile 1 0683.And finalmente solo per finire e usare un po 'più funzionalità Panda dataframe ho intenzione di creare una tabella di returns. The mensile primo passo è quello di creare una tabella pivot e ricampionare per creare ciò che è noto come un colonne object. monthlytable month. So che siamo in grado di manipolarlo un po 'mor facilmente, ho intenzione di convertire questo oggetto di nuovo in un dataframe utilizzando il function. We può ora mettere gli ultimi ritocchi sul convertendo l'indice date per mostrare solo la anno piuttosto che la data completa, e quindi sostituire anche le intestazioni mese colonna attualmente in formato numerico con il corretto MMM format. First, dobbiamo abbandonare rapidamente uno dei livelli di indice di colonna della tabella che è attualmente la parola strategia questo ci lascerà con una tabella con un solo indice di colonna livello corrispondente al mese rappresentazioni interi. Eliminare l'indice della colonna livello superiore che mostra curently come Strategy. Visually tabella cambierà from. Now non ci resta che cambiare l'indice di data per mostrare in un formato AAAA annuale e le altre intestazioni delle colonne per mostrare formato mensile MMM. sostituire piena data nella colonna indice con solo l'anno correspnding Sostituire intestazioni di colonna intero con il formato MMM Jan, Feb, Mar, aprile, maggio, giugno, luglio, agosto, settembre, ottobre, novembre, Dec. We ora sono lasciati con una rendimenti mensili tavolo che assomiglia this. Brilliant Beh credo che s abbastanza per ora come questo post sta iniziando a diventare un po long. I po 'll avere un pensare nei prossimi giorni su un possibile argomento per il mio prossimo post e mettersi al lavoro su that. Thanks per seguire along. It s giusto per le operazioni di colonna share. Pandas operazioni matematiche di base e lo spostamento averages. In questo panda con Python video tutorial con codice di esempio, di coprire alcune delle operazioni rapide e di base che possiamo eseguire la nostra dati Diciamo che avete un set di dati che si desidera aggiungere una media mobile a, o forse si vuole fare alcuni calcoli matematici basati su un paio di bit di dati in altre colonne, aggiungendo il risultato di una nuova colonna Let s vedere come possiamo fare that. All di cui sopra deve essere inteso, dal momento che s stato coperto già fino a questo point. Now, let s fare una nuova colonna, definendolo HL, dove i dati nella colonna è il risultato della High prezzo meno il basso price. Here, proprio come si farebbe con un dizionario, si definisce un nuovo oggetto nei nostri dati Panda, chiamandolo HL Da lì, diciamo il valore di questo oggetto è HL - non è ancora stato allevato, ma questo è in realtà molto interessante il fatto che siamo in grado di fare questo, ma potrebbe anche essere confusing. We potrebbe anche dire df df HL alto - basso df, ma, dal momento che è basata su oggetti così pesantemente panda, abbiamo nuovamente in grado di fare riferimento anche puramente come un oggetto E 's fino a voi come si desidera farlo preferisco trattarlo come un oggetto, dal momento che s quello che is. After noi ve eseguire questo, possiamo vedere stampando testa, che hai una bella nuova colonna che contiene il nostro nuovo data. That s pulito, ma per quanto riguarda riferimento ai dati precedenti in altre colonne possiamo farlo voglio fare una media mobile sicuro che possiamo medie mobili sono in realtà costruiti in panda, chiamato rollingmean. Above, ci ho definito ancora un'altra colonna, tanto come possiamo un dizionario, e ha detto che la colonna è pari al del prezzo di chiudere il nostro secondo parametro qui è il lasso di tempo per questa media mobile Poi, si stampa solo una fetta dei dati, dall'elemento 200 al 210 ° non possiamo fare qui Potremmo, ma i dati per il 100MA wouldn t essere calcolato fino a quando abbiamo avuto 100 pezzi di dati per la funzione built-in interessante calculate. Another con Panda è diff. With la funzione diff, abbiamo ri grado per calcolare la differenza, o passare dal valore precedente, per un column. So, ci sono alcune operazioni di base e una introduzione di iniziare a qualche manipolazione dei dati e l'analisi con Panda penso si ri probabilmente vedendo ormai come impressionante questo modulo è.
No comments:
Post a Comment