YFinance¶
import datetime as dt
import yfinance as yf
from lightweight_charts import Chart
def get_bar_data(symbol, timeframe):
if timeframe in ('1m', '5m', '30m'):
days = 7 if timeframe == '1m' else 60
start_date = dt.datetime.now()-dt.timedelta(days=days)
else:
start_date = None
chart.spinner(True)
data = yf.download(symbol, start_date, interval=timeframe)
chart.spinner(False)
if data.empty:
return False
chart.set(data)
return True
def on_search(chart, searched_string):
if get_bar_data(searched_string, chart.topbar['timeframe'].value):
chart.topbar['symbol'].set(searched_string)
def on_timeframe_selection(chart):
get_bar_data(chart.topbar['symbol'].value, chart.topbar['timeframe'].value)
if __name__ == '__main__':
chart = Chart(toolbox=True, debug=True)
chart.legend(True)
chart.events.search += on_search
chart.topbar.textbox('symbol', 'n/a')
chart.topbar.switcher(
'timeframe',
('1m', '5m', '30m', '1d', '1wk'),
default='5m',
func=on_timeframe_selection
)
chart.show(block=True)