Skip to main content

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

Project description

chart-data-dl

📈 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 chart-data-dl

🛠 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.1.tar.gz (28.8 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.1-py3-none-any.whl (29.5 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: chart_data_dl-0.1.1.tar.gz
  • Upload date:
  • Size: 28.8 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.1.tar.gz
Algorithm Hash digest
SHA256 4f088c136c8b0d927f95e3069454cd50c229a2ade0b32f8be58f275f84630208
MD5 e1e29e2429bcdf30f6134e8c0ca07c83
BLAKE2b-256 8542dcf10049cc21a3b3d7fcb8a677e17138c6f857ef3494ca4a9a8e8280af27

See more details on using hashes here.

File details

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

File metadata

  • Download URL: chart_data_dl-0.1.1-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.1-py3-none-any.whl
Algorithm Hash digest
SHA256 c3e935039f3a7c49a0e72df7c5856c2071b86fad814baabd93cd33977a777131
MD5 bdc54802ab3d186dd03faa00bbcdbd9c
BLAKE2b-256 fb66dd0297897f0f10b1f73a66fe048285073890d44489d85bd4eea38d6c378e

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