end = datetime.datetime.utcnow() start_date = end.replace(hour=0, minute=0, second=0, microsecond=0) # Returns a copy time_series_request = TimeSeriesRequest( start_date = start_date, # start date finish_date = datetime.datetime.utcnow(), # finish date freq = 'intraday', # intraday data data_source = 'bloomberg', # use Bloomberg as data source tickers = ['EURUSD'] , # ticker (Thalesians) fields = ['close'], # which fields to download vendor_tickers = ['EURUSD BGN Curncy'], # ticker (Bloomberg) vendor_fields = ['close'], # which Bloomberg fields to download cache_algo = 'internet_load_return') # how to return data ltsf = LightTimeSeriesFactory() df = ltsf.harvest_time_series(time_series_request) df.columns = [x.replace('.close', '') for x in df.columns.values] gp = GraphProperties() gp.title = 'EURUSD stuff!' gp.file_output = 'EURUSD.png' gp.source = 'Thalesians/BBG (created with PyThalesians Python library)' pf = PlotFactory() pf.plot_line_graph(df, adapter = 'pythalesians', gp = gp) pytwitter.update_status("check out my plot of EUR/USD!", picture = gp.file_output)
df = tsc.create_mult_index_from_prices(daily_vals) df = df.fillna(method='ffill') # Lastly we can plot the results! We shall plot it with the PlotFactory class using PyThalesians engine (a wrapper on top of matplotlib). We can specify the properties of the plot using a GraphProperties class. The first line, forces matplotlib to give us the plot in the notebook, as opposed to a separate window. # In[ ]: get_ipython().magic(u'matplotlib inline') from pythalesians.graphics.graphs.plotfactory import PlotFactory from pythalesians.graphics.graphs.graphproperties import GraphProperties gp = GraphProperties() gp.source = 'Thalesians/BBG (created with PyThalesians Python library)' gp.title = 'Equity Markets' gp.scale_factor = 1 gp.display_legend = True gp.x_title = 'Dates' gp.y_title = 'Index' pf = PlotFactory() pf.plot_line_graph(df, adapter = 'pythalesians', gp = gp) # In[ ]:
short_dates = df[["EURUSDV1M", "USDJPYV1M"]] long_dates = df[["EURUSDV1Y", "USDJPYV1Y"]] short_dates, long_dates = short_dates.align(long_dates, join='left', axis=0) slope = pandas.DataFrame(data=short_dates.values - long_dates.values, index=short_dates.index, columns=["EURUSDV1M-1Y", "USDJPYV1M-1Y"]) # resample fand calculate average over month slope_monthly = slope.resample('M', how='mean') slope_monthly.index = [ str(x.year) + '/' + str(x.month) for x in slope_monthly.index ] pf = PlotFactory() gp = GraphProperties() gp.source = 'Thalesians/BBG' gp.title = 'Vol slopes in EUR/USD and USD/JPY recently' gp.scale_factor = 2 gp.display_legend = True gp.chart_type = 'bar' gp.x_title = 'Dates' gp.y_title = 'Pc' # plot using Cufflinks pf.plot_bar_graph(slope_monthly, adapter='bokeh', gp=gp)
vendor_tickers=vendor_tickers, # ticker (Bloomberg) vendor_fields=["PX_LAST"], # which Bloomberg fields to download cache_algo="internet_load_return", ) # how to return data daily_vals = ltsf.harvest_time_series(time_series_request) # resample for end of month daily_vals = daily_vals.resample("BM") daily_vals = daily_vals / daily_vals.shift(1) - 1 daily_vals.index = [str(x.year) + "/" + str(x.month) for x in daily_vals.index] daily_vals = daily_vals.drop(daily_vals.head(1).index) pf = PlotFactory() gp = GraphProperties() gp.source = "Thalesians/BBG" gp.html_file_output = "output_data/equities.htm" gp.title = "Recent monthly changes in equity markets" gp.scale_factor = 2 gp.display_legend = True gp.chart_type = ["bar", "scatter", "line"] gp.x_title = "Dates" gp.y_title = "Pc" # plot using Bokeh then PyThalesians pf.plot_bar_graph(daily_vals * 100, adapter="bokeh", gp=gp) pf.plot_bar_graph(daily_vals * 100, adapter="pythalesians", gp=gp)
tickers = tickers, # ticker (Thalesians) fields = ['close'], # which fields to download vendor_tickers = vendor_tickers, # ticker (Bloomberg) vendor_fields = ['PX_LAST'], # which Bloomberg fields to download cache_algo = 'internet_load_return') # how to return data daily_vals = ltsf.harvest_time_series(time_series_request) # resample for end of month daily_vals = daily_vals.resample('BM') daily_vals = daily_vals / daily_vals.shift(1) - 1 daily_vals.index = [str(x.year) + '/' + str(x.month) for x in daily_vals.index] daily_vals = daily_vals.drop(daily_vals.head(1).index) pf = PlotFactory() gp = GraphProperties() gp.source = 'Thalesians/BBG' gp.html_file_output = "output_data/equities.htm" gp.title = 'Recent monthly changes in equity markets' gp.scale_factor = 2 gp.display_legend = True gp.chart_type = ['bar', 'scatter', 'line'] gp.x_title = 'Dates' gp.y_title = 'Pc' # plot using Bokeh then PyThalesians pf.plot_bar_graph(daily_vals * 100, adapter = 'bokeh', gp = gp) pf.plot_bar_graph(daily_vals * 100, adapter = 'pythalesians', gp = gp)
cache_algo = 'internet_load_return') # how to return data ltsf = LightTimeSeriesFactory() asset_df = ltsf.harvest_time_series(time_series_request) spot_df = asset_df logger.info("Running backtest...") # use technical indicator to create signals # (we could obviously create whatever function we wanted for generating the signal dataframe) tech_ind = TechIndicator() tech_ind.create_tech_ind(spot_df, indicator, tech_params); signal_df = tech_ind.get_signal() # use the same data for generating signals cash_backtest.calculate_trading_PnL(br, asset_df, signal_df) port = cash_backtest.get_cumportfolio() port.columns = [indicator + ' = ' + str(tech_params.sma_period) + ' ' + str(cash_backtest.get_portfolio_pnl_desc()[0])] signals = cash_backtest.get_porfolio_signal() # print the last positions (we could also save as CSV etc.) print(signals.tail(1)) pf = PlotFactory() gp = GraphProperties() gp.title = "Thalesians FX trend strategy" gp.source = 'Thalesians/BBG (calc with PyThalesians Python library)' gp.scale_factor = 3 gp.file_output = 'output_data/FX-trend-example.png' pf.plot_line_graph(port, adapter = 'pythalesians', gp = gp)
cache_algo = 'internet_load_return') # how to return data ltsf = LightTimeSeriesFactory() asset_df = ltsf.harvest_time_series(time_series_request) spot_df = asset_df logger.info("Running backtest...") # use technical indicator to create signals # (we could obviously create whatever function we wanted for generating the signal dataframe) tech_ind = TechIndicator() tech_ind.create_tech_ind(spot_df, indicator, tech_params); signal_df = tech_ind.get_signal() # use the same data for generating signals cash_backtest.calculate_trading_PnL(br, asset_df, signal_df) port = cash_backtest.get_cumportfolio() port.columns = [indicator + ' = ' + str(tech_params.sma_period) + ' ' + str(cash_backtest.get_portfolio_pnl_desc()[0])] signals = cash_backtest.get_porfolio_signal() # print the last positions (we could also save as CSV etc.) print(signals.tail(1)) pf = PlotFactory() gp = GraphProperties() gp.title = "Thalesians FX trend strategy" gp.source = 'Thalesians/BBG (calc with PyThalesians Python library)' gp.scale_factor = 1 gp.file_output = 'output_data/fx-trend-example.png' pf.plot_line_graph(port, adapter = 'pythalesians', gp = gp)