Tuesday 10 October 2017

Quantstart Forex Trading


Forex Trading Diary 3 - Aprire Sourcing il Forex Trading System Nell'odierna ingresso del Trading Forex Diario voglio discutere il piano a lungo termine per il sistema di trading forex. Oltre voglio delineare come Ive ha usato Pythons Decimale tipo di dati per fare calcoli più precisi. Fino ad oggi, weve modo di sperimentare con il OANDA Resto API al fine di vedere come rispetto al API fornite da Interactive Brokers. Weve anche visto come aggiungere un elemento di replica portafoglio di base, come il primo passo verso un adeguato sistema di backtesting event-driven. Ive ha avuto anche alcuni commenti utili su entrambi i precedenti articoli (1 e 2), il che suggerisce che molti di voi sono pronti a cambiare e l'estensione dei stessi codici. Aprire Sourcing il Forex Trading System Per le ragioni sopra esposte ho deciso di open-source del sistema di trading forex. Cosa significa Ciò significa che tutto il codice attuale e futuro sarà disponibile gratuitamente, sotto una licenza open source liberale MIT, sul sito web di controllo della versione Github al seguente URL: githubmhallsmooreqsforex. Per quelli di voi che hanno usato git e GitHub prima, sarete in grado di git clone del pronti contro termine e iniziare a modificarlo per i propri scopi. L'Automated Forex Trading System QuantStart è ora open-source sotto licenza MIT liberale. È possibile trovare le ultime codice su Github sotto il repository qsforex a githubmhallsmooreqsforex. Per quelli di voi che sono nuovi per il controllo di versione sorgente, probabilmente vorrete leggere come git (e la versione di controllo in generale) lavora con il fantastico e-Book gratuito Pro Git. Vale la pena di spendere un po 'di tempo conoscere controllo del codice sorgente in quanto vi farà risparmiare una quantità enorme di futuro mal di testa se si spende un sacco di tempo nella programmazione e aggiornamento dei progetti L'avvio rapido di un sistema Ubuntu è quello di installare git: Sarà quindi necessario fare una directory per il progetto qsforex di vivere e clonare il progetto dal sito Github come segue: a questo punto è necessario creare un ambiente virtuale in cui eseguire il codice: sarà quindi necessario installare i requisiti (questo richiederà po 'di tempo): Finalmente sarà necessario creare un link simbolico nel proprio ambiente virtuale, Python per consentire di digitare importazione qsforex nel codice (ed eseguirlo): Come ho detto nelle voci precedenti è necessario creare le variabili di ambiente necessarie per le credenziali di autenticazione OANDA. Si prega di consultare diario 2 per le istruzioni su come fare questo. Si prega di prestare attenzione al README associato con il pronti contro termine, in quanto contiene istruzioni per l'installazione, una dichiarazione e una garanzia sull'uso del codice. Dal momento che il software è in modalità alfa, queste istruzioni diventano più semplice come passare del tempo. In particolare cercherò di avvolgere il progetto in un pacchetto di Python in modo che possa essere facilmente installato tramite pip. Se avete domande circa la procedura di installazione, quindi non esitate a scrivermi su mikequantstart. Longer-Term Plan La filosofia del sistema di trading forex, come con il resto del sito QuantStart, è quello di cercare di imitare il commercio di vita reale quanto più possibile nel nostro backtesting. Questo significa includere i dettagli che sono spesso esclusi dai più ricerca orientata situazioni backtesting. Latenza, interruzioni del server, automazione, controllo, i costi di transazione realistici saranno tutti inclusi all'interno dei modelli per darci una buona idea di quanto bene una strategia rischia di eseguire. Dal momento che avremo accesso a spuntare dati (timestamp bidask) saremo in grado di integrare la diffusione nei costi di transazione. Possiamo anche modellare lo slittamento. E 'meno straighforward di impatto sul mercato del modello, anche se questo è meno di una preoccupazione a valori commerciali più piccoli. Oltre ai costi di transazione vogliamo robusto modello di gestione del portafoglio con sovrapposizioni di rischio e la posizione di dimensionamento. Quindi, ciò che è attualmente incluso nel Forex Trading System fino ad oggi Architettura Event-Driven - Il sistema di forex trading è stato progettato come un sistema event-driven da zero, in quanto questo è il modo in un sistema di trading intraday verrà implementato in un ambiente vivo . Prezzo Streaming - Abbiamo un oggetto prezzo base streaming. Questo attualmente gestisce sottoscrizione di solo una singola coppia, ma possiamo facilmente modificare questo per iscriversi a più coppie di valute. Signal Generation - Siamo in grado di integrare le strategie di trading (basate direttamente sul prezzo di zecche passati e presenti) utilizzando l'oggetto strategia, che crea oggetti SignalEvent. Di esecuzione degli ordini - Abbiamo un sistema di esecuzione degli ordini ingenua che invia ciecamente gli ordini dal portafoglio di OANDA. Con ciecamente voglio dire che non ci sia la gestione del rischio o la posizione di dimensionamento in corso, né alcuna esecuzione algoritmica che potrebbe portare a una riduzione dei costi di transazione. GBP Valuta base - Per mantenere le cose semplici, Ive ha scritto solo il sistema per la valuta di base GBP. Questo è forse l'aspetto più importante di modificare data quanti di voi avranno conti pratica denominate in USD, EUR, CAD, JPY, AUD e NZD GBPUSD Trading - Ho scelto il cavo come la coppia di valute per testare la posizione iniziale e oggetti Portfolio con. La gestione di più coppie di valute è un importante passo successivo. Ciò comporterà modifiche alla posizione e di portafoglio calcoli. Manipolazione decimale - Qualsiasi sistema di produzione commerciale deve gestire correttamente calcoli di valuta. In particolare, i valori di valuta non devono essere conservati in virgola mobile tipi di dati, dal momento che gli errori di arrotondamento si accumulano. Si prega di vedere questo fantastico articolo sul floating point rappresentazioni per ulteriori dettagli. LongShort Trading - Tra le voci di diario 2 e 3 ho aggiunto la possibilità di breve una coppia di valute (al contrario di solo essere in grado di andare a lungo). Fondamentalmente, questo è anche unità testata. Local Manipolazione Portfolio - A mio parere la realizzazione di un backtest che gonfia le prestazioni strategia a causa di ipotesi irrealistiche è fastidioso al meglio e molto redditizio nel peggiore dei casi introduzione di un oggetto portafoglio locale che replica i calcoli OANDA significa che siamo in grado di controllare i nostri calcoli interni nello svolgimento delle pratiche negoziazione. che ci dà maggiore fiducia quando in seguito usiamo questo stesso oggetto portafoglio per backtesting sui dati storici. Unit test per PositionPortfolio - Mentre Ive non menzionato direttamente a pagine di diario 1 e 2, Ive stato effettivamente scrivendo alcuni test di unità per il Portafoglio e posizionare gli oggetti. Dal momento che questi sono così cruciali per il calcolo della strategia, si deve essere estremamente fiducioso che essi svolgono come previsto. Un ulteriore vantaggio di questi test è che permettono il calcolo sottostante da modificare, in modo tale che se tutti i test ancora passano, possiamo essere certi che il sistema nel suo complesso continuerà a comportarsi come previsto. In questa fase il Forex Trading System manca le seguenti funzionalità: Manipolazione Unità - Il sistema sta generando un sacco di slittamento a causa della natura ad alta frequenza dei dati forniti da tick OANDA. Ciò significa che l'equilibrio di portafoglio calcolato a livello locale non è che riflette l'equilibrio calcolato da OANDA. Fino corretta gestione degli eventi e la regolazione slittamento avviene, questo significa che un backtest non riflettere correttamente la realtà. Valute multiple Base - Ci sono attualmente limitati a GBP. Per lo meno abbiamo bisogno di includere i principali denominazioni di valute - USD, EUR, CAD, AUD, JPY e NZD. Coppie di valute multiple - Allo stesso modo abbiamo bisogno di sostenere le principali coppie di valute al di là di Cavo (GBPUSD). Ci sono due aspetti di questo. Il primo è quello di gestire correttamente i calcoli quando né la base o citazione di una coppia di valute è uguale alla valuta del conto denominazione. Il secondo aspetto è quello di supportare più posizioni in modo da poter scambiare un portafoglio di coppie di valute. Gestione del rischio - Molti estensivi di ricerca completamente ignorare la gestione del rischio. Purtroppo questo è generalmente necessario per brevità nel descrivere le regole di una strategia. In realtà abbiamo - must - utilizziamo una sovrapposizione di rischio quando trading, altrimenti è molto probabile che ci sarà una perdita sostanziale a un certo punto. Questo non vuol dire che la gestione del rischio in grado di prevenire questo del tutto, ma rende certamente meno probabile Ottimizzazione Portfolio - In un contesto istituzionale avremo un mandato d'investimento, che detterà un sistema di gestione del portafoglio solido con diverse regole di allocazione. In un ambiente retailpersonal si potrebbe desiderare di utilizzare un approccio di dimensionamento posizione così come il criterio di Kelly per massimizzare il nostro tasso di crescita composto a lungo termine. Strategie robusti - mi hanno dimostrato solo qualche semplice segnale casuale generare strategie di giocattoli fino ad oggi. Ora che stiamo cominciando a creare un sistema di forex trading intraday affidabile, dovremmo iniziare a svolgere alcune strategie più interessanti. diario del futuro si concentreranno sulle strategie tratte da una miscela di indicatorsfilters tecnici così come i modelli di serie storiche e tecniche di apprendimento automatico. Remote Deployment - Dal momento che siamo potenzialmente interessati nel commercio di 24 ore (almeno durante la settimana) abbiamo bisogno di una messa a punto più sofisticati di gestione del backtester su una macchina locale desktoplaptop a casa. E 'fondamentale che si crei un robusto dispiegamento server remoto del nostro sistema con ridondanza e monitoraggio adeguato. Backtesting Storico - Abbiamo costruito l'oggetto portafoglio per permetterci di effettuare backtesting realistico. A questo punto ci manca un sistema di archiviazione dei dati tick storici. Negli articoli successivi vedremo ottenere dati storici tick e la memorizzazione in un database appropriato, ad esempio HDF5. Commercio Database - Alla fine ci vorranno memorizzare i nostri mestieri dal vivo nel nostro database. Questo ci permetterà di svolgere le nostre analisi sui dati di trading dal vivo. Una buona raccomandazione per un database relazionale sarebbe PostgreSQL o MySQL. Monitoraggio e High Availability - Dal momento che stiamo prendendo in considerazione un sistema intraday ad alta frequenza, dobbiamo mettere un monitoraggio completo e la ridondanza elevata disponibilità sul posto. Questo significa che la segnalazione su l'utilizzo della CPU, l'utilizzo del disco, della rete IO, la latenza e la verifica che gli script periodici sono impostati per continuare a correre. Inoltre abbiamo bisogno di una strategia di backup e ripristino. Chiedetevi che cosa riserva piani si avrebbe in atto se si ha grandi posizioni aperte, in un mercato volatile, e il server improvvisamente morto. Credetemi, succede multipla Integrazione BrokerFIX - Al momento stiamo fortemente accoppiati al broker OANDA. Come ho già detto questo è semplicemente perché mi sono imbattuto in loro API e trovato ad essere un'offerta moderna. Ci sono un sacco di altri broker là fuori, molti dei quali supportano il protocollo FIX. Aggiunta di una capacità FIX aumenterebbe il numero di mediatori che potrebbero essere utilizzati con il sistema. GUI di controllo e reporting - In questo momento il sistema è linea completamente consolecommand base. Per lo meno avremo bisogno di un po 'di grafici di base per visualizzare i risultati backtest. Un sistema più sofisticato incorporerà statistiche di riepilogo di mestieri, metriche di performance a livello di strategia e le prestazioni complessive del portafoglio. Questa GUI può essere implementato usando un sistema a finestre multi-piattaforma, come Qt o Tkinter. Potrebbe anche essere presentato con un front-end web-based, utilizzando un web-quadro come Django. Come si può vedere c'è un sacco di funzionalità a sinistra sulla tabella di marcia Detto questo, ogni nuova voce del diario (e potenziali contributi della comunità) si sposta avanti il ​​progetto. Decimali tipi di dati Ora che abbiamo discusso il piano a lungo termine voglio presentare alcuni dei cambiamenti che ho fatto per il codice dal diario 2. In particolare, voglio descrivere come ho modificato il codice per gestire il data - decimale digitare invece di utilizzare lo stoccaggio in virgola mobile. Questo è un cambiamento estremamente importante in quanto floating point rappresentazioni sono una notevole fonte di errori a lungo termine in sistemi portafoglio e gestione degli ordini. Python supporta nativamente rappresentazioni decimali ad una precisione arbitraria. La funzionalità è contenuto all'interno della libreria decimale. In particolare abbiamo bisogno di modificare il valore Chiunque usi che appare in un calcolo della posizione di un decimale di dati-tipo. Questo comprende l'utile di unità, l'esposizione, pip, il profitto e la percentuale. In questo modo siamo in pieno controllo di come i problemi di arrotondamento sono gestiti quando si tratta di rappresentazioni di valute che hanno due cifre decimali di precisione. In particolare abbiamo bisogno di scegliere il metodo di arrotondamento. Python supporta alcuni tipi differenti, ma abbiamo intenzione di andare con ROUNDHALFDOWN. che arrotonda all'intero più vicino con i legami che vanno verso lo zero. Ecco un esempio di come il codice viene modificato per gestire decimali tipi di dati dai loro precedenti rappresentazioni in virgola mobile. Di seguito è riportato un elenco di position. py: Si noti che dobbiamo fornire decimale con un argomento stringa, piuttosto che un argomento in virgola mobile. Questo perché una stringa è specificare precisamente la precisione del valore, mentre un tipo a virgola mobile non. Si noti anche che quando si comincia immagazzinare i nostri mestieri in un database relazionale (come sopra descritto nella tabella di marcia) abbiamo bisogno di fare in modo che una volta utilizzato il corretto tipo di dato. PostgreSQL e MySQL supportano una rappresentazione decimale. E 'fondamentale che noi utilizziamo questi tipi di dati quando creiamo il nostro schema di database, altrimenti incorrere in errori di arrotondamento che sono estremamente difficili da diagnosticare Per coloro che sono interessati ad una discussione più approfondita di questi problemi, in matematica e informatica, la oggetto di Analisi numerica copre i problemi di archiviazione in virgola mobile, tra molti altri argomenti interessanti. Nelle successive pagine di diario che ci accingiamo a discutere di come ho applicato test delle unità di codice e come possiamo estendere il software a più coppie di valute modificando i calcoli di posizione. Pieno Codice Python Dal momento che il codice sorgente completo per il progetto è ora open source, sotto licenza MIT. si può sempre essere scoperto a githubmhallsmooreqsforex. con la documentazione di accompagnamento. Se volete leggere le altre voci della serie, si prega di seguire i link qui sotto: appena iniziato con Quantitative TradingForex Trading Diary 5 - Trading coppie di valute multiple Ieri ho pubblicato alcune importanti modifiche al software QSForex. Queste modifiche hanno aumentato l'utilità del sistema in modo significativo al punto in cui è quasi pronto per più giorni backtesting tick-dati su una serie di coppie di valute. Le seguenti modifiche sono state pubblicate a Github: Ulteriori modifiche sia per la posizione e gli oggetti portafoglio al fine di consentire a più coppie di valute per essere scambiati, nonché valute che non sono denominati nella valuta del conto. Quindi un account GBP-deonominated possono ora scambiare EURUSD, per esempio. Revisione completa di come la posizione e calcolare portafoglio si apre, si chiude, aggiunte e rimozioni di unità. L'oggetto la società svolge il lavoro pesante lasciando un oggetto portafoglio relativamente magro. L'aggiunta della prima strategia non banale, cioè il noto Moving strategia Average Crossover con un paio di semplici medie mobili (SMA). Modifiche ai backtest. py per renderlo single-threaded e deterministica. Nonostante il mio ottimismo che un approccio multi-threaded andrei essere troppo dannoso per simulazione la precisione, ho trovato difficile ottenere risultati dei test retrospettivi soddisfacenti con un approccio multi-threaded. Introdotto uno script uscita Matplotlib-based molto di base per la visualizzazione della curva azionaria del portafoglio. La generazione curva di equità è in una fase iniziale e richiede ancora un sacco di lavoro. Come ho già detto nella voce precedente. per quelli di voi che non hanno familiarità con QSForex e vengono a questa serie diario forex per la prima volta, vi consiglio vivamente di avere una lettura delle seguenti voci di diario per arrivare fino a velocità con il software: Oltre alla pagina di Github per QSForex : multiple valuta supportano una caratteristica che ho sempre discusso in queste pagine di diario è la capacità di supportare più coppie di valute. In questa fase Ive ora ha modificato il software per consentire diverse denominazioni conto, dal momento che in precedenza era la valuta GBP hardcoded. E 'inoltre ora possibile scambi di altre coppie di valute, ad eccezione di quelli che sono costituiti da una base o citazione in Yen giapponesi (JPY). Quest'ultimo è dovuto al modo in tick dimensioni sono caclulated in valute JPY. Per raggiungere questo ho modificato come il profitto viene calcolato quando le unità vengono rimossi o la posizione viene chiusa. Ecco il frammento di corrente per il calcolo pips, nel file position. py: Se chiudiamo la posizione al fine di realizzare un guadagno o una perdita, abbiamo bisogno di utilizzare il seguente frammento per closeposition. anche nel file position. py: In primo luogo si ottiene l'offerta e chiedere i prezzi sia per la coppia di valute oggetto di scambio così come la coppia di valute quotehome. Per esempio, per un account denominato in sterline, in cui ci stiamo trading EURUSD, dobbiamo ottenere prezzi per USDGBP, poiché euro è la valuta di base e USD è la citazione. In questa fase, controlliamo se la posizione in sé è una posizione lunga o corta e quindi calcolare il prezzo di rimozione appropriata e quotehome rimuovere prezzo, che sono dati rispettivamente da removeprice e qhclose. Abbiamo quindi aggiornare i prezzi correnti e medi all'interno della posizione e, infine, calcoliamo la PampL moltiplicando i semi, il prezzo di rimozione quotehome e quindi il numero di unità sono state chiudendo. Abbiamo completamente eliminato la necessità di discutere l'esposizione, che era una variabile ridondante. Questa formula fornisce quindi correttamente il PampL contro qualsiasi (non-JPY denominate) coppia di valute commercio. Revisione della posizione e del portafoglio Handling Oltre alla possibilità di scambi di coppie di valute multiple Ive anche raffinato come la posizione e Portfolio condividono la responsabilità di posizioni di apertura e di chiusura, così come le unità aggiungendo e sottraendo. In particolare, Ive ha spostato gran parte del codice di posizione di gestione che era in portfolio. py in position. py. Questo è più naturale in quanto la posizione dovrebbe prendere cura di se stessa e non delegando al portafoglio In particolare, i addunits. removeunits e metodi closeposition sono state create o migliorate: In questi ultimi due si può vedere come è implementato la nuova formula per il calcolo del profitto. Molte delle funzionalità della classe portafoglio è quindi stato corrispondentemente ridotta. In particolare, le modalità addnewposition. addpositionunits. removepositionunits e closeposition sono stati modificati per tener conto del fatto che il lavoro di calcolo è stato fatto nell'oggetto Posizione: In sostanza tutti (a parte addnewposition) semplicemente controllare se la posizione esiste per quella coppia di valute e quindi chiamare il metodo corrispondente posizione , tenendo conto del profitto, se necessario. Moving Average Crossover strategia Weve ha discusso la strategia di Moving Average Crossover prima su QuantStart. nel contesto delle azioni di trading. È un utilissimo indicatore strategia banco di prova perché è facile replicare i calcoli a mano (almeno a frequenze più basse), al fine di verificare che il backtester si comporta come dovrebbe. L'idea di base della strategia è come segue: Due semplici filtri medi separati movimento sono creati, con vari periodi lookback, di una particolare serie temporale. 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. L'implementazione è semplice. In primo luogo, mettiamo a disposizione un metodo calcrollingsma che ci permette di utilizzare in modo più efficiente il precedente periodo di tempo di calcolo SMA al fine di generare il nuovo, senza dover ricalcolare completamente la SMA ad ogni passo. In secondo luogo, generare segnali in due casi. Nel primo caso si genera un segnale se la breve SMA supera la lunga SMA e di non lunga la coppia di valute. Nel secondo caso si genera un segnale se la lunga SMA supera breve SMA e siamo già lunga. Ho impostato la finestra predefinita di essere 500 battiti per il breve SMA e 2.000 zecche per il lungo SMA. Ovviamente in una impostazione di questi parametri produttivo verrà migliorato, ma funzionano bene per i nostri scopi di test. Single-threaded Backtester Un altro cambiamento importante è stato quello di modificare il componente backtesting di essere single-threaded, piuttosto che multi-threaded. Ho fatto questo cambiamento, perché ho avuto un momento molto difficile sincronizzare i fili per eseguire in modo che si verificherebbe in un ambiente vivo. E 'in sostanza ha fatto sì che i prezzi d'entrata e di uscita sono stati molto realistico, spesso si verificano ore (virtuali) dopo la zecca reale era stato ricevuto. Quindi ho incorporato lo streaming di TickEvent oggetti nel circuito backtesting, come si può vedere nel seguente frammento di backtest. py: Si noti la linea di ticker. streamnexttick (). Questo è chiamato prima di un polling della coda eventi e come tale sarà sempre garantire che un nuovo evento tick pervenute prima che la coda viene interrogato di nuovo. In particolare, ciò significa che un segnale viene eseguita come arrivano nuovi dati di mercato, anche se c'è un certo ritardo nel processo di ordinazione a causa di slittamento. Ive anche impostare un valore maxiters che controlla per quanto tempo il ciclo di backtesting continua. In pratica, questo dovrà essere abbastanza grande quando si tratta di più valute su più giorni, ma Ive impostato su un valore di default che permette per un singolo giorno di dati di una coppia di valute. Il metodo streamnexttick della classe handler prezzo è simile a streamtoqueue tranne che chiama il iteratore metodo next () manualmente, piuttosto che svolgere il segno di spunta in streaming in un ciclo for: Si noti che si ferma dopo aver ricevuto un'eccezione StopIteration. Questo consente al codice di riprendere piuttosto che schiantarsi l'eccezione. Matplotlib uscita Ive ha anche creato uno script molto semplice uscita Matplotlib per visualizzare la curva di equità. output. py attualmente vive nella directory backtest di QSForex e è il seguente: Si noti che c'è una nuova variabile settings. py ora chiamato OUTPUTRESULTSDIR. che deve essere impostato nelle impostazioni. Ce l'ho indicando una directory temporanea altrove sul mio file system come io non voglio aggiungere accidentalmente alcun risultato netto backtest alla base di codice La curva di equità funziona avendo un valore di equilibrio aggiunto a un elenco di dizionari, con un dizionario corrispondente ad una time-stamp. Una volta che il back-test è completo l'elenco dei dizionari è convertito in un Pandas dataframe e il metodo tocsv viene utilizzato per equity. csv uscita. Questo script uscita poi semplicemente si legge nel file e traccia la colonna di equilibrio della successiva dataframe. È possibile vedere il frammento per le appendequityrow e outputresults metodi della classe portafoglio di seguito: Ogni volta executesignal si chiama, il primo metodo viene chiamato e aggiunge il valore timestampbalance al membro del patrimonio netto. Alla fine degli outputresults backtest si chiama semplicemente che converte l'elenco dei dizionari ad un dataframe e poi uscite directory OUTPUTRESULTSDIR specificata. Purtroppo, questo non è un modo particolarmente appropriato di creare una curva netto si verifica solo quando viene generato un segnale. Ciò significa che non prende in considerazione PampL non realizzato. Anche se questo è il modo vero e proprio avviene la negoziazione (havent realmente fatto i soldi fino a quando si chiude una posizione) significa che la curva di equità rimarrà completamente pianeggiante tra gli aggiornamenti di equilibrio. Peggio ancora, Matplotlib imposterà interpolazione lineare tra questi punti, fornendo così la falsa impressione del PampL non realizzato. La soluzione a questo problema è quello di creare un inseguitore PampL realizzato per la classe posizione che aggiorna correttamente su ogni tick. Questo è un po 'più computazionalmente costoso, ma non consentire una curva di equità più utile. Questa funzione è prevista per una data successiva Fasi successive Il principale compito successivo per QSForex è quello di permettere di più giorni backtesting. Attualmente l'oggetto HistoricCSVPriceHandler carica un solo valore di giorni di dati di Dukascopy tick per eventuali coppie di valute specificate. Per consentire più giorni testando sarà necessario caricare e streaming ogni giorno sequenzialmente per evitare RAM riempimento con tutta la storia dei dati tick. Ciò richiederà una modifica di come funziona il metodo streamnexttick. Una volta che è completo permetterà backtesting strategia a lungo termine su più coppie. Un altro compito è quello di migliorare l'uscita della curva di equità. Al fine di calcolare una qualsiasi delle usuali parametri di rendimento (come l'indice di Sharpe) avremo bisogno di calcolare i rendimenti percentuali in un determinato periodo di tempo. Tuttavia, questo richiede che bin i dati delle zecche nel bar al fine di calcolare il ritorno per un determinato periodo di tempo. Tale categorizzazione deve avvenire su una frequenza di campionamento che è simile alla frequenza negoziazione o Ratio Sharpe non sarà rispecchiano l'effettiva riskreward della strategia. Questa categorizzazione non è un esercizio banale come ci sono un sacco di ipotesi che vanno in generando un prezzo per ogni bin. Una volta che questi due compiti sono completi, e dati sufficienti è stato acquisito, saremo in grado di backtest una vasta gamma di tick-dati basati strategie forex e produrre curve di patrimonio netto della maggior parte dei costi di transazione. Inoltre, sarà estremamente semplice per testare queste strategie sul conto pratica carta-trading fornito da OANDA. Questo dovrebbe consentire di fare molto meglio decisioni sul fatto che per eseguire una strategia rispetto ad una ricerca orientata sistema più backtesting. Appena iniziato con quantitativa TradingQSForex è un backtesting event-driven open-source e la piattaforma di trading dal vivo per l'uso nel mercato dei cambi (Forex), attualmente in uno stato alfa. E 'stato creato come parte della serie Forex Trading Diario su QuantStart di fornire alla comunità di trading sistematico con un robusto motore di trading che permette di implementazione e test strategia semplice forex. Il software viene fornito con una licenza MIT permissiva (vedi sotto). Open-Source - QSForex è stato rilasciato sotto estremamente permissiva open-source licenza MIT, che permette l'uso completo in applicazioni sia di ricerca e commerciali, senza restrizioni, ma senza la garanzia di alcun genere. Gratuito - QSForex è completamente gratuito e non costa nulla per scaricare o utilizzare. Collaborazione - Come QSForex è open-source molti sviluppatori collaborano per migliorare il software. Le nuove caratteristiche sono aggiunte di frequente. Qualsiasi bug sono rapidamente determinati e fissi. Sviluppo Software - QSForex è scritto nel linguaggio di programmazione Python per semplice supporto cross-platform. QSForex contiene una serie di test di unità per la maggior parte del suo codice di calcolo e di nuovi test vengono aggiunte costantemente per nuove funzionalità. Event-Driven Architecture - QSForex è completamente sia per backtesting e trading dal vivo, che porta a transizione immediata delle strategie da una fase researchtesting ad una implementazione di trading dal vivo event-driven. Costi di transazione - i costi di spread sono incluse per impostazione predefinita per tutte le strategie backtested. Backtesting - QSForex dispone intraday tick risoluzione più giorni multi-valuta coppia di backtesting. Trading - QSForex attualmente supporta trading intraday dal vivo utilizzando l'API Brokerage OANDA attraverso un portafoglio di coppie. Metriche delle prestazioni - QSForex attualmente supporta la misurazione delle prestazioni di base e la visualizzazione patrimonio attraverso le librerie di visualizzazione matplotlib e Seaborn. Installazione e Uso 1) Visita oanda e la configurazione di un account per ottenere le credenziali di autenticazione API, che sarà necessario effettuare trading dal vivo. Spiego come realizzare questo fuori in questo articolo: quantstartarticlesForex-Trading-diario-1-automatizzato-Forex-Trading-con-la-OANDA-API. 2) Clone questo repository git in una posizione adatta sul computer utilizzando il seguente comando nel terminale: git clone githubmhallsmooreqsforex. git. In alternativa è possibile scaricare il file zip del ramo principale corrente githubmhallsmooreqsforexarchivemaster. zip. 3) Creare un set di variabili di ambiente per tutte le impostazioni presenti nel file settings. py nella directory principale dell'applicazione. (.) In alternativa, è possibile difficile codificare le impostazioni specifiche sovrascrivendo la os. environ. get inviti a ciascuna impostazione: 4) Creare un ambiente virtuale (virtualenv) per il codice QSForex e utilizzare pip per installare i requisiti. Per esempio in un sistema basato su Unix (Mac o Linux) si potrebbe creare una tale directory come segue inserendo i seguenti comandi nel terminale: Questo creerà un nuovo ambiente virtuale per installare i pacchetti in. Ipotizzando di aver scaricato il repository git QSForex in una directory ad esempio come projectsqsforex (cambiare questa directory sotto a dove è stato installato QSForex), quindi al fine di installare i pacchetti sarà necessario eseguire i seguenti comandi: Questo richiederà un certo tempo come NumPy, SciPy, Panda, scikit-learn e Matplotlib deve essere compilato. Ci sono molti pacchetti necessari per far funzionare tutto questo, quindi per favore dare un'occhiata a questi due articoli per ulteriori informazioni: Sarà inoltre necessario creare un link simbolico dalla directory site-packages per la directory di installazione QSForex in modo da essere in grado di chiamare importare qsforex all'interno del codice. Per fare questo è necessario un comando simile al seguente: assicurarsi di modificare projectsqsforex alla directory di installazione e venvqsforexlibpython2.7site-pacchetti nella directory di pacchetti sito virtualenv. Ora sarà in grado di eseguire correttamente i comandi successivi. 5) A questo punto, se si desidera semplicemente effettuare pratica o trading dal vivo, allora è possibile eseguire python tradingtrading. py. che utilizzerà la strategia di trading TestStrategy predefinita. Questo acquista o vende semplicemente una coppia di valute ogni 5 tick. E 'puramente per il test - non usarlo in un ambiente di trading dal vivo Se si desidera creare una strategia più utile, quindi è sufficiente creare una nuova classe con un nome descrittivo, ad esempio MeanReversionMultiPairStrategy e assicurarsi che ha un metodo calculatesignals. Sarà necessario passare questa classe List le coppie così come la coda di eventi, come in tradingtrading. py. Si prega di guardare strategystrategy. py per i dettagli. 6) Al fine di procedere a qualsiasi backtesting è necessario produrre dati forex simulati o scaricare i dati storici tick. Se si desidera provare semplicemente il software fuori, il modo più rapido per generare un esempio backtest è quello di generare alcuni dati simulati. Il formato dei dati corrente utilizzata dalla QSForex è la stessa di quella fornita dal feed Dukascopy dati storici a dukascopyswissenglishmarketwatchhistorical. Per generare alcuni dati storici, assicurarsi che l'impostazione CSVDATADIR in settings. py è quello di impostare una directory in cui si desidera che i dati storici di vivere. È quindi necessario eseguire generatesimulatedpair. py. che è sotto la directory degli script. Si aspetta un unico argomento da riga di comando, che in questo caso è la coppia di valute in formato BBBQQQ. Per esempio: In questa fase lo script è hardcoded per creare un unico mesi di dati per gennaio 2014. Cioè, si vedrà singoli file, del formato BBBQQQYYYYMMDD. csv (ad es GBPUSD20140112.csv) appaiono nel tuo CSVDATADIR per tutti i giorni di quel mese. If you wish to change the monthyear of the data output, simply modify the file and re-run. 7) Now that the historical data has been generated it is possible to carry out a backtest. The backtest file itself is stored in backtestbacktest. py. but this only contains the Backtest class. To actually execute a backtest you need to instantiate this class and provide it with the necessary modules. The best way to see how this is done is to look at the example Moving Average Crossover implementation in the examplesmac. py file and use this as a template. This makes use of the MovingAverageCrossStrategy which is found in strategystrategy. py. This defaults to trading both GBPUSD and EURUSD to demonstrate multiple currency pair usage. It uses data found in CSVDATADIR . To execute the example backtest, simply run the following: This will take some time. On my Ubuntu desktop system at home, with the historical data generated via generatesimulatedpair. py. it takes around 5-10 mins to run. A large part of this calculation occurs at the end of the actual backtest, when the drawdown is being calculated, so please remember that the code has not hung up Please leave it until completion. 8) If you wish to view the performance of the backtest you can simply use output. py to view an equity curve, period returns (i. e. tick-to-tick returns) and a drawdown curve: And thats it At this stage you are ready to begin creating your own backtests by modifying or appending strategies in strategystrategy. py and using real data downloaded from DukasCopy (dukascopyswissenglishmarketwatchhistorical ). If you have any questions about the installation then please feel free to email me at mikequantstart . If you have any bugs or other issues that you think may be due to the codebase specifically, feel free to open a Github issue here: githubmhallsmooreqsforexissues Copyright (c) 2015 Michael Halls-Moore Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the Software), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, andor sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED AS IS, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. Forex Trading Disclaimer Trading foreign exchange on margin carries a high level of risk, and may not be suitable for all investors. I rendimenti passati non sono indicativi di risultati futuri. L'alto grado di leva può funzionare contro di voi e per voi. Prima di decidere di investire in valuta estera si deve considerare attentamente i vostri obiettivi di investimento, livello di esperienza e propensione al rischio. Esiste la possibilità che si possa sostenere una perdita di alcuni o tutti vostro investimento iniziale e quindi non si dovrebbe investire denaro che non può permettersi di perdere. You should be aware of all the risks associated with foreign exchange trading, and seek advice from an independent financial advisor if you have any doubts. About mike Hi My name is Michael Halls-Moore and Im the guy behind QuantStart. I 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. I now spend time on research, development, backtesting and implementation of intraday algorithmic trading strategies . Im really just a guy who once wanted to get a job as a quantitative analyst in the City of London. As a young postgraduate student, I felt that becoming a quant was the next logical step to make use of my mathematical skills in an exciting, lucrative career. I started studying to be a quant in October 2006, but soon noticed that the information I needed to know was pretty dense and quite difficult to understand without a lot of work. I really needed organisation, diagrams and useful tips from others who knew better. Nothing of that sort really existed for quant job interview preparation on the Internet, so I figured Id do it myself. And thus, QuantStart was born. I organised my notes, read all of the mathematical finance and algorithmic trading textbooks, spoke to a bunch of people and placed all of that information online so I could easily access my notes from anywhere to help me understand. Back then I didnt realise I was helping to start something big. Since QuantStarts launch in March 2010, Ive become a quantitative developer for a London hedge fund and have had more than 500,000 unique visitors use it for help - and more prospective quants and traders keep visiting. Again, Id like to thank you for using QuantStart The greatest thing about running QuantStart is hearing your stories of quant and trading success. Im driven to make the website better by continuing to add more information and providing the world with the best algorithmic trading and quant finance information available, thanks to your kind words and praise. It is a great feeling each time to hear that someone has gained their dream quant job or has finally developed a profitable algorithmic trading model because of this site. Your comments, suggestions and thanks are very much appreciated. I believe that my work with QuantStart is my way of helping the younger generation become employed in these tough economic times were going through. If I can help tens of thousands gain a job in Wall Street or the City of London, and they manage to have a successful quantitative career, then I feel like Im making a big difference. If youre new, again Im here to help you, so if you have any questions or comments (or suggestions) about anything, please feel free to contact me anytime. The best way to reach me is to email mikequantstart. Best of luck to you all Cheers

No comments:

Post a Comment