Thursday 9 November 2017

Quantitative Trading Strategie In R Parte 1 Di 3


30 Novembre 2016, 12:34 Qualche mese fa un lettore mi sottolineare questo nuovo modo di collegare R ed Excel. Io don8217t so per quanto tempo questo è stato in giro, ma non ho mai incontrato e I8217ve mai visto alcun post o un articolo su di esso. Così ho deciso di scrivere un post come lo strumento è davvero valsa la pena e prima che qualcuno chiede, I8217m non legato alla società in qualsiasi modo. BERT acronimo di Basic Excel R Toolkit. It8217s gratuito (sotto licenza GPL v2) ed è stato sviluppato da Dati strutturati LLC. Al momento della stesura della versione corrente del BERT è 1.07. Ulteriori informazioni possono essere trovate qui. Da un punto di vista più tecnico, il BERT è progettato per supportare le funzioni di esecuzione R da celle del foglio di Excel. In termini di Excel, it8217s per la scrittura di funzioni definite dall'utente (UDF) a R. In questo post I8217m non andando a mostrare come R ed Excel interagiscono tramite BERT. Ci sono molto buoni tutorial qui. qui e qui. Invece io voglio mostrarti come ho usato BERT di costruire un tower8221 8220control per il mio trading. I miei segnali di trading sono generati utilizzando una lunga lista di file R, ma ho bisogno della flessibilità di Excel per visualizzare i risultati in modo rapido ed efficiente. Come indicato sopra BERT può fare questo per me, ma voglio anche di adattare l'applicazione alle mie esigenze. Combinando la potenza di XML, VBA, R e BERT posso creare un bell'aspetto ma potente applicazione sotto forma di un file Excel con codice minimo VBA. In definitiva Ho un singolo file di Excel raccolta di tutti i compiti necessari per gestire il mio portafoglio: aggiornamento del database, la generazione di segnali, gli ordini presentazione etc8230 mio approccio potrebbe essere suddiviso in 3 passaggi riportati di seguito: Utilizzare XML per creare menu e pulsanti definiti dall'utente in un Excel file. I menu ei pulsanti di cui sopra sono chiamate essenzialmente a funzioni VBA. Queste funzioni VBA sono wrapup intorno alle funzioni di ricerca definite utilizzando BERT. Con questo approccio posso mantenere una chiara distinzione tra il nucleo del mio codice tenuto in R, SQL e Python e tutto utilizzato per visualizzare e formattare i risultati tenuti in Excel, VBA XML amplificatore. Nelle prossime sezioni vi presento il presupposto di tale sviluppato un approccio e una guida passo passo che spiega come BERT potrebbe essere utilizzato semplicemente per il passaggio di dati da R in Excel con codice minimo VBA. 1 8211 Scaricare e installare BERT da questo link. Una volta completata l'installazione si dovrebbe avere un nuovo menu componenti aggiuntivi in ​​Excel con i tasti come mostrato di seguito. Questo è il modo BERT materializzata in Excel. 2 8211 Scaricare e installare editor personalizzato dell'interfaccia utente. L'interfaccia utente personalizzata Editor permette di creare menu e pulsanti definiti dall'utente in nastro Excel. Una procedura passo passo è disponibile qui. Guida passo passo 1 8211 R Codice: Il sotto funzione R è un semplice pezzo di codice solo a scopo illustrativo. Calcola e restituire i residui da una regressione lineare. Questo è quello che vogliamo recuperare in Excel. Salva questo in un file chiamato myRCode. R (qualsiasi altro nome va bene) in una directory di vostra scelta. 2 8211 functions. R in BERT. Da Excel selezionare Componenti aggiuntivi - gt Home directory e aprire il file chiamato functions. R. In questo file incollare il seguente codice. Assicurarsi di inserire il percorso corretto. Questo è solo di sourcing in BERT file R creato in precedenza. Quindi salvare e chiudere il file functions. R. Se si vuole fare alcuna modifica al file R creata nel passaggio 1 si dovrà ricaricare utilizzando il pulsante BERT 8220Reload avvio File8221 dal menu componenti aggiuntivi in ​​Excel 8211 In Excel 3: Creare e salvare un file chiamato myFile. xslm (qualsiasi altro nome va bene). Si tratta di un file con attivazione macro che si salva nella directory di vostra scelta. Una volta che il file viene salvato in prossimità di esso. 4 8211 Aprire il file creato in precedenza in editor personalizzato dell'interfaccia utente: Una volta che il file è aperto, incollare il codice qui sotto. Si dovrebbe avere qualcosa di simile nel editor XML: Essenzialmente questo pezzo di codice XML crea un menu aggiuntivo (RTrader), un nuovo gruppo (Il mio gruppo) e un pulsante definito dall'utente (Nuova Button) nella barra multifunzione di Excel. Una volta fatto you8217re, myFile. xslm aperto in Excel e chiudere l'editor interfaccia utente personalizzata. Si dovrebbe vedere qualcosa di simile. 5 8211 Apri editor VBA. In myFile. xlsm inserire un nuovo modulo. Incollare il codice riportato di seguito nel modulo appena creato. Questo cancella i risultati precedenti nel foglio di lavoro prima di affrontare nuovi. 6 8211 clic sul pulsante Nuovo. Ora tornare al foglio di calcolo e nel menu RTrader fare clic sul pulsante 8220New Button8221. Si dovrebbe vedere qualcosa di simile al di sotto apparire. La guida di cui sopra è una versione molto di base di ciò che può essere raggiunto utilizzando BERT ma mostra come combinare la potenza di diversi strumenti specifici per costruire la propria applicazione personalizzata. Dal mio punto di vista l'interesse di un tale approccio è la capacità di incollare insieme R ed Excel, ovviamente, ma anche di comprendere tramite XML (e batch) pezzi di codice da Python, SQL e molto altro ancora. Questo è esattamente quello che mi serviva. Infine Sarei curioso di sapere se qualcuno ha qualche esperienza con BERT 19 agosto, 2016, 9:26 Durante il test di strategie di trading un approccio comune è quello di dividere i dati iniziali fissati in in dati di esempio: la parte dei dati progettata per calibrare il modello e di dati di esempio: la parte dei dati utilizzati per convalidare la taratura e garantisce che l'creata nel campione sarà riflessa nel mondo reale. Come regola empirica circa 70 dei primi dati possono essere utilizzati per la calibrazione (cioè nella campione) e 30 per la convalida (cioè fuori dal campione). Poi un confronto tra il dentro e fuori della Guida dati campione per decidere se il modello è abbastanza robusto. Questo post si propone di andare un passo ulteriore e fornisce un metodo statistico per decidere se il fuori i dati del campione è in linea con quello che è stato creato nel campione. Nella tabella qui sotto l'area blu rappresenta la prestazione di campione per una delle mie strategie. Una semplice ispezione visiva rivela una buona misura tra il dentro e fuori di prestazioni campione, ma quale grado di fiducia devo in questa in questa fase non tanto e questo è il problema. Ciò che è veramente necessario è una misura di somiglianza tra il dentro e fuori di insiemi di dati di esempio. In termini statistici questo potrebbe essere tradotto come la probabilità che il dentro e fuori figure prestazioni campione provenienti dalla stessa distribuzione. C'è un test statistico non parametrico che fa esattamente questo: il test Kruskall-Wallis. Una buona definizione di questo test potrebbe essere trovato sulla R-Tutor 8220A raccolta di campioni di dati sono indipendenti se provengono da popolazioni indipendenti e i campioni non si influenzano a vicenda. Utilizzando il test di Kruskal-Wallis. possiamo decidere se le distribuzioni della popolazione siano identiche senza assumere loro di seguire il normale distribution.8221 Il vantaggio di questo test non sta assumendo una distribuzione normale. Esiste altri test della stessa natura che potrebbe inserirsi in tale contesto. Il test di Mann-Whitney-Wilcoxon o test di Kolmogorov-Smirnov sarebbe adatta perfettamente il quadro descrive qui tuttavia questo va oltre lo scopo di questo articolo per discutere i pro ei contro di ciascuna di queste prove. Una buona descrizione con esempi R può essere trovato qui. Here8217s il codice utilizzato per generare la tabella di cui sopra e l'analisi: Nell'esempio sopra nell'esempio di periodo è più lungo del fuori periodo campione perciò casualmente creato 1000 sottoinsiemi del in dati campione ciascuno di essi avente la stessa lunghezza della fuori dei dati di esempio. Poi ho provato ciascuno nel sottoinsieme del campione contro il fuori dati di esempio e ho registrato i valori di p. Questo processo non crea un singolo valore di p per il test Kruskall-Wallis ma una distribuzione rendendo l'analisi più robusto. In questo esempio, la media dei valori di p è ben sopra lo zero (0,478) che indica che l'ipotesi nulla dovrebbe essere accettato: ci sono forti evidenze che il dentro e fuori di dati di esempio viene dalla stessa distribuzione. Come al solito ciò che viene presentato in questo post è un esempio giocattolo che graffia solo la superficie del problema e dovrebbero essere adattati alle esigenze individuali. Tuttavia penso che propone un quadro statistico interessante e razionale per valutare di risultati del campione. Questo post è ispirato ai seguenti due documenti: Vigier Alexandre, Chmil Swann (2007), gli effetti delle diverse funzioni di ottimizzazione sul Out of Performance campione di strategie di trading geneticamente evoluto, Previsione mercati finanziari Conferenza Vigier Alexandre, Chmil Swann (2010), Un processo di ottimizzazione per migliorare INOUT di consistenza del campione, un caso Stock Market, JP Morgan Cazenove Equità quantitativa Conference, Londra ottobre 2010 13 dicembre 2015, 14:03 Fare ricerca quantitativa implica un sacco di dati scricchiolio e uno ha bisogno di dati puliti e affidabili per raggiungere questo obiettivo. Ciò che è veramente necessario è dati pulito che è facilmente accessibile (anche senza una connessione ad internet). Il modo più efficace per fare questo per me è stata quella di mantenere una serie di file CSV. Ovviamente questo processo può essere gestito in molti modi, ma ho trovato straordinario molto efficiente e semplice da mantenere una directory in cui posso conservare e aggiornare i file CSV. Ho un file CSV per ogni strumento e ogni file prende il nome dello strumento che contiene. La ragione per cui lo faccio è duplice: in primo luogo, io don8217t voglio scaricare i dati (prezzo) da Yahoo, Google etc8230 ogni volta che voglio testare una nuova idea, ma ancora più importante una volta ho identificato e risolto un problema, ho don8217t vogliono avere a farlo di nuovo la prossima volta che ho bisogno lo stesso strumento. Semplice ma molto efficiente finora. Il processo è riassunto nella tabella sottostante. In tutto ciò che segue, presumo che i dati proviene da Yahoo. Il codice dovrà essere modificato per i dati da parte di Google, Quandl etc8230 Inoltre vi presento il processo di aggiornamento dati sui prezzi al giorno. L'impostazione sarà diversa per i dati a frequenza più alta e altri tipi di file di dati (cioè diverso dai prezzi). 1 8211 dati scaricano iniziale (listOfInstruments. R amp historicalData. R) Il file listOfInstruments. R è un file che contiene solo l'elenco di tutti gli strumenti. Se una parte di strumento isn8217t della mia lista (cioè nessun file CSV nella mia cartella di dati) oppure se lo si fa per la prima volta è necessario scaricare il set di dati storici iniziale. L'esempio che segue scarica un insieme di ETF prezzi giornalieri da Yahoo Finance torna a gennaio 2000 e memorizzare i dati in un file CSV. 2 8211 l'aggiornamento dei dati esistenti (updateData. R) Il codice di seguito parte da file esistenti nella cartella dedicata e aggiorna tutti loro uno dopo l'altro. Io di solito eseguito questo processo tutti i giorni tranne quando I8217m in vacanza. Per aggiungere un nuovo strumento, è sufficiente eseguire il passaggio 1 sopra solo per questo strumento. 3 8211 creare un file batch (updateDailyPrices. bat) Un'altra parte importante del lavoro è la creazione di un file batch che automatizza il processo di aggiornamento di cui sopra (I8217m un utente di Windows). Questo evita l'apertura RRStudio ed eseguire il codice da lì. Il codice qui sotto è posto su un file. bat (il percorso deve essere modificato con l'installazione reader8217s). Si noti che ho aggiunto un file di output (updateLog. txt) per monitorare l'esecuzione. Il processo di cui sopra è estremamente semplice perché descrive solo come aggiornare i dati sui prezzi al giorno. I8217ve stanno usando questo per un po 'e ha lavorato molto bene per me finora. Per i dati più avanzati eo frequenze più alte, le cose possono diventare molto più complicato. Come al solito i commenti accolgono 23 Marzo 2015, 20:55 Quando si tratta di gestione di un portafoglio di azioni rispetto a un punto di riferimento il problema è molto diverso da definire una strategia di rendimento assoluto. Nel primo si deve tenere più scorte che in seguito, dove l'assenza di scorte a tutti possono aver luogo, se non è abbastanza buona occasione. La ragione di ciò è il tracking error. Questo è definito come la deviazione standard del rendimento del portafoglio meno il rendimento del benchmark. I meno scorte si tiene contro un punto di riferimento più alto è il tracking error (ad es rischio più elevato). L'analisi che segue è in gran parte ispirata al libro 8220Active portafoglio Management8221 da Grinold amp Kahn. Questa è la bibbia per chiunque sia interessato nella gestione di un portafoglio contro un punto di riferimento. Incoraggio vivamente chiunque abbia un interesse per l'argomento di leggere il libro dall'inizio alla fine. It8217s molto ben scritto e pone le basi della sistematica gestione attiva del portafoglio (non ho alcuna affiliazione al direttore o gli autori). 1 8211 Analisi fattoriale Qui we8217re cercando di classificare nel modo più accurato possibile le scorte dell'universo di investimento su base ritorno in avanti. Molte persone si avvicinò con molti strumenti e innumerevoli varianti di questi strumenti sono stati sviluppati per raggiungere questo obiettivo. In questo post mi concentro su due metriche semplici e ampiamente utilizzati: Informazioni Coefficient (IC) e Quantili Return (QR). 1.1 8211 Informazioni Coefficiente L'orizzonte per il ritorno in avanti deve essere definito dall'analista e it8217s una funzione del fatturato strategy8217s e il decadimento alfa (questo è stato oggetto di approfondite ricerche). Ovviamente CI devono essere il più alto possibile in termini assoluti. Per il lettore attento, nel libro di Grinold amp Kahn una formula che collega Information Ratio (IR) e IC è dato: con ampiezza è il numero di scommesse indipendenti (commercio). Questa formula è nota come legge fondamentale della gestione attiva. Il problema è che spesso, definendo l'ampiezza con precisione non è così facile come sembra. 1.2 8211 Quantili Ritorno Al fine di avere una stima più accurata del fattore di potere predittivo it8217s necessario fare un passo ulteriore e le scorte di gruppo da quantile dei valori del fattore di poi analizzare il rendimento medio a termine (o di qualsiasi altro parametro tendenza centrale) di ciascuno di questi quantili. L'utilità di questo strumento è molto semplice. Un fattore può avere un buon IC ma il suo potere predittivo può essere limitata ad un piccolo numero di stock. Questo non è buono come un gestore di portafoglio dovrà scegliere le scorte entro l'intero universo, al fine di soddisfare il suo vincolo di tracking error. Buone quantili di ritorno sono caratterizzate da una relazione monotona tra i singoli quantili e ritorna avanti. Tutti i titoli nell'indice SampP500 (al momento della scrittura). Ovviamente c'è una tendenza nave di sopravvivenza: la lista di titoli nell'indice è cambiata in modo significativo tra l'inizio e la fine del periodo di campionamento, tuttavia it8217s abbastanza buono solo a scopo illustrativo. Il codice di seguito scarica i prezzi delle azioni individuali nel SampP500 tra il gennaio 2005 e oggi (ci vuole un po ') e gira i prezzi grezzi in cambio negli ultimi 12 mesi e nell'ultimo mese. Il primo è il fattore, quest'ultimo sarà usato come misura di ritorno in avanti. Di seguito è riportato il codice per calcolare informazioni coefficiente e Quantili ritorno. Si noti che ho usato quintili in questo esempio, ma qualsiasi altro metodo di raggruppamento (terzili, decile etc8230) può essere utilizzato. in realtà dipende la dimensione del campione, ciò che si desidera catturare e tempo che si desidera avere una panoramica ampia o concentrarsi su code di distribuzione. Per stimare i rendimenti all'interno di ogni quintile, mediana è stata utilizzata come stimatore tendenza centrale. Questa misura è molto meno sensibile a valori anomali di media aritmetica. E infine il codice per produrre il grafico Quantili ritorno. 3 8211 Come sfruttare le informazioni sopra riportate nella tabella qui sopra Q1 è più bassi negli ultimi 12 mesi ritornano e Q5 più alto. Vi è un aumento quasi monotona nei quantili di ritorno tra Q1 e Q5 che indica chiaramente che le scorte di cadere in Q5 outperform quelle che rientrano in Q1 di circa 1 al mese. Questo è molto significativo e potente per un semplice fattore tale (non proprio una sorpresa though8230). Quindi ci sono maggiori possibilità di battere l'indice sovrappesando gli stock di cadere in Q5 e sottoponderare quelle che rientrano in Q1 rispetto al benchmark. Un IC di 0,0206 potrebbe non significare molto in sé, ma it8217s significativamente diverso da 0 e indica una buona capacità previsionale degli ultimi 12 mesi, rendimento complessivo. test di significatività formali possono essere valutati, ma questo è oltre la portata di questo articolo. 4 8211 limitazioni pratiche Il quadro di cui sopra è eccellente per la valutazione degli investimenti factor8217s qualità però ci sono una serie di limitazioni pratiche che devono essere affrontate per l'attuazione vita reale: riequilibrante. Nella descrizione di cui sopra, it8217s presupposto che alla fine di ogni mese il portafoglio è completamente riequilibrato. Ciò significa che tutti gli stock che cadono in Q1 sono sottopeso e tutti gli stock che cadono in Q5 sono in sovrappeso rispetto al benchmark. Questo non è sempre possibile per ragioni pratiche: alcuni titoli potrebbero essere esclusi dal universo di investimento, ci sono vincoli per l'industria o il peso del settore, ci sono vincoli sul fatturato etc8230 costi di transazione. Questo non è essere preso in considerazione nell'analisi di cui sopra e questo è un grave freno all'attuazione vita reale. Considerazioni sulla cifra d'affari sono generalmente implementati nella vita reale in una forma di sanzione sulla qualità fattore. coefficiente di trasferimento. Si tratta di una estensione della legge fondamentale della gestione attiva e rilassa l'assunzione di modello di Grinold8217s che i manager devono affrontare vincoli che li escludono dalla conversione loro investimenti intuizioni direttamente nelle scommesse portafoglio. E, infine, I8217m stupito da ciò che può essere raggiunto in meno di 80 righe di codice con R8230 Come al solito commenti accolgono 14 Marzo 2014, 13:07 La domanda che ci si dovrebbe sempre himherself chiesto quando si utilizza indicatori tecnici è quello che sarebbe un obiettivo criteri per selezionare i parametri indicatori (ad esempio, il motivo per cui utilizzando un 14 giorni RSI, piuttosto che 15 o 20 giorni). Gli algoritmi genetici (GA) sono strumenti altamente adeguati per rispondere a questa domanda. In questo post I8217ll mostrerà come impostare il problema in R. Prima di procedere il solito promemoria: Quello che presento in questo post è solo un esempio giocattolo e non un invito ad investire. La sua non è una strategia finita sia, ma un'idea di ricerca che deve essere ulteriormente studiato, sviluppato e adattato alle esigenze individuali. Quali sono gli algoritmi genetici La migliore descrizione di GA mi sono imbattuto proviene da Cybernatic Trading un libro di Murray A. Ruggiero. 8220Genetic algoritmi sono stati inventato da John Holland a metà del 1970 per risolvere i problemi di ottimizzazione difficili. Questo metodo utilizza la selezione naturale, sopravvivenza del fittest8221. Il processo generale segue i passi di seguito: codificare il problema in cromosomi utilizzando la codifica, lo sviluppo di una funzione di fitness per l'uso nella valutazione ogni valore chromosome8217s nel risolvere un determinato problema Inizializzare una popolazione di cromosomi valutare ogni cromosoma nella popolazione Creare nuovi cromosomi accoppiando due cromosomi. Questo viene fatto muting e ricombinando due genitori in modo da formare due bambini (i genitori sono scelti a caso, ma viziate da loro idoneità) valutare la nuova cromosoma Eliminare un membro della popolazione che è meno in forma rispetto al nuovo cromosoma e inserire il nuovo cromosoma nella popolazione . Se i criteri di arresto viene raggiunto (numero massimo di generazioni, i criteri di idoneità è buono enough8230) per poi tornare il miglior cromosoma in alternativa, passare al punto 4 Dal punto di vista commerciale GA sono molto utili perché sono bravo a trattare con i problemi altamente non lineari. Tuttavia essi presentano alcune caratteristiche sgradevoli che sono degni di nota: Overfitting: Questo è il problema principale e it8217s verso il basso per l'analista di impostare il problema in modo tale da minimizzare questo rischio. tempo di calcolo. Se il problema isn8217t correttamente definito, può essere estremamente lungo per raggiungere una soluzione accettabile e la complessità aumenta esponenzialmente con il numero di variabili. Da qui la necessità di selezionare con attenzione i parametri. Ci sono diversi pacchetti che si occupano di R GA, ho scelto di utilizzare i più comuni uno: rgenoud prezzi di chiusura giornalieri per gli ETF più liquidi da Yahoo Finance che risale al gennaio 2000. L'nel periodo di campionamento va dal gennaio 2000 al dicembre 2010. L'Out of periodo inizia campione su gennaio 2011. la logica è la seguente: la funzione di fitness è ottimizzata per il periodo di campionamento per ottenere una serie di parametri ottimali per gli indicatori tecnici selezionati. L'andamento di tali indicatori viene poi valutato nel fuori periodo di campionamento. Ma prima di farlo indicatori tecnici devono essere selezionati. Il mercato azionario presenta due caratteristiche principali che sono familiari a chiunque abbia una certa esperienza di trading. slancio a lungo termine e l'inversione a breve termine. Tali caratteristiche possono essere tradotti in termini di indicatori tecnici per: medie mobili attraversare e RSI. Questo rappresenta un insieme di 4 parametri: periodi Look-posteriori per medie mobili lungo e breve termine, guardare-back periodo per la soglia RSI e RSI. I set di parametri sono i cromosomi. L'altro elemento chiave è la funzione di fitness. Potremmo voler usare qualcosa di simile: il massimo ritorno o indice di Sharpe o drawdown media minima. In ciò che segue, ho scelto di massimizzare il rapporto di Sharpe. L'implementazione R è un insieme di 3 funzioni: fitnessFunction. definisce la funzione di fitness (per esempio massimo indice di Sharpe) da utilizzare entro i tradingStatistics motore GA. riepilogo delle statistiche di negoziazione per il dentro e fuori dei periodi di esempio per scopi di confronto Genoud. il motore GA dal pacchetto rgenoud La funzione Genoud è piuttosto complesso, ma I8217m non andare a spiegare che cosa significa ogni parametro come voglio mantenere questo post breve (e la documentazione è veramente buono). Nella tabella qui sotto vi presento per ogni strumento i parametri ottimali (periodo di look-indietro RSI, soglia di RSI, a breve termine media mobile, e lungo termine Moving Average), insieme con il dentro e fuori delle statistiche commerciali del campione. Prima di commentare i risultati di cui sopra, voglio spiegare alcuni punti importanti. Per abbinare la logica sopra definito, ho delimitato i parametri per assicurarsi che il periodo di look-retro per la media mobile a lungo termine è sempre più che la media mobile più breve. Ho anche costretto l'ottimizzatore di scegliere solo le soluzioni con più di 50 mestieri del periodo del campione (ad es, la significatività statistica). Nel complesso il fuori risultati dei campioni sono tutt'altro che impressionanti. I rendimenti sono bassi, anche se il numero di transazioni è piccolo per rendere pubblico il risultato davvero significativo. there8217s Tuttavia, una significativa perdita di efficienza tra il dentro e fuori del periodo di campionamento per il Giappone (EWJ), che molto probabilmente significa Overfitting. Questo post ha lo scopo di dare al lettore gli strumenti per utilizzare correttamente GA in un quadro di trading quantitativo. Ancora una volta, It8217s solo un esempio che deve essere ulteriormente raffinata. Alcuni potenziale miglioramento da esplorare potrebbe essere: funzione di fitness. massimizzando l'indice di Sharpe è molto semplicistico. Una funzione 8220smarter8221 certamente migliorare la fuori modello di statistiche commerciali del campione. cerchiamo di catturare un modello molto semplice. Una più approfondita ricerca modello è sicuramente necessaria. ottimizzazione. ci sono molti modi per migliorare il modo in cui viene condotta l'ottimizzazione. Ciò migliorare sia la velocità di calcolo e la razionalità dei risultati. Il codice utilizzato in questo post è disponibile su un repository Gist. Come al solito i commenti di benvenuto 28 febbraio 2014, 15:52 Vi è un corpo enorme di letteratura sia accademica ed empirica su previsioni di mercato. Il più delle volte si mescola due caratteristiche del mercato: grandezza e la direzione. In questo articolo voglio concentrarsi sull'individuazione solo la direzione del mercato. L'obiettivo mi sono posto, è quello di individuare le condizioni di mercato quando le probabilità sono significativamente influenzati verso un alto o un mercato verso il basso. Questo post dà un esempio di come CART (classificazione e regressione alberi) possono essere utilizzati in questo contesto. Prima di procedere il solito promemoria: Quello che presento in questo post è solo un esempio giocattolo e non un invito ad investire. La sua non è una strategia finita sia, ma un'idea di ricerca che deve essere ulteriormente studiato, sviluppato e adattato alle esigenze individuali. 1 8211 Qual è CART e perché usarlo Da statistiche, CART sono un insieme di tecniche per la classificazione e la previsione. La tecnica mira a produrre norme che prevedono il valore di una variabile outcome (target) dai valori noti di predittore (esplicative) variabili. Ci sono molte implementazioni diverse, ma sono tutti condividono una caratteristica generale e questo è ciò che Im interessa. Da Wikipedia, Algoritmi per la costruzione di alberi di decisione solito lavorare dall'alto verso il basso, scegliendo una variabile ad ogni passo che meglio divide l'insieme di elementi. Diversi algoritmi utilizzano parametri diversi per la misurazione 8220best8221. Questi generalmente misurano l'omogeneità della variabile di destinazione all'interno dei sottoinsiemi. Queste metriche sono applicati a ciascun gruppo candidato, ed i valori risultanti vengono combinati (ad esempio la media) per fornire una misura della qualità della scissione. metodologia CART presenta alcune caratteristiche che sono molto adatti per l'analisi di mercato: non parametrico. CART grado di gestire qualsiasi tipo di distribuzioni statistiche non lineari. CART in grado di gestire un ampio spettro di dipendenza tra variabili (ad esempio, non limitato a relazioni lineari) robusto per valori anomali ci sono vari pacchetti R si occupano di ricorsiva partizionamento, io uso qui rpart per gli alberi e la stima rpart. plot per gli alberi di disegno. 2 8211 prezzi amp dati Esperimento design quotidiano OHLC per gli ETF più liquidi da gennaio 2000 a dicembre 2013 estratte da Google Finance. Il periodo di campionamento va dal gennaio 2000 al dicembre 2010 il resto del set di dati è la fuori periodo di campionamento. Prima di eseguire qualsiasi tipo di analisi del set di dati deve essere preparato per l'attività. La variabile obiettivo è il ritorno in avanti ETF settimanale definita come due stati del mondo esito (su o giù). Se settimanale di ritorno in avanti gt 0 allora il mercato nello stato UP, altrimenti stato Giù Le variabili esplicative sono una serie di indicatori tecnici derivati ​​dal set di dati iniziali OHLC quotidiana. Ogni indicatore rappresenta un comportamento di mercato ben documentata. Per ridurre il rumore nei dati e tentare di identificare le relazioni solide, ciascuna variabile indipendente è considerata avere un risultato binario. Volatilità (Q1). Elevata volatilità è di solito associata con un mercato verso il basso e bassa volatilità con un up del mercato. La volatilità è definita come la 20 giorni ATR grezzo (True Range media) diffuso alla sua media mobile (MA). Se grezzo ATR gt MA poi VAR1 1, altrimenti VAR1 -1. slancio breve termine (VAR2). Il mercato azionario manifesta un comportamento slancio a breve termine catturato qui da un 5 giorni semplici medie mobili (SMA). Se il prezzo gt SMA poi VAR2 1 altro VAR2 -1 slancio a lungo termine (VAR3). Il mercato azionario presenta un comportamento di moto lungo termine catturato qui da un 50 giorni semplici medie mobili (LMA). Se il prezzo gt LMA poi VAR3 1 altro VAR3 -1 inversione a breve termine (VAR4). Questo viene catturato dal CRTDR che sta per parente stretto range giornaliero e calcolato come segue:. Se CRTDR gt 0.5, quindi VAR4 1 altro regime VAR4 -1 autocorrelazione (VAR5). Il mercato azionario tende a passare attraverso periodi di regimi di autocorrelazione negativi e positivi. Se i rendimenti autocorrelazione negli ultimi 5 giorni gt 0 poi VAR5 1 altro VAR5 -1 ho messo sotto un esempio di albero con alcune spiegazioni Nella struttura sopra, il percorso per raggiungere il nodo 4 è: VAR3 GT0 (Long Term Momentum gt 0) e VAR4 gt 0 (CRTDR gt 0). Il rettangolo rosso indica questa è una foglia DOWN (nodo esempio terminale) con una probabilità di 58 (1 8211 0,42). In termini di mercato, ciò significa che se a lungo termine Momentum è su e CRTDR è gt 0,5 allora la probabilità di un ritorno positivo la settimana prossima si basa su 42 i dati di esempio a campione. 18 indica la percentuale del set di dati che rientrano in quel nodo terminale (ad esempio foglie). Ci sono molti modi per utilizzare il metodo di cui sopra, ho scelto di stimare e combinare tutti gli alberi possibili. Dai dati a campione, raccolgo tutte le foglie di tutti i possibili alberi e li raccolgo in una matrice. Questo è il 8220rules matrix8221 dando la probabilità della prossima settimana beeing UP o DOWN. Applico le regole nella matrice sopra al di dati di esempio (gen 2011 8211 dicembre 2013) e metto a confronto i risultati al risultato reale. Il problema di questo approccio è che un singolo punto (settimana) può cadere in diverse regole e anche appartenere a UP e le regole contemporaneamente. Quindi applico uno schema di voto. Per una data settimana ho riassumere tutte le regole che si applicano a quella settimana dare un 1 per una regola di UP e -1 per una regola GIÙ. Se la somma è maggiore di 0 settimana è classificato come UP, se la somma è negativa it8217s una settimana GIÙ e se la somma è uguale a 0 non vi sarà alcuna posizione assunta quella settimana (ritorno 0) Il metodo di cui sopra è applicato ad un set di ETF molto liquido. Ho tracciare sotto il fuori delle curve campione di capitale insieme con l'acquisto e la strategia di attesa per lo stesso periodo. I primi risultati sembrano incoraggianti, anche se la qualità del risultato varia dallo strumento. Tuttavia, vi è una grande sala di miglioramento. Ho messo sotto alcune direzioni per ulteriori ottimalità analisi del percorso. L'algoritmo usato qui per definire gli alberi è ottimale in ogni gruppo ma doesn8217t garantisce l'ottimalità del percorso. Aggiunta di una metrica per misurare l'ottimalità del percorso certamente migliorare i risultati di cui sopra. Altre variabili. Ho scelto le variabili esplicative esclusivamente in base all'esperienza. It8217s molto probabile che questa scelta non è né buona né ottimale. metodologia Backtest. Ho usato un semplice dentro e fuori di una metodologia di campionamento. In un backtest più formale avrei preferito utilizzare una finestra di laminazione o di espansione di dentro e fuori campione sotto-periodi (ad esempio analisi in avanti a piedi) Come al solito, eventuali commenti backtesting welcomeSuccessful di Algorithmic Trading Strategies, Parte 1 Questo articolo continua la serie di negoziazione quantitativa , che ha iniziato con la Guida Beginner8217s e strategia di identificazione. Entrambi questi articoli più lunghi, più coinvolti sono stati molto popolari in modo I8217ll continuare su questa strada e di fornire dettagli sul tema della strategia di backtesting. backtesting algoritmica richiede la conoscenza di molti settori, tra cui la psicologia, matematica, statistica, sviluppo software e marketexchange microstruttura. Mi couldn8217t Spero di coprire tutti questi argomenti in un unico articolo, in modo I8217m andando a dividerli in due o tre pezzi più piccoli. Cosa faremo discutere in questa sezione I8217ll iniziare definendo backtesting e quindi mi limiterò a descrivere le basi di come essa viene effettuata. Poi mi chiarire sui pregiudizi che abbiamo toccato nella Guida Beginner8217s di Trading Quantitative. Successivo presenterò un confronto tra le varie opzioni software backtesting disponibili. Negli articoli successivi vedremo i dettagli di implementazione di strategia che spesso sono a malapena menzionati o ignorati. Ci sarà anche considerare come rendere il processo di backtesting più realistico includendo le idiosincrasie di uno scambio commerciale. Poi si discuterà dei costi di transazione e su come modellare correttamente in un ambiente backtest. Ci si concluderà con una discussione sulle prestazioni dei nostri estensivi e, infine, fornire un esempio di una strategia quant comune, noto come coppie di commercio media-ritornare. Let8217s cominciano a discutere ciò che è backtesting e perché dovremmo portarlo a termine nel nostro trading algoritmico. Qual è backtesting trading algoritmico si distingue da altri tipi di classi di investimento, perché siamo in grado di fornire in modo più affidabile le aspettative sull'andamento futuro dal rendimento passato, come conseguenza di abbondante disponibilità dei dati. Il processo attraverso il quale questa viene effettuata è conosciuto come backtesting. In simple terms, backtesting is carried out by exposing your particular strategy algorithm to a stream of historical financial data, which leads to a set of trading signals . Each trade (which we will mean here to be a 8217round-trip8217 of two signals) will have an associated profit or loss. The accumulation of this profitloss over the duration of your strategy backtest will lead to the total profit and loss (also known as the 8216PampL8217 or 8216PnL8217). That is the essence of the idea, although of course the 8220devil is always in the details8221 What are key reasons for backtesting an algorithmic strategy Filtration 8211 If you recall from the article on Strategy Identification. our goal at the initial research stage was to set up a strategy pipeline and then filter out any strategy that did not meet certain criteria. Backtesting provides us with another filtration mechanism, as we can eliminate strategies that do not meet our performance needs. Modelling 8211 Backtesting allows us to (safely) test new models of certain market phenomena, such as transaction costs, order routing, latency, liquidity or other market microstructure issues. Optimisation 8211 Although strategy optimisation is fraught with biases, backtesting allows us to increase the performance of a strategy by modifying the quantity or values of the parameters associated with that strategy and recalculating its performance. Verification 8211 Our strategies are often sourced externally, via our strategy pipeline . Backtesting a strategy ensures that it has not been incorrectly implemented. Although we will rarely have access to the signals generated by external strategies, we will often have access to the performance metrics such as the Sharpe Ratio and Drawdown characteristics. Thus we can compare them with our own implementation. Backtesting provides a host of advantages for algorithmic trading. However, it is not always possible to straightforwardly backtest a strategy. In general, as the frequency of the strategy increases, it becomes harder to correctly model the microstructure effects of the market and exchanges. This leads to less reliable backtests and thus a trickier evaluation of a chosen strategy. This is a particular problem where the execution system is the key to the strategy performance, as with ultra-high frequency algorithms. Unfortunately, backtesting is fraught with biases of all types. We have touched upon some of these issues in previous articles, but we will now discuss them in depth. Biases Affecting Strategy Backtests There are many biases that can affect the performance of a backtested strategy. Unfortunately, these biases have a tendency to inflate the performance rather than detract from it. Thus you should always consider a backtest to be an idealised upper bound on the actual performance of the strategy. It is almost impossible to eliminate biases from algorithmic trading so it is our job to minimise them as best we can in order to make informed decisions about our algorithmic strategies. There are four major biases that I wish to discuss: Optimisation Bias, Look-Ahead Bias, Survivorship Bias and Psychological Tolerance Bias . Optimisation Bias This is probably the most insidious of all backtest biases. It involves adjusting or introducing additional trading parameters until the strategy performance on the backtest data set is very attractive. However, once live the performance of the strategy can be markedly different. Another name for this bias is 8220curve fitting8221 or 8220data-snooping bias8221. Optimisation bias is hard to eliminate as algorithmic strategies often involve many parameters. 8220Parameters8221 in this instance might be the entryexit criteria, look-back periods, averaging periods (i. e the moving average smoothing parameter) or volatility measurement frequency. Optimisation bias can be minimised by keeping the number of parameters to a minimum and increasing the quantity of data points in the training set. In fact, one must also be careful of the latter as older training points can be subject to a prior regime (such as a regulatory environment) and thus may not be relevant to your current strategy. One method to help mitigate this bias is to perform a sensitivity analysis . This means varying the parameters incrementally and plotting a 8220surface8221 of performance. Sound, fundamental reasoning for parameter choices should, with all other factors considered, lead to a smoother parameter surface. If you have a very jumpy performance surface, it often means that a parameter is not reflecting a phenomena and is an artefact of the test data. There is a vast literature on multi-dimensional optimisation algorithms and it is a highly active area of research. I won8217t dwell on it here, but keep it in the back of your mind when you find a strategy with a fantastic backtest Look-Ahead Bias Look-ahead bias is introduced into a backtesting system when future data is accidentally included at a point in the simulation where that data would not have actually been available. If we are running the backtest chronologically and we reach time point N . then look-ahead bias occurs if data is included for any point N k . where k gt 0 . Look-ahead bias errors can be incredibly subtle. Here are three examples of how look-ahead bias can be introduced: Technical Bugs 8211 Arraysvectors in code often have iterators or index variables. Incorrect offsets of these indices can lead to a look-ahead bias by incorporating data at N k for non-zero k . Parameter Calculation 8211 Another common example of look-ahead bias occurs when calculating optimal strategy parameters, such as with linear regressions between two time series. If the whole data set (including future data) is used to calculate the regression coefficients, and thus retroactively applied to a trading strategy for optimisation purposes, then future data is being incorporated and a look-ahead bias exists. MaximaMinima 8211 Certain trading strategies make use of extreme values in any time period, such as incorporating the high or low prices in OHLC data. However, since these maximalminimal values can only be calculated at the end of a time period, a look-ahead bias is introduced if these values are used - during - the current period. It is always necessary to lag highlow values by at least one period in any trading strategy making use of them. Survivorship Bias Survivorship bias is a particularly dangerous phenomenon and can lead to significantly inflated performance for certain strategy types. It occurs when strategies are tested on datasets that do not include the full universe of prior assets that may have been chosen at a particular point in time, but only consider those that have 8220survived8221 to the current time. As an example, consider testing a strategy on a random selection of equities before and after the 2001 market crash. Some technology stocks went bankrupt, while others managed to stay afloat and even prospered. If we had restricted this strategy only to stocks which made it through the market drawdown period, we would be introducing a survivorship bias because they have already demonstrated their success to us. In fact, this is just another specific case of look-ahead bias, as future information is being incorporated into past analysis. There are two main ways to mitigate survivorship bias in your strategy backtests: Survivorship Bias Free Datasets 8211 In the case of equity data it is possible to purchase datasets that include delisted entities, although they are not cheap and only tend to be utilised by institutional firms. In particular, Yahoo Finance data is NOT survivorship bias free, and this is commonly used by many retail algo traders. One can also trade on asset classes that are not prone to survivorship bias, such as certain commodities (and their future derivatives). Use More Recent Data 8211 In the case of equities, utilising a more recent data set mitigates the possibility that the stock selection chosen is weighted to 8220survivors8221, simply as there is less likelihood of overall stock delisting in shorter time periods. One can also start building a personal survivorship-bias free dataset by collecting data from current point onward. After 3-4 years, you will have a solid survivorship-bias free set of equities data with which to backtest further strategies. We will now consider certain psychological phenomena that can influence your trading performance. We will now consider certain psychological phenomena that can influence your trading performance. Psychological Tolerance Bias This particular phenomena is not often discussed in the context of quantitative trading. However, it is discussed extensively in regard to more discretionary trading methods. It has various names, but I8217ve decided to call it 8220psychological tolerance bias8221 because it captures the essence of the problem. When creating backtests over a period of 5 years or more, it is easy to look at an upwardly trending equity curve, calculate the compounded annual return, Sharpe ratio and even drawdown characteristics and be satisfied with the results. As an example, the strategy might possess a maximum relative drawdown of 25 and a maximum drawdown duration of 4 months. This would not be atypical for a momentum strategy. It is straightforward to convince oneself that it is easy to tolerate such periods of losses because the overall picture is rosy. However, in practice, it is far harder If historical drawdowns of 25 or more occur in the backtests, then in all likelihood you will see periods of similar drawdown in live trading. These periods of drawdown are psychologically difficult to endure. I have observed first hand what an extended drawdown can be like, in an institutional setting, and it is not pleasant 8211 even if the backtests suggest such periods will occur. The reason I have termed it a 8220bias8221 is that often a strategy which would otherwise be successful is stopped from trading during times of extended drawdown and thus will lead to significant underperformance compared to a backtest. Thus, even though the strategy is algorithmic in nature, psychological factors can still have a heavy influence on profitability. The takeaway is to ensure that if you see drawdowns of a certain percentage and duration in the backtests, then you should expect them to occur in live trading environments, and will need to persevere in order to reach profitability once more. Software Packages for Backtesting The software landscape for strategy backtesting is vast. Solutions range from fully-integrated institutional grade sophisticated software through to programming languages such as C, Python and R where nearly everything must be written from scratch (or suitable 8216plugins8217 obtained). As quant traders we are interested in the balance of being able to 8220own8221 our trading technology stack versus the speed and reliability of our development methodology. Here are the key considerations for software choice: Programming Skill 8211 The choice of environment will in a large part come down to your ability to program software. I would argue that being in control of the total stack will have a greater effect on your long term PampL than outsourcing as much as possible to vendor software. This is due to the downside risk of having external bugs or idiosyncrasies that you are unable to fix in vendor software, which would otherwise be easily remedied if you had more control over your 8220tech stack8221. You also want an environment that strikes the right balance between productivity, library availability and speed of execution. I make my own personal recommendation below. Execution CapabilityBroker Interaction 8211 Certain backtesting software, such as Tradestation, ties in directly with a brokerage. I am not a fan of this approach as reducing transaction costs are often a big component of getting a higher Sharpe ratio. If you8217re tied into a particular broker (and Tradestation 8220forces8221 you to do this), then you will have a harder time transitioning to new software (or a new broker) if the need arises. Interactive Brokers provide an API which is robust, albeit with a slightly obtuse interface. Customisation 8211 An environment like MATLAB or Python gives you a great deal of flexibility when creating algo strategies as they provide fantastic libraries for nearly any mathematical operation imaginable, but also allow extensive customisation where necessary. Strategy Complexity 8211 Certain software just isn8217t cut out for heavy number crunching or mathematical complexity. Excel is one such piece of software. While it is good for simpler strategies, it cannot really cope with numerous assets or more complicated algorithms, at speed. Bias Minimisation 8211 Does a particular piece of software or data lend itself more to trading biases You need to make sure that if you want to create all the functionality yourself, that you don8217t introduce bugs which can lead to biases. Speed of Development 8211 One shouldn8217t have to spend months and months implementing a backtest engine. Prototyping should only take a few weeks. Make sure that your software is not hindering your progress to any great extent, just to grab a few extra percentage points of execution speed. C is the 8220elephant in the room8221 here Speed of Execution 8211 If your strategy is completely dependent upon execution timeliness (as in HFTUHFT) then a language such as C or C will be necessary. However, you will be verging on Linux kernel optimisation and FPGA usage for these domains, which is outside the scope of this article Cost 8211 Many of the software environments that you can program algorithmic trading strategies with are completely free and open source. In fact, many hedge funds make use of open source software for their entire algo trading stacks. In addition, Excel and MATLAB are both relatively cheap and there are even free alternatives to each. Now that we have listed the criteria with which we need to choose our software infrastructure, I want to run through some of the more popular packages and how they compare: Note: I am only going to include software that is available to most retail practitioners and software developers, as this is the readership of the site. While other software is available such as the more institutional grade tools, I feel these are too expensive to be effectively used in a retail setting and I personally have no experience with them. Description . WYSIWYG (what-you-see-is-what-you-get) spreadsheet software. Extremely widespread in the financial industry. Data and algorithm are tightly coupled. Execution . Yes, Excel can be tied into most brokerages. Customisation . VBA macros allow more advanced functionality at the expense of hiding implementation. Strategy Complexity . More advanced statistical tools are harder to implement as are strategies with many hundreds of assets. Bias Minimisation . Look-ahead bias is easy to detect via cell-highlighting functionality (assuming no VBA). Development Speed . Quick to implement basic strategies. Execution Speed . Slow execution speed 8211 suitable only for lower-frequency strategies. Cost . Cheap or free (depending upon license). Alternatives . OpenOffice Description . Programming environment originally designed for computational mathematics, physics and engineering. Very well suited to vectorised operations and those involving numerical linear algebra. Provides a wide array of plugins for quant trading. In widespread use in quantitative hedge funds. Execution . No native execution capability, MATLAB requires a separate execution system. Customisation . Huge array of community plugins for nearly all areas of computational mathematics. Strategy Complexity . Many advanced statistical methods already available and well-tested. Bias Minimisation . Harder to detect look-ahead bias, requires extensive testing. Development Speed . Short scripts can create sophisticated backtests easily. Execution Speed . Assuming a vectorisedparallelised algorithm, MATLAB is highly optimised. Poor for traditional iterated loops. Cost . Description . High-level language designed for speed of development. Wide array of libraries for nearly any programmatic task imaginable. Gaining wider acceptance in hedge fund and investment bank community. Not quite as fast as CC for execution speed. Execution . Python plugins exist for larger brokers, such as Interactive Brokers. Hence backtest and execution system can all be part of the same 8220tech stack8221. Customisation . Python has a very healthy development community and is a mature language. NumPySciPy provide fast scientific computing and statistical analysis tools relevant for quant trading. Strategy Complexity: Many plugins exist for the main algorithms, but not quite as big a quant community as exists for MATLAB. Bias Minimisation . Same bias minimisation problems exist as for any high level language. Need to be extremely careful about testing. Development Speed . Pythons main advantage is development speed, with robust in built in testing capabilities. Execution Speed . Not quite as fast as C, but scientific computing components are optimised and Python can talk to native C code with certain plugins. Cost . FreeOpen Source Alternatives . Ruby. Erlang. Haskell Description . Environment designed for advanced statistical methods and time series analysis. Wide array of specific statistical, econometric and native graphing toolsets. Large developer community. Execution . R possesses plugins to some brokers, in particular Interactive Brokers. Thus an end-to-end system can written entirely in R. Customisation . R can be customised with any package, but its strengths lie in statisticaleconometric domains. Strategy Complexity . Mostly useful if performing econometric, statistical or machine-learning strategies due to available plugins. Bias Minimisation . Similar level of bias possibility for any high-level language such as Python or C. Thus testing must be carried out. Development Speed . R is rapid for writing strategies based on statistical methods. Execution Speed . R is slower than C, but remains relatively optimised for vectorised operations (as with MATLAB). Cost . FreeOpen Source Alternatives . SPSS. Stata Description . Mature, high-level language designed for speed of execution. Wide array of quantitative finance and numerical libraries. Harder to debug and often takes longer to implement than Python or MATLAB. Extremely prevalent in both the buy - and sell-side. Execution . Most brokerage APIs are written in C and Java. Thus many plugins exist. Customisation . CC allows direct access to underlying memory, hence ultra-high frequency strategies can be implemented. Strategy Complexity . C STL provides wide array of optimised algorithms. Nearly any specialised mathematical algorithm possesses a free, open-source CC implementation on the web. Bias Minimisation . Look-ahead bias can be tricky to eliminate, but no harder than other high-level language. Good debugging tools, but one must be careful when dealing with underlying memory. Development Speed . C is quite verbose compared to Python or MATLAB for the same algorithmm. More lines-of-code (LOC) often leads to greater likelihood of bugs. Execution Speed . CC has extremely fast execution speed and can be well optimised for specific computational architectures. This is the main reason to utilise it. Cost . Various compilers: LinuxGCC is free, MS Visual Studio has differing licenses. Alternatives . C. Java. Scala Different strategies will require different software packages. HFT and UHFT strategies will be written in CC (these days they are often carried out on GPUs and FPGAs ), whereas low-frequency directional equity strategies are easy to implement in TradeStation, due to the 8220all in one8221 nature of the softwarebrokerage. My personal preference is for Python as it provides the right degree of customisation, speed of development, testing capability and execution speed for my needs and strategies. If I need anything faster, I can 8220drop in8221 to C directly from my Python programs. One method favoured by many quant traders is to prototype their strategies in Python and then convert the slower execution sections to C in an iterative manner. Eventually the entire algo is written in C and can be 8220left alone to trade8221 In the next few articles on backtesting we will take a look at some particular issues surrounding the implementation of an algorithmic trading backtesting system, as well as how to incorporate the effects of trading exchanges. We will discuss strategy performance measurement and finally conclude with an example strategy. 8212 By Michael Halls-Moore from QuantStart About the Author Mike Halls-Moore Michael graduated with a MMath in Mathematics from the University of Warwick, gained a PhD from Imperial College London in Fluid Dynamics, and was working in a hedge fund as a quantitative trading developer for the last few years in Mayfair, London. He now spends time on research, development, backtesting and implementation of intraday algorithmic trading strategies. Time really flies it is hard to believe that it has been over a month since my last post. Work and life in general have consumed much of my time lately and left little time for research and blog posts. Anyway, on to the post This post will be the first in a series of to cover a momentum strategy using R. One of my favorite strategies is a momentum or relative strength strategy. Here are just a few of the reasons why I like momentum: Simple to implement Long only or longshort portfolios Many ways to define the strength or momentum measure It just works Also, a momentum strategy lends itself well to potential for diversification. The universe of instruments can be infinite, but the instruments traded are finite. Think about it this way Investor A looks at 10 instruments and invests 1000 in the top 5 instruments ranked by momentum. Investor B looks at 100 instruments and invests 1000 in the top 5 instruments ranked by momentum. Investor A is limiting his potential for diversification by only having a universe of 10 instruments. Investor B has a much larger universe of instruments and can in theory be more diversified. Theoretically speaking, you can trade an infinite number of instruments with a finite amount of trading capital using a momentum or relative strength strategy. Check out these links for further reading In this first post of the series on momentum, I will go over some of the basic setup and functions we will be using. The first step is to get data from yahoo. Note that the for loop converts the data to monthly and subsets the data so that the only column we keep is the adjusted close column. We now have four objects (XLY, XLP, XLE, XLF) that have the Adjusted Close price. The next step is to merge these four objects into a single object holding the Adjusted Close price. We can do this in a simple one-liner in R For the factor that will be ranked, I will use the 3 period rate of change (ROC). Here8217s another way to create the symbolsclose object. create new environment to store data symEnv lt - new. env() getSymbols assigns to new environment getSymbols(symbols, from0392000-01-01039, envsymEnv) function aggregates and returns Adjusted column f lt - function(x) sym lt - sub(quot..quot, quotquot, names(x)1) Ad(to. monthly(x, indexAt039lastof039,drop. timeTRUE, namesym)) use eapply to call f() on each symbol symbolsclose lt - do. call(merge, eapply(symEnv, f)) I have problems replicating this analysis. First of all, the to. monthly(x, indexAt8221lastof8221) does not get me the last day of the month, as I would expect, for example: gt x to. monthly(x, indexAt8221lastof8221) x. Open x. High x. Low x. Close x. Volume 2012-12-29 69.71 71.44 69.57 71.42 16384800 2013-01-29 72.95 78.59 72.00 77.35 195100300 2013-02-26 77.76 79.51 77.16 77.70 128912200 x. Adjusted 2012-12-29 71.42 2013-01-29 77.35 2013-02-26 77.70 If I run the first part of code and type head(XLE) I get the following: gt head(XLE) XLE. Adjusted 2000-01-29 22.67 2000-02-27 21.71 2000-03-29 24.33 2000-04-28 23.96 2000-05-29 26.78 2000-06-28 25.30 as you can see this is totally different from what is shown in the article above, the prices are different and the index is different (not the last day of the month). Can someone explain why this is like that Why is data different Why indexAt8221lastof8221 produces the above results What is the difference between 8220lastof8221 and 8220endof8221 Thank you Oh, 8220x8221 in the above is XLE.

No comments:

Post a Comment