You are on page 1of 8

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

You might also like