2/18/24, 9:12 PM GitHub - louisnw01/lightweight-charts-python: Python framework for TradingView's Lightweight Charts JavaScript library.
louisnw01 / lightweight-charts-python Public
Python framework for TradingView's Lightweight Charts JavaScript library.
MIT license
629 stars 108 forks Branches Tags Activity
Star Notifications
Code Issues 16 Pull requests 2 Actions Projects Security Insights
main 1 Branch 30 Tags Go to file Go to file Code
louisnw01 Added the marker_list function for setting multiple markers. 4 days ago
.github pandas ambigious hotfix 4 months ago
docs Added the render_drawings para… last month
examples Added the render_drawings para… last month
lightweight_charts Added the marker_list function f… 4 days ago
.gitignore chore(.gitignore): remove docs/so… last month
.readthedocs.yaml add .readthedocs.yaml 7 months ago
LICENSE first commit 9 months ago
README.md Added the render_drawings para… last month
cover.png Enhancements and Bug Fixes 7 months ago
setup.py Added the render_drawings para… last month
README MIT license
lightweight-charts-python
PyPi v1.0.19 Python 3.8+ license MIT documentation
https://github.com/louisnw01/lightweight-charts-python 1/8
2/18/24, 9:12 PM GitHub - louisnw01/lightweight-charts-python: Python framework for TradingView's Lightweight Charts JavaScript library.
lightweight-charts-python aims to provide a simple and pythonic way to access and implement
TradingView's Lightweight Charts.
Installation
pip install lightweight-charts
Features
1. Streamlined for live data, with methods for updating directly from tick data.
2. Multi-pane charts using Subcharts.
3. The Toolbox, allowing for trendlines, rays and horizontal lines to be drawn directly onto charts.
4. Events allowing for timeframe selectors (1min, 5min, 30min etc.), searching, hotkeys, and more.
5. Tables for watchlists, order entry, and trade management.
6. Direct integration of market data through Polygon.io's market data API.
Supports: Jupyter Notebooks, PyQt5, PySide6, wxPython, Streamlit, and asyncio.
PartTimeLarry: Interactive Brokers API and TradingView Charts in Python
1. Display data from a csv:
import pandas as pd
from lightweight_charts import Chart
if __name__ == '__main__':
https://github.com/louisnw01/lightweight-charts-python 2/8
2/18/24, 9:12 PM GitHub - louisnw01/lightweight-charts-python: Python framework for TradingView's Lightweight Charts JavaScript library.
chart = Chart()
# Columns: time | open | high | low | close | volume
df = pd.read_csv('ohlcv.csv')
chart.set(df)
chart.show(block=True)
2. Updating bars in real-time:
import pandas as pd
from time import sleep
from lightweight_charts import Chart
if __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']
for i, series in df2.iterrows():
chart.update(series)
if series['close'] > 20 and last_close < 20:
chart.marker(text='The price crossed $20!')
https://github.com/louisnw01/lightweight-charts-python 3/8
2/18/24, 9:12 PM GitHub - louisnw01/lightweight-charts-python: Python framework for TradingView's Lightweight Charts JavaScript library.
last_close = series['close']
sleep(0.1)
3. Updating bars from tick data in real-time:
import pandas as pd
from time import sleep
from lightweight_charts import Chart
if __name__ == '__main__':
df1 = pd.read_csv('ohlc.csv')
# Columns: time | price
df2 = pd.read_csv('ticks.csv')
chart = Chart()
chart.set(df1)
chart.show()
for i, tick in df2.iterrows():
chart.update_from_tick(tick)
sleep(0.03)
https://github.com/louisnw01/lightweight-charts-python 4/8
2/18/24, 9:12 PM GitHub - louisnw01/lightweight-charts-python: Python framework for TradingView's Lightweight Charts JavaScript library.
4. Line Indicators:
import pandas as pd
from lightweight_charts import Chart
def calculate_sma(df, period: int = 50):
return pd.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)
https://github.com/louisnw01/lightweight-charts-python 5/8
2/18/24, 9:12 PM GitHub - louisnw01/lightweight-charts-python: Python framework for TradingView's Lightweight Charts JavaScript library.
5. Styling:
import pandas as pd
from lightweight_charts import Chart
if __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)
https://github.com/louisnw01/lightweight-charts-python 6/8
2/18/24, 9:12 PM GitHub - louisnw01/lightweight-charts-python: Python framework for TradingView's Lightweight Charts JavaScript library.
6. Callbacks:
import pandas as pd
from lightweight_charts import Chart
def get_bar_data(symbol, timeframe):
if symbol not in ('AAPL', 'GOOGL', 'TSLA'):
print(f'No data for "{symbol}"')
return pd.DataFrame()
return pd.read_csv(f'bar_data/{symbol}_{timeframe}.csv')
def on_search(chart, searched_string): # Called when the user searches.
new_data = get_bar_data(searched_string, chart.topbar['timeframe'].value)
if new_data.empty:
return
chart.topbar['symbol'].set(searched_string)
chart.set(new_data)
def on_timeframe_selection(chart): # Called when the user changes the timeframe.
new_data = get_bar_data(chart.topbar['symbol'].value, chart.topbar['timeframe'].value)
if new_data.empty:
return
chart.set(new_data, True)
def on_horizontal_line_move(chart, line):
print(f'Horizontal line moved to: {line.price}')
if __name__ == '__main__':
https://github.com/louisnw01/lightweight-charts-python 7/8
2/18/24, 9:12 PM GitHub - louisnw01/lightweight-charts-python: Python framework for TradingView's Lightweight Charts JavaScript library.
chart = Chart(toolbox=True)
chart.legend(True)
chart.events.search += on_search
chart.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)
Releases 30
v1.0.19 Latest
last month
+ 29 releases
Sponsor this project
louisnw01
https://www.buymeacoffee.com/7wzcr2p9vxM/
Learn more about GitHub Sponsors
Contributors 5
Languages
Python 54.0% JavaScript 46.0%
https://github.com/louisnw01/lightweight-charts-python 8/8