Skip to main content

Interactive candlestick chart plotting with PyQt6 — mplfinance-compatible API

Project description

wickly logo

License: MIT Tests Documentation

Interactive candlestick chart plotting with PyQt6 — drop-in replacement for mplfinance with rich interactivity.

wickly demo

Features

  • 📈 Candlestick, OHLC bar, line, and hollow-candle chart types
  • 📊 Optional volume subplot
  • 🔍 Mouse-wheel zoom and click-drag pan
  • 🎯 Crosshair cursor with live OHLC / volume readout
  • 📐 Moving average overlays (mav parameter)
  • 🎨 Built-in styles (default, charles, mike, yahoo, classic, nightclouds)
  • 🖼️ make_addplot() for overlaying custom data (line, scatter & segments)
  • 🔀 make_segments() for overlapping broken-line overlays (e.g. Knoxville Divergence)
  • 💾 savefig() support (PNG / JPG / BMP)
  • 🔁 returnfig mode for embedding in your own PyQt6 application
  • 🔴 live_plot() for animated / live-updating charts
  • ✅ mplfinance-compatible function signatures

Installation

Install from PyPI

The recommended way to install wickly:

pip install wickly

Install from source

Clone the repository and install with pip:

git clone https://github.com/ShreyanshDarshan/wickly.git
cd wickly
pip install .

Or in editable/development mode (includes pytest and build):

pip install -e ".[dev]"

Quick Start

import pandas as pd
import wickly

# DataFrame must have a DatetimeIndex and columns: Open, High, Low, Close (and optionally Volume)
df = pd.read_csv("your_data.csv", index_col=0, parse_dates=True)

# Candlestick chart with volume and moving averages — same API as mplfinance
wickly.plot(df, type='candle', volume=True, mav=(10, 20), style='yahoo', title='My Chart')

Documentation

Full API reference, quickstart guide, and examples are available at wickly.readthedocs.io.

Contributing

Contributions are welcome — bug reports, feature requests, documentation improvements, and pull requests all appreciated.

1. Fork & clone

git clone https://github.com/ShreyanshDarshan/wickly.git
cd wickly

2. Set up the development environment

Create and activate a dedicated environment (conda shown; plain venv works too):

conda create -n wickly python=3.11
conda activate wickly
pip install -e ".[dev,docs]"

3. Project layout

wickly/
├── src/wickly/          # Package source
│   ├── __init__.py      # Public API surface
│   ├── plotting.py      # Top-level plot() function
│   ├── chart_widget.py  # PyQt6 CandlestickWidget
│   ├── addplot.py       # make_addplot() & make_segments() helpers
│   ├── styles.py        # Built-in styles & make_style()
│   └── _utils.py        # Data validation utilities
├── tests/               # pytest test suite
├── docs/                # Sphinx documentation source
├── examples/            # Runnable example scripts
├── pyproject.toml       # Project metadata & dependencies
└── .readthedocs.yaml    # Read the Docs configuration

4. Run the tests

pytest tests/ -v

All 41 tests should pass. Add new tests under tests/ for any code you contribute.

5. Build the documentation locally

# HTML output → docs/_build/html/index.html
python -m sphinx -b html docs docs/_build/html

# Open in the default browser (Windows)
start docs/_build/html/index.html

# Open in the default browser (macOS / Linux)
open docs/_build/html/index.html

Build must succeed with zero warnings (-W flag):

python -m sphinx -b html docs docs/_build/html -W

6. Run the examples

python examples/basic_candle.py        # Basic candlestick + volume + MAs
python examples/chart_types.py         # All four chart types in sequence
python examples/addplot_overlay.py     # Bollinger Bands & scatter signals
python examples/live_chart.py          # Live / animated chart demo

7. Adding a new built-in style

  1. Add an entry to _BUILTIN_STYLES in src/wickly/styles.py following the existing key schema.
  2. Add the style name to TestAvailableStyles.test_all_builtins_present in tests/test_styles.py.
  3. Document it in the styles table in docs/styles.rst.

8. Code style

  • Format with black (pip install black; black src/ tests/).
  • Type-annotate all public functions.
  • Write NumPy-style docstrings — they are picked up by Sphinx autodoc.

9. Submitting a pull request

  1. Branch off main: git checkout -b feat/my-feature
  2. Make your changes, add tests, update docs.
  3. Ensure pytest tests/ -v is all green and sphinx -W builds cleanly.
  4. Open a PR against main with a clear description of what changed and why.

License

MIT

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

wickly-0.1.1.tar.gz (26.9 kB view details)

Uploaded Source

Built Distribution

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

wickly-0.1.1-py3-none-any.whl (21.8 kB view details)

Uploaded Python 3

File details

Details for the file wickly-0.1.1.tar.gz.

File metadata

  • Download URL: wickly-0.1.1.tar.gz
  • Upload date:
  • Size: 26.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for wickly-0.1.1.tar.gz
Algorithm Hash digest
SHA256 62e740e3c3069299e16ee3076257027f0cbecd9ed2ebaba3085e43516c6d133d
MD5 2612034268b6a41898c87efa92d13491
BLAKE2b-256 d352990f94eeaa64233851a78d792030df211a7fbd3db6fd13dac0538665df1c

See more details on using hashes here.

Provenance

The following attestation bundles were made for wickly-0.1.1.tar.gz:

Publisher: publish.yml on ShreyanshDarshan/wickly

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file wickly-0.1.1-py3-none-any.whl.

File metadata

  • Download URL: wickly-0.1.1-py3-none-any.whl
  • Upload date:
  • Size: 21.8 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for wickly-0.1.1-py3-none-any.whl
Algorithm Hash digest
SHA256 c4fa45f0f3680602fed64cd8bbd8ab7e423e6bf431cbf96f82f02e334cb8e0be
MD5 dbdcc84bbfd847e2b28733d9b50b8a58
BLAKE2b-256 c39a0b1d3deb6160da3563995552249a30ff9126e0e43843e1b4805faa077020

See more details on using hashes here.

Provenance

The following attestation bundles were made for wickly-0.1.1-py3-none-any.whl:

Publisher: publish.yml on ShreyanshDarshan/wickly

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

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