Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- # data analysis
- import pandas as pd
- import datetime as dt
- # plotting
- from bokeh.io import curdoc
- from bokeh.plotting import figure
- from bokeh.models import ColumnDataSource, HoverTool, Slider
- from bokeh.models.widgets import Select
- from bokeh.models.tools import WheelZoomTool
- from bokeh.layouts import column
- from bokeh.models.formatters import DatetimeTickFormatter
- # binance
- from binance.client import Client
- def update_source():
- # create new view from dataframe
- df_view = df.iloc[0:df.shape[0]]
- # create new source
- new_source = df_view.to_dict(orient='list')
- # add colors to be used for plotting bull and bear candles
- colors = ['green' if cl >= op else 'red' for (cl, op)
- in zip(df_view.close, df_view.open)]
- new_source['colors'] = colors
- source.data = new_source
- def make_plot(src):
- p = figure(x_axis_type='datetime') # x_axis_type='datetime'
- p.segment('date_time', 'high', 'date_time', 'low', source=src, line_width=1, color='grey') # plot the wicks
- p.vbar('date_time', 0.7, 'close', 'open', source=src, line_color='white', fill_color='colors', ) # plot the body
- #p.xaxis.formatter = DatetimeTickFormatter(minutes = [':%M', '%Mm'])
- hover = HoverTool(tooltips=[
- ('date', '@date_time{%F %T}'), # date_time for pandas formatted
- ('open', '@open{0.0000f}'),
- ('high', '@high{0.0000f}'),
- ('low', '@low{0.0000f}'),
- ('close', '@close{0.0000f}')
- ],
- formatters={'@date_time': 'datetime'})
- p.add_tools(hover)
- return p
- client = Client("", "")
- symbol = "BNBUSDT"
- start = "1 day ago UTC"
- end = "now UTC"
- interval = Client.KLINE_INTERVAL_5MINUTE
- df = pd.DataFrame(client.get_historical_klines(symbol, interval, start, end))
- df.columns=['open_time','open', 'high', 'low', 'close', 'volume', 'close_time', 'qav', 'num_trades', 'taker_base_vol', 'taker_quote_vol','is_best_match']
- df['date_time'] = [pd.to_datetime(x, unit='ms') for x in df.open_time]
- #df['open_date_time']=[dt.datetime.fromtimestamp(x/1000) for x in df.open_time]
- #df=df[['open_date_time','open', 'high', 'low', 'close', 'volume', 'num_trades', 'taker_base_vol', 'taker_quote_vol']]
- df['bar'] = df.index
- last_entry = df.shape[0]
- # initialize the data source
- source = ColumnDataSource()
- update_source()
- # draw the plot
- plot = make_plot(source)
- plot.toolbar.active_scroll = plot.select_one(WheelZoomTool)
- curdoc().add_root(
- column(
- plot, sizing_mode='stretch_both'
- ))
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement