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

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
  • White screen? Having issues with pywebview? Click here.

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
    • Jupyter Notebooks using the JupyterChart
  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. Callbacks:

import asyncio
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')


class API:
    def __init__(self):
        self.chart = None  # Changes after each callback.

    async def on_search(self, searched_string):  # Called when the user searches.
        new_data = get_bar_data(searched_string, self.chart.topbar['timeframe'].value)
        if new_data.empty:
            return
        self.chart.topbar['corner'].set(searched_string)
        self.chart.set(new_data)

    async def on_timeframe_selection(self):  # Called when the user changes the timeframe.
        new_data = get_bar_data(self.chart.topbar['corner'].value, self.chart.topbar['timeframe'].value)
        if new_data.empty:
            return
        self.chart.set(new_data)


async def main():
    api = API()

    chart = Chart(api=api, topbar=True, searchbox=True)
    chart.legend(True)

    chart.topbar.textbox('corner', 'TSLA')
    chart.topbar.switcher('timeframe', api.on_timeframe_selection, '1min', '5min', '30min', default='5min')

    df = get_bar_data('TSLA', '5min')
    chart.set(df)

    await chart.show_async(block=True)


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

callbacks 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.10.tar.gz (66.5 kB view details)

Uploaded Source

Built Distribution

lightweight_charts-1.0.10-py3-none-any.whl (66.1 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: lightweight_charts-1.0.10.tar.gz
  • Upload date:
  • Size: 66.5 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.10.tar.gz
Algorithm Hash digest
SHA256 d50aa2b08f845ebd2da65dc841a9df02a425c4230901e2bb0bf782fb4db12049
MD5 ce75e41859e050320eef451ae124d8de
BLAKE2b-256 faf2315fd653aaec9603085b849c98a379b6035215fbe9dd6ccea0fa94e5bb3b

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for lightweight_charts-1.0.10-py3-none-any.whl
Algorithm Hash digest
SHA256 5fead42d1831f2a3d51ff2e1dd9242e1192f5e3822527983145b116a429830d3
MD5 a5db703f1cf9d0e93592c6a171bd9868
BLAKE2b-256 acb6a842ad3cfd43b033d925cb1a96ca86e2c201411cbb47cbc2bd4e0bfab056

See more details on using hashes here.

Supported by

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