Thursday, 12 October 2017

Indietro Forex Test Python


Python Algorithmic Trading Biblioteca PyAlgoTrade è un Trading algoritmico libreria Python con particolare attenzione alla backtesting e il supporto per la carta-trading e live-trading. Diciamo che avete un'idea per una strategia di trading e youd piace di valutare con i dati storici e vedere come si comporta. PyAlgoTrade permette di farlo con il minimo sforzo. Principali caratteristiche completamente documentato. Evento guidato . Supporta Mercato, Limite, Stop e ordini StopLimit. Supporta i file di Yahoo Finance, Google Finance e NinjaTrader CSV. Supporta qualsiasi tipo di dati di serie temporali in formato CSV, ad esempio Quandl. supporto commerciale Bitcoin attraverso Bitstamp. Indicatori tecnici e filtri come SMA, WMA, EMA, RSI, le bande di Bollinger, Hurst esponente e altri. metriche di performance come indice di Sharpe e analisi drawdown. Gestione degli eventi di Twitter in tempo reale. profiler evento. Integrazione TA-Lib. Molto facile da scalare orizzontalmente, cioè, utilizzando uno o più computer di backtest una strategia. PyAlgoTrade è gratuito, open source, ed è rilasciato sotto la licenza Apache, backtesting versione 2.0.Event-Driven con Python - Parte I Weve trascorso l'ultimo paio di mesi su QuantStart backtesting diverse strategie di trading utilizzando Python e panda. La natura Vectorised di panda fa sì che certe operazioni su grandi insiemi di dati sono estremamente rapidi. Tuttavia le forme di backtester Vectorised che abbiamo studiato fino ad oggi soffrono di alcuni svantaggi nel modo in cui il commercio esecuzione viene simulato. In questa serie di articoli che ci accingiamo a discutere di un approccio più realistico alla simulazione strategia storica con la costruzione di un ambiente di test retrospettivi event-driven utilizzando Python. Event-Driven Software Prima di approfondire lo sviluppo di un tale backtester abbiamo bisogno di capire il concetto di sistemi di event-driven. I videogiochi offrono un caso d'uso naturale per il software event-driven e forniscono un esempio semplice da esplorare. Un videogioco ha più componenti che interagiscono tra loro in tempo reale impostazione ad alta framerates. Questo è gestito eseguendo l'intero set di calcoli all'interno di un ciclo infinito noto come l'evento-loop o game-loop. Ad ogni tick del gioco-loop viene chiamata una funzione per ricevere l'ultimo evento. che saranno stati generati da alcuni corrispondente azione preventiva all'interno del gioco. A seconda della natura della manifestazione, che potrebbe includere la pressione dei tasti o di un clic del mouse, è preso qualche azione successiva, che sia terminare il ciclo o generare alcuni eventi aggiuntivi. Il processo continuerà poi. Ecco qualche esempio di pseudo-codice: il codice è continuamente controllo dei nuovi eventi e quindi l'esecuzione di azioni in base a questi eventi. In particolare permette l'illusione di movimentazione risposta in tempo reale poiché il codice è continuamente in loop ed eventi controllato per. Come sarà chiaro questo è esattamente quello che ci serve per effettuare la simulazione di trading ad alta frequenza. Perché un evento sistemi basati Backtester Event-Driven offrono molti vantaggi rispetto ad un approccio Vectorised: riutilizzo del codice - Un backtester event-driven, in base alla progettazione, può essere utilizzato sia per il backtesting storico e trading dal vivo con il minimo switch-out di componenti. Questo non è vero per backtesters Vectorised in cui tutti i dati devono essere disponibili in una sola volta per effettuare analisi statistiche. Lookahead Bias - Con un backtester event-driven non vi è alcun pregiudizio lookahead come la ricezione dei dati di mercato è trattato come un evento che deve essere trattata. Così è possibile a gocciolare alimentare un backtester event-driven con dati di mercato, replicando come una gestione degli ordini e il sistema di portafoglio si sarebbero comportati. Realismo - backtesters Event-driven permette una personalizzazione significativa su come gli ordini vengono eseguiti e costi di transazione sono sostenuti. E 'semplice da gestire ordini di mercato e limite di base, così come mercato-on-aperta (MOO) e del mercato-on-vicino (MOC), dal momento che un gestore di scambio personalizzato può essere costruito. Anche se i sistemi event-driven sono dotati di molti benefici che soffrono di due grandi svantaggi rispetto ai sistemi Vectorised più semplici. In primo luogo sono significativamente più complesso da implementare e test. Ci sono parti in movimento che portano a una maggiore possibilità di introdurre bug. Per ridurre questo una corretta metodologia di test del software come lo sviluppo test-driven può essere impiegato. In secondo luogo sono più lenti da eseguire rispetto ad un sistema Vectorised. operazioni Vectorised ottimali sono in grado di essere utilizzato nello svolgimento di calcoli matematici. Discuteremo modi per superare queste limitazioni negli articoli successivi. Event-Driven Backtester Panoramica di applicare un approccio event-driven ad un sistema di backtesting è necessario definire i nostri componenti (o oggetti) che gestirà compiti specifici: Event - L'evento è l'unità di classe fondamentale del sistema event-driven. Esso contiene un tipo (come il mercato, SIGNAL, ORDINE o FILL) che determina come sarà gestito all'interno dell'evento-loop. Queue Event - coda eventi è un oggetto in memoria Python coda che memorizza tutti gli oggetti sottoclasse eventi generati dal resto del software. DataHandler - Il DataHandler è una classe base astratta (ABC), che presenta un'interfaccia per la gestione sia dei dati storici o in tempo reale di mercato. Ciò fornisce la flessibilità significativo come la strategia e moduli Portfolio può quindi essere riutilizzata tra i due approcci. Il DataHandler genera un nuovo MarketEvent su ogni battito del sistema (vedi sotto). Strategia - La strategia è anche un ABC che presenta un'interfaccia per la presa dati di mercato e generando SignalEvents corrispondenti, che sono in ultima analisi utilizzati dall'oggetto portafoglio. Un SignalEvent contiene un simbolo ticker, una direzione (lungo o corto) e un timestamp. Portfolio - Si tratta di un ABC, che si occupa della gestione degli ordini associati con le posizioni attuali e successive per una strategia. Svolge inoltre la gestione del rischio in tutto il portafoglio, compresa l'esposizione del settore e la posizione di dimensionamento. In un più sofisticato implementazione potrebbe essere delegata a una classe Riskmanagement. Il Portfolio prende SignalEvents dalla coda e genera OrderEvents che vengono aggiunte alla coda. ExecutionHandler - Il ExecutionHandler simula una connessione a una società di intermediazione. Il lavoro del gestore è quello di prendere OrderEvents dalla coda e li esegue, sia attraverso un approccio simulato o una connessione reale per una società di intermediazione del fegato. Una volta che gli ordini vengono eseguiti il ​​gestore crea FillEvents, che descrivono ciò che è stato effettivamente prestati, comprese le spese, commissioni e slittamento (se modellato). The Loop - Tutti questi componenti sono avvolti in un evento-ciclo che gestisce correttamente tutti i tipi di eventi, li routing al componente appropriato. Questo è piuttosto un modello base di un motore negoziazione. Non vi è ampio margine per l'espansione, soprattutto per quanto riguarda la modalità di utilizzo del Portafoglio. Inoltre diversi modelli dei costi di transazione potrebbe anche essere estratta in loro gerarchia propria classe. In questa fase si introduce complessità inutile all'interno di questa serie di articoli in modo da non attualmente discuterne ulteriormente. Nel tutorial successivi ci sarà probabilmente espandere il sistema per includere ulteriori realismo. Ecco un frammento di codice Python che dimostra come il backtester funziona in pratica. Ci sono due anelli che si verificano nel codice. Il ciclo esterno viene utilizzato per dare il backtester un battito cardiaco. Per trading dal vivo questa è la frequenza con cui i nuovi dati di mercato viene interrogato. Per le strategie di backtesting questo non è strettamente necessario in quanto la backtester utilizza i dati di mercato forniti in forma drip-feed (vedi le bars. updatebars () di linea). Il ciclo interno in realtà gestisce gli eventi dall'oggetto eventi coda. Eventi specifici sono delegate al rispettivo componente e successivamente nuovi eventi vengono aggiunti alla coda. Quando la coda eventi è vuota, il ciclo continua battito cardiaco: Questa è la struttura di base di un modo in cui un backtester event-driven è stato progettato. Nel prossimo articolo parleremo della gerarchia delle classi di evento. Appena iniziato con Trading Quantitative

No comments:

Post a Comment