Skip to main content

chartDL: Market chart data preprocessing for machine learning and deep learning with multi-timeframe dataset support.

Project description

chartDL

📈 Market Chart Data for ML/DL

A toolkit to handle and preprocess financial market chart data for technical analysis, with a focus on preparing input for deep learning and machine learning tasks.

A key feature of this project is its ability to present higher timeframe data (OHLCV values, indicators, etc.) alongside target timeframe data as live data, preventing future information leakage. This supports models and analysts in performing multi-timeframe analysis, enhancing the realism and context-awareness of market predictions and insights.

Output Structure

Here is an example that shows the output as a combination of different timeframes (with optional indicators). The chart demonstrates how different timeframes (e.g., 15m, 30m, 1h) can be displayed together, and how indicators can be overlaid for enriched analysis.

Sequence Length of Data

Note: Each dataset within each timeframe maintains the same sequence length, which can be modified through function arguments.

🔑 Key Features

📊 Multi-timeframe datasets
Generate synchronized multi-timeframe datasets without future data leakage, compatible with deep learning data loaders (e.g., PyTorch, TensorFlow).

🗃️ CSV tools for I/O and timeframe conversion
Easily import/export datasets in CSV format and convert between timeframes for flexible data handling.

⚙️ Indicator integration
Add technical indicators to datasets, with support for custom indicator development for research and experimentation.

🚀 Installation

📦 Option 1: Install via pip

pip install chartDL

🛠 Option 2: Clone and install manually

git clone https://github.com/mehranESB/ohlcv-chart-tools.git
cd ohlcv-chart-tools
python setup.py install

📚 Usage Guide

1️⃣ Create a Multi-Timeframe Dataset

This example demonstrates how to create a multi-timeframe dataset, with added indicators like Simple Moving Average (SMA) and Exponential Moving Average (EMA):

import chartDL.indicator as indc
import chartDL.preprocess as pp
import chartDL.utils.csv as csv_utils

# Load the target timeframe data (15-minute)
target_file_path = Path("./DATA/csv/EURUSD-15m.csv")
source_df = csv_utils.import_ohlcv_from_csv(
    target_file_path, header=True, datetime_format="%Y-%m-%d %H:%M:%S"
)

# Define higher timeframes to generate multi-timeframe data (e.g., 30m, 1h)
higher_timeframes = ["30m", "1h"]

# Define the indicators to add to the dataset (e.g., SMA, EMA)
indicators = [indc.SMA(20), indc.EMA(10)]

# Generate the multi-timeframe views, including indicators+
save_path = Path("./DATA/multi_view/EURUSD-15m") # folder where the multi-timeframe data will be saved
mvt_dfs, time_frames = pp.multi_timeframe_view(
    source_df, higher_timeframes, indicators=indicators, save_to=save_path
)

2️⃣ Use with PyTorch DataLoader

This guide demonstrates how to wrap the MultiDataset with PyTorch’s DataLoader for model training.

from torch.utils.data import Dataset, DataLoader
from chartDL.dataset import MultiDataset

class CustomDataset(Dataset):
    def __init__(self, dataset: MultiDataset):
        self.dataset = dataset  # store to use it as data source

    def __len__(self):
        return len(self.dataset)

    def __getitem__(self, index):
        multi_time_frame_data = self.dataset[index]

        retrive_data = {}
        for df in multi_time_frame_data:
            name = f"x_{df.attrs['timeframe']}"
            value = df[["High", "Low"]].to_numpy()
            retrive_data[name] = value

        return retrive_data


# Initialize MultiDataset (use your own path and sequence length)
multi_dataset = MultiDataset("./DATA/multi_view/EURUSD-1h", seq_len=128)

# Create a DataLoader for batching and shuffling
data_loader = DataLoader(CustomDataset(multi_dataset), batch_size=64, shuffle=True)

# Iterate through batches during model training
for batch in data_loader:
    ...

🧪 Explore More Utilities

Check out the examples/ folder for code samples on:

  • Timeframe conversion
  • Custom indicator creation
  • CSV import/export tools
  • Data visualization

🤝 Contributing

Contributions are welcome and appreciated!

Feel free to fork the repository, submit pull requests, or open issues for bugs, feature suggestions, or improvements.

📄 License

This project is licensed under the MIT License. See the LICENSE.txt file for details.

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

chart_data_dl-0.1.0.tar.gz (28.9 kB view details)

Uploaded Source

Built Distribution

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

chart_data_dl-0.1.0-py3-none-any.whl (29.5 kB view details)

Uploaded Python 3

File details

Details for the file chart_data_dl-0.1.0.tar.gz.

File metadata

  • Download URL: chart_data_dl-0.1.0.tar.gz
  • Upload date:
  • Size: 28.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.10.6

File hashes

Hashes for chart_data_dl-0.1.0.tar.gz
Algorithm Hash digest
SHA256 7b21e00a4e65ab981a193135d8eea5106f9b9f28942e06ba1fa5a8f61af56322
MD5 1c1b33775a1effeab3d30b73009a60cb
BLAKE2b-256 ab4d3a515efbf9d042bb361429a23876095504ec2965d8b9e3c5acc33df8e132

See more details on using hashes here.

File details

Details for the file chart_data_dl-0.1.0-py3-none-any.whl.

File metadata

  • Download URL: chart_data_dl-0.1.0-py3-none-any.whl
  • Upload date:
  • Size: 29.5 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.10.6

File hashes

Hashes for chart_data_dl-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 e826af43607bffd9273a6af4b494939f42fb4e26cbf0b44cf7d971edb6875b9a
MD5 ef6f1f620898ebf11aa435390f9962e4
BLAKE2b-256 2e7e1cf8d05b8dd59d1e05667d9e0420a57ebd882594807ff50a3cfe3f6b7ca1

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