Skip to main content

Python framework for TradingView's Lightweight Charts JavaScript library.

Project description

lightweight-charts-python

PyPi Release Made with Python License Documentation

async cover

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. Simple and easy to use.
  2. Blocking or non-blocking GUI.
  3. Streamlined for live data, with methods for updating directly from tick data.
  4. Supports:
    • PyQt
    • wxPython
    • Streamlit
    • asyncio
  5. Callbacks allowing for timeframe (1min, 5min, 30min etc.) selectors, searching, and more.
  6. Multi-Pane Charts using the SubChart (examples).

1. Display data from a csv:

import pandas as pd
from lightweight_charts import Chart


if __name__ == '__main__':
    
    chart = Chart()
    
    # Columns: | time | open | high | low | close | volume (if volume is enabled) |
    df = pd.read_csv('ohlcv.csv')
    chart.set(df)
    
    chart.show(block=True)

setting_data image


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]
    
    for i, series in df2.iterrows():
        chart.update(series)

        if series['close'] > 20 and last_close < 20:
            chart.marker(text='The price crossed $20!')
            
        last_close = series['close']
        sleep(0.1)

live data gif


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 | volume (if volume is enabled) |
    df2 = pd.read_csv('ticks.csv')
    
    chart = Chart(volume_enabled=False)
    
    chart.set(df1)
    
    chart.show()
    
    for i, tick in df2.iterrows():
        chart.update_from_tick(tick)
            
        sleep(0.3)

tick data gif


4. Line Indicators:

import pandas as pd
from lightweight_charts import Chart


def calculate_sma(data: pd.DataFrame, period: int = 50):
    def avg(d: pd.DataFrame): 
        return d['close'].mean()
    result = []
    for i in range(period - 1, len(data)):
        val = avg(data.iloc[i - period + 1:i])
        result.append({'time': data.iloc[i]['date'], 'value': val})
    return pd.DataFrame(result)


if __name__ == '__main__':
    
    chart = Chart()
    
    df = pd.read_csv('ohlcv.csv')
    chart.set(df)
    
    line = chart.create_line()
    sma_data = calculate_sma(df)
    line.set(sma_data)
    
    chart.show(block=True)

line indicators image


5. Styling:

import pandas as pd
from lightweight_charts import Chart


if __name__ == '__main__':
    
    chart = Chart(debug=True)

    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)

styling image


6. ChartAsync:

import asyncio
import pandas as pd

from lightweight_charts import ChartAsync


def get_bar_data(symbol, timeframe):
    return pd.read_csv(f'bar_data/{symbol}_{timeframe}.csv')


class API:
    def __init__(self):
        self.chart = None  # Changes after each callback.
        self.symbol = 'TSLA'
        self.timeframe = '5min'

    async def on_search(self, searched_string):  # Called when the user searches.
        self.symbol = searched_string
        new_data = await self.get_data()
        if new_data.empty:
            return
        self.chart.set(new_data)
        self.chart.corner_text(searched_string)

    async def on_timeframe_selection(self, timeframe):  # Called when the user changes the timeframe.
        self.timeframe = timeframe
        new_data = await self.get_data()
        if new_data.empty:
            return
        self.chart.set(new_data)

    async def get_data(self):
        if self.symbol not in ('AAPL', 'GOOGL', 'TSLA'):
            print(f'No data for "{self.symbol}"')
            return pd.DataFrame()
        data = get_bar_data(self.symbol, self.timeframe)
        return data


async def main():
    api = API()

    chart = ChartAsync(api=api, debug=True)
    chart.legend(True)

    chart.create_switcher(api.on_timeframe_selection, '1min', '5min', '30min', default='5min')
    chart.corner_text(api.symbol)

    df = get_bar_data(api.symbol, api.timeframe)
    chart.set(df)

    await chart.show(block=True)


if __name__ == '__main__':
    asyncio.run(main())

async gif


Documentation


This 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.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

lightweight_charts-1.0.9.tar.gz (63.8 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

lightweight_charts-1.0.9-py3-none-any.whl (64.1 kB view details)

Uploaded Python 3

File details

Details for the file lightweight_charts-1.0.9.tar.gz.

File metadata

  • Download URL: lightweight_charts-1.0.9.tar.gz
  • Upload date:
  • Size: 63.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.2 CPython/3.10.2

File hashes

Hashes for lightweight_charts-1.0.9.tar.gz
Algorithm Hash digest
SHA256 cbf1a685db6db680dd75d48c65c19ad714485572cc4b3bc2f819e095eaa3eed9
MD5 5b2fa368f0b03a41b2792bae99843590
BLAKE2b-256 cfd49663fbc09e849ab1b6fd51555de471f4d107dde6cb568043398b7376aeee

See more details on using hashes here.

File details

Details for the file lightweight_charts-1.0.9-py3-none-any.whl.

File metadata

File hashes

Hashes for lightweight_charts-1.0.9-py3-none-any.whl
Algorithm Hash digest
SHA256 6d23dd20b726fc209430134b3b9487735b9939121d388093abd1d0a8991fbb9b
MD5 d373a65c4b02421beaabd64fe0bee3c4
BLAKE2b-256 683019be6bf21aea606e0711d37de301800a7cfed9df9f6c70a5dbcdd2b6187d

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page