Package: lightweight-charts
lightweight-charts-pythonlightweight-charts-python aims to provide a simple and pythonic way to access and implementTradingView's Lightweight Charts.Installationpip install lightweight-chartsFeaturesStreamlined for live data, with methods for updating directly from tick data.Multi-pane charts usingSubcharts.TheToolbox, allowing for trendlines, rays and horizontal lines to be drawn directly onto charts.Eventsallowing for timeframe selectors (1min, 5min, 30min etc.), searching, hotkeys, and more.Tablesfor watchlists, order entry, and trade management.Direct integration of market data throughPolygon.io'smarket data API.Supports:Jupyter Notebooks, PyQt5, PySide6, wxPython, Streamlit, and asyncio.PartTimeLarry:Interactive Brokers API and TradingView Charts in Python1. Display data from a csv:importpandasaspdfromlightweight_chartsimportChartif__name__=='__main__':chart=Chart()# Columns: time | open | high | low | close | volumedf=pd.read_csv('ohlcv.csv')chart.set(df)chart.show(block=True)2. Updating bars in real-time:importpandasaspdfromtimeimportsleepfromlightweight_chartsimportChartif__name__=='__main__':chart=Chart()df1=pd.read_csv('ohlcv.csv')df2=pd.read_csv('next_ohlcv.csv')chart.set(df1)chart.show()last_close=df1.iloc[-1]['close']fori,seriesindf2.iterrows():chart.update(series)ifseries['close']>20andlast_close<20:chart.marker(text='The price crossed $20!')last_close=series['close']sleep(0.1)3. Updating bars from tick data in real-time:importpandasaspdfromtimeimportsleepfromlightweight_chartsimportChartif__name__=='__main__':df1=pd.read_csv('ohlc.csv')# Columns: time | pricedf2=pd.read_csv('ticks.csv')chart=Chart()chart.set(df1)chart.show()fori,tickindf2.iterrows():chart.update_from_tick(tick)sleep(0.03)4. Line Indicators:importpandasaspdfromlightweight_chartsimportChartdefcalculate_sma(df,period:int=50):returnpd.DataFrame({'time':df['date'],f'SMA{period}':df['close'].rolling(window=period).mean()}).dropna()if__name__=='__main__':chart=Chart()chart.legend(visible=True)df=pd.read_csv('ohlcv.csv')chart.set(df)line=chart.create_line('SMA 50')sma_data=calculate_sma(df,period=50)line.set(sma_data)chart.show(block=True)5. Styling:importpandasaspdfromlightweight_chartsimportChartif__name__=='__main__':chart=Chart()df=pd.read_csv('ohlcv.csv')chart.layout(background_color='#090008',text_color='#FFFFFF',font_size=16,font_family='Helvetica')chart.candle_style(up_color='#00ff55',down_color='#ed4807',border_up_color='#FFFFFF',border_down_color='#FFFFFF',wick_up_color='#FFFFFF',wick_down_color='#FFFFFF')chart.volume_config(up_color='#00ff55',down_color='#ed4807')chart.watermark('1D',color='rgba(180, 180, 240, 0.7)')chart.crosshair(mode='normal',vert_color='#FFFFFF',vert_style='dotted',horz_color='#FFFFFF',horz_style='dotted')chart.legend(visible=True,font_size=14)chart.set(df)chart.show(block=True)6. Callbacks:importpandasaspdfromlightweight_chartsimportChartdefget_bar_data(symbol,timeframe):ifsymbolnotin('AAPL','GOOGL','TSLA'):print(f'No data for "{symbol}"')returnpd.DataFrame()returnpd.read_csv(f'bar_data/{symbol}_{timeframe}.csv')defon_search(chart,searched_string):# Called when the user searches.new_data=get_bar_data(searched_string,chart.topbar['timeframe'].value)ifnew_data.empty:returnchart.topbar['symbol'].set(searched_string)chart.set(new_data)defon_timeframe_selection(chart):# Called when the user changes the timeframe.new_data=get_bar_data(chart.topbar['symbol'].value,chart.topbar['timeframe'].value)ifnew_data.empty:returnchart.set(new_data,True)defon_horizontal_line_move(chart,line):print(f'Horizontal line moved to:{line.price}')if__name__=='__main__':chart=Chart(toolbox=True)chart.legend(True)chart.events.search+=on_searchchart.topbar.textbox('symbol','TSLA')chart.topbar.switcher('timeframe',('1min','5min','30min'),default='5min',func=on_timeframe_selection)df=get_bar_data('TSLA','5min')chart.set(df)chart.horizontal_line(200,func=on_horizontal_line_move)chart.show(block=True)Inquiries:shaders_worker_0e@icloud.comThis package is an independent creation and has not been endorsed, sponsored, or approved by TradingView. The author of this package does not have any official relationship with TradingView, and the package does not represent the views or opinions of TradingView.