Sunday, 24 September 2017

Medio Python Panda Esponenziale Movimento


Backtesting un Moving Average Crossover in Python con i panda nel 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 della macchina abbiamo introdotto per effettuare ricerche su una strategia vera e propria, vale a dire il Moving Average Crossover su AAPL. Moving Average Crossover Strategia The Moving Average Crossover tecnica è una strategia estremamente noto slancio semplicistico. Si è spesso considerato l'esempio Ciao Mondo per la negoziazione quantitativa. La strategia, come indicato qui è long-only. vengono creati due semplici separato in movimento filtri medi, con diversi periodi di lookback, di una particolare serie di tempo. I segnali di acquisto del bene si verificano quando la media mobile lookback più breve supera la più lookback media mobile. Se la media più successivamente supera la media più breve, il bene viene venduto indietro. La strategia funziona bene quando una serie di tempo entra in un periodo di forte tendenza e poi inverte lentamente la tendenza. Per 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 libreria trading algoritmico zipline. Quindi se vogliamo implementare la nostra backtester dobbiamo garantire che corrisponda i risultati in zipline, come mezzo di base della convalida. Attuazione 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 le seguenti librerie: L'attuazione di macross. py richiede backtest. py dal tutorial precedente. Il primo passo è quello di importare i moduli e gli oggetti necessari: Come nel precedente tutorial andremo a creare una sottoclasse della classe di base astratta strategia per produrre MovingAverageCrossStrategy. che contiene tutti i dettagli su come generare i segnali quando le medie mobili di AAPL attraversare vicenda. L'oggetto richiede una shortwindow e longwindow su cui operare. I valori sono stati impostati per default di 100 giorni e 400 giorni, rispettivamente, che sono gli stessi parametri utilizzati nell'esempio principale della zipline. Le medie mobili sono creati usando i panda funzione rollingmean sul prezzo di chiusura barsClose del titolo AAPL. Una volta che i singoli medie mobili sono stati costruiti, la serie segnale viene generato impostando il colum pari a 1,0 quando la media mobile corta è maggiore della media a lungo in movimento o 0.0 altrimenti. Da questo gli ordini posizioni possono essere generati per rappresentare segnali di trading. Il MarketOnClosePortfolio è una sottoclasse di portafoglio. che si trova in backtest. py. È quasi identica alla realizzazione descritta nel tutorial precedente, con l'eccezione che le operazioni sono ora effettuate su base Close-to-Close, piuttosto che una base Open-to-Open. Per i dettagli su come l'oggetto del portafoglio è definito, vedere il tutorial precedente. Ive ha lasciato il codice per completezza e per mantenere questo tutorial autosufficiente: Ora che 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 grafico della curva di equità. I download degli oggetti panda DataReader OHLCV prezzi di AAPL magazzino per il periodo 1 gennaio 1990 al 1 Gennaio 2002, a quel punto il dataframe segnali è stato creato per generare i segnali long-only. Successivamente il portafoglio è generato con una base di 100.000 dollari di capitale iniziale e il rendimento sono calcolati sulla curva di equità. Il passo finale è quello di utilizzare matplotlib per tracciare un diagramma a due cifre di entrambi i prezzi AAPL, sovrapposto con le medie mobili e segnali buysell, così come la curva di equità con gli stessi segnali buysell. Il codice tracciato è preso (e modificato) dalla esempio di implementazione zipline. L'uscita grafica 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 downticks neri rappresentano la vendita indietro: Come 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 del 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 redditizia. Negli articoli successivi creeremo un mezzo più sofisticati di analisi delle prestazioni, oltre a descrivere come ottimizzare i periodi lookback del singolo movimento segnali medi. Appena iniziato con strumenti quantitativi TradingComputational Analogamente, dataframe ha un metodo per calcolare COV covarianze a coppie tra la serie nella dataframe, escludendo anche i valori NAnull. Supponendo che i dati mancanti sono mancanti in modo casuale questo si traduce in una stima per la matrice di covarianza che è imparziale. Tuttavia, per molte applicazioni questa stima non può essere accettabile, perché la matrice di covarianza stimato non è garantito per essere positivo semi-definita. Ciò potrebbe portare a correlazioni stimate aventi valori assoluti che sono maggiori di uno, Andor una matrice di covarianza non invertibile. Vedere stima di matrici di covarianza per maggiori dettagli. DataFrame. cov supporta anche una parola minperiods opzionali che specifica il numero minimo richiesto di osservazioni per ciascuna coppia di colonne per avere un risultato valido. I pesi utilizzati nella finestra sono specificati dalla parola chiave wintype. L'elenco dei tipi riconosciuti sono: Boxcar triang blackman hamming Bartlett parzen Bohman blackmanharris Nuttall barthann kaiser (ha bisogno di beta) gaussiana (ha bisogno di std) generalgaussian (ha bisogno di potenza, larghezza) Slepian (larghezza esigenze). Notare che la finestra vagone equivale a dire (). Per alcune funzioni a finestre, devono essere specificati ulteriori parametri: Per. sum () con un wintype. non c'è normalizzazione fatto per i pesi per la finestra. Passando pesi personalizzati di 1, 1, 1 darà un risultato diverso da quello che passa pesi di 2, 2, 2. per esempio. Quando si passa un wintype invece di specificare esplicitamente i pesi, i pesi sono già normalizzati in modo che il peso più grande è 1. Al contrario, la natura del calcolo. mean () è tale che i pesi sono normalizzati rispetto all'altro. Pesi di 1, 1, 1 e 2, 2, 2 producono lo stesso risultato. Time-consapevoli di rotolamento Nuovo nella versione 0.19.0. Nuovo nella versione 0.19.0 sono la capacità di passare un offset (o convertibili) a un metodo. rolling () e farla produrre finestre di dimensione variabile in base alla finestra temporale passato. Per ogni punto di tempo, questo include tutti i valori precedenti che si verificano all'interno del delta time indicato. Questo può essere particolarmente utile per un indice di frequenza tempo non regolare. Questo è un indice di frequenza regolare. Utilizzando un parametro window intero funziona a rotolare lungo la frequenza finestra. Specifica di un offset permette una specificazione più intuitiva della frequenza di laminazione. Utilizzando un indice non regolare, ma ancora monotona, a rotazione con una finestra intero non impartisce alcun calcolo speciale. Usando il tempo-specifica genera finestre variabili per questo dati sparsi. Inoltre, ora permettiamo un optional sul parametro per specificare una colonna (piuttosto che il default dell'indice) in una dataframe. Time-consapevoli di rotolamento contro ricampionamento Utilizzando. rolling () con un indice basato sul tempo è molto simile a ricampionamento. Entrambi operano ed eseguire operazioni riduttive su oggetti panda tempo indicizzato. Quando si utilizza. rolling () con un offset. L'offset è un tempo-delta. Prendere una finestra all'indietro in time guardare, e aggregare tutti i valori in quella finestra (incluso il punto finale, ma non lo start-punto). Questo è il nuovo valore in quel punto nel risultato. Questi sono finestre variabili dimensioni in spazio-tempo per ciascun punto di ingresso. Si otterrà un risultato stesso di dimensioni come ingresso. Quando si utilizza. resample () con un offset. Costruire un nuovo indice che è la frequenza di offset. Per ciascun bin di frequenza, punti aggregati dall'ingresso all'interno di una finestra all'indietro in time guardando che rientrano in tale bin. Il risultato di questa aggregazione è l'uscita per tale punto di frequenza. Le finestre sono fissati dimensione nello spazio di frequenza. Il risultato avrà la forma di una frequenza regolare tra il minimo ed il massimo dell'oggetto input originale. Riassumere. rotolamento () è un'operazione finestra temporale basata, mentre. resample () è un'operazione finestra di frequenze basata. Centraggio Windows di default le etichette sono impostate per il bordo destro della finestra, ma una parola chiave centro è disponibile in modo che le etichette possono essere impostati al centro. Funzioni Finestra Binary COV () e corr () in grado di calcolare lo spostamento statistiche delle finestre su due serie o qualsiasi combinazione di DataFrameSeries o DataFrameDataFrame. Qui è il comportamento in ogni caso: due serie. calcolare la statistica per l'abbinamento. DataFrameSeries. calcolare le statistiche per ogni colonna del dataframe con la Serie passato, restituendo così una dataframe. DataFrameDataFrame. Per impostazione predefinita, calcolare la statistica per la corrispondenza nomi delle colonne, restituendo un dataframe. Se viene passato l'argomento pairwiseTrue parola chiave quindi calcola la statistica per ogni coppia di colonne, restituendo un pannello i cui elementi sono le date in questione (vedere la sezione successiva). Calcolo rotolamento covarianze a coppie e le correlazioni in analisi dei dati finanziari e di altri settori it8217s comune per calcolare covarianza e correlazione matrici per una collezione di serie storiche. Spesso si è anche interessato a trasferirsi finestra covarianza e correlazione matrici. Questo può essere fatto passando l'argomento chiave a coppie, che nel caso di ingressi dataframe produrrà un pannello i cui elementi sono le date in questione. Nel caso di un singolo argomento dataframe l'argomento a coppie può anche essere omesso: i valori mancanti vengono ignorati ed ogni voce è calcolata utilizzando le osservazioni complete a coppie. Si prega di consultare la sezione di covarianza per avvertimenti associati a questo metodo di calcolo covarianza e correlazione matrici. Oltre a non avere un parametro window, queste funzioni hanno le stesse interfacce come le loro controparti. rolling. Come in precedenza, i parametri sono tutti accettano sono: minperiods. soglia di punti dati non nulli da richiedere. Il valore predefinito è minimo necessario per il calcolo statistico. No NaN verrà emesso una volta minperiods punti dati non nulli sono stati visti. centro. booleano, se impostare le etichette al centro (di default è False) L'uscita del. rolling e metodi. expanding non restituiscono un NaN se ci sono almeno minperiods valori non nulli nella finestra corrente. Questo differisce da cumSum. cumprod. cummax. e cumino. che restituiscono NaN nell'output laddove viene rilevato un NaN nell'input. Una espansione finestra statistica sarà più stabile (e meno reattivo) rispetto al suo omologo finestra di laminazione come la dimensione della finestra aumentando diminuisce l'impatto relativo di un singolo punto di dati. A titolo di esempio, qui è l'uscita media () per il precedente set di dati di serie storiche: ponderata esponenzialmente di Windows Un insieme correlato di funzioni sono esponenzialmente versioni di alcune delle statistiche di cui sopra ponderato. Una interfaccia simile a. rolling e. expanding si accede attraverso il metodo. ewm per ricevere un oggetto EWM. Un certo numero di EW espansione sono forniti (in modo esponenziale ponderate) metodi: Livellamento con medie mobili ponderata esponenzialmente Una media mobile richiede una serie temporale rumoroso e sostituisce ogni valore con il valore medio di un quartiere circa il valore dato. Questa zona può consistere in dati puramente storici, o può essere centrata attorno al valore determinato. Inoltre, i valori del quartiere possono essere ponderati con diverse serie di pesi. Ecco un esempio di tre punti la media ponderata altrettanto in movimento, utilizzando i dati storici, qui, rappresenta il segnale livellato, e rappresenta la serie storica rumoroso. In contrasto con semplici medie mobili, una esponenzialmente ponderata media mobile (EWMA) regola un valore in base a una somma esponenzialmente ponderata di tutti i valori precedenti. Questa è l'idea di base, Questo è bello perché si don8217t si deve preoccupare di avere una finestra di tre punti, contro una finestra di cinque punti, o preoccuparsi l'adeguatezza del sistema di ponderazione. Con l'EWMA, perturbazioni precedenti 8220remembered, 8221 e 8220slowly dimenticato, 8221 con il termine della ultima equazione, mentre con una finestra o di quartiere con i confini discreti, una perturbazione è dimenticato non appena si passa fuori dalla finestra. La media dei EWMA per ospitare Trends Dopo aver letto su EWMAs in un libro di analisi dei dati, ero andato lungo felicemente utilizzo di questo strumento su ogni singola applicazione levigante che mi sono imbattuto. Non è stato solo più tardi che ho imparato che la funzione EWMA è davvero appropriato solo per i dati fissi, vale a dire i dati senza trend o stagionalità. In particolare, la funzione EWMA resiste tendenze dalla media corrente it8217s già 8220seen8221. Quindi, se si dispone di una funzione di cappello rumoroso che va da 0, a 1, e poi di nuovo a 0, allora la funzione EWMA restituirà valori bassi sul lato in salita, e alti valori sul lato verso il basso-collina. Un modo per aggirare questo è per lisciare il segnale in entrambe le direzioni, marcia in avanti, e poi marcia indietro, e poi la media dei due. Qui, useremo la funzione EWMA fornita dal modulo panda. Holt-Winters Secondo Ordine EWMA Ed ecco qualche codice Python attuazione del metodo secondo ordine Holt-Winters su un'altra funzione cappello rumoroso, come prima. Messaggio di navigazione PostsThanks recenti per la pubblicazione della EMA. E sì, Talib in realtà dovrebbe essere disponibile. There39s po 'di lavoro su questo che sembra davvero molto promettente (githubquantopianziplinepull100). Cercherò di tirare questo presto per renderlo disponibile ad un pubblico più vasto. Il materiale in questo sito è fornito solo a scopo informativo e non costituisce un'offerta di vendita, una sollecitazione ad acquistare, o una raccomandazione o approvazione per qualsiasi titolo o di una strategia, né costituisce un'offerta di fornire servizi di consulenza per gli investimenti da Quantopian. Inoltre, il materiale non offre alcuna opinione per quanto riguarda l'idoneità di qualsiasi titolo o investimento specifico. Quantopian non garantisce l'esattezza e la completezza delle opinioni espresse nel sito. I punti di vista sono soggetti a modifiche, e possono essere diventati inaffidabili per vari motivi, tra cui i cambiamenti nelle condizioni di mercato o circostanze economiche. Ogni investimento comporta rischi, inclusa la perdita del capitale. Si consiglia di consultare con un professionista di investimento prima di prendere decisioni di investimento. Lo fa. Ma la maggior parte del lavoro di capire il modo migliore è già fatto. Abbiamo solo bisogno di finalizzarlo. Dopo di che, it39s solo un mucchio di copyamppaste per avvolgere l'intera libreria Talib. Ci sono molte cose buone nelle opere per affrontare alcune carenze. It39s una questione di risorse per la maggior parte. Il materiale in questo sito è fornito solo a scopo informativo e non costituisce un'offerta di vendita, una sollecitazione ad acquistare, o una raccomandazione o approvazione per qualsiasi titolo o di una strategia, né costituisce un'offerta di fornire servizi di consulenza per gli investimenti da Quantopian. Inoltre, il materiale non offre alcuna opinione per quanto riguarda l'idoneità di qualsiasi titolo o investimento specifico. Quantopian non garantisce l'esattezza e la completezza delle opinioni espresse nel sito. I punti di vista sono soggetti a modifiche, e possono essere diventati inaffidabili per vari motivi, tra cui i cambiamenti nelle condizioni di mercato o circostanze economiche. Ogni investimento comporta rischi, inclusa la perdita del capitale. Si consiglia di consultare con un professionista di investimento prima di prendere decisioni di investimento.

No comments:

Post a Comment