Skip to main content

A python framework that can be used to create, test and deploy trading algorithms.

Project description

Dijkies

Dijkies is a Python framework for creating, testing, and deploying algorithmic trading strategies in a clean, modular, and exchange-agnostic way.

The core idea behind Dijkies is to separate trading logic from execution and infrastructure, allowing the same strategy code to be reused for:

  • Historical backtesting
  • Paper trading
  • Live trading

Philosophy

In Dijkies, a strategy is responsible only for making decisions — when to buy, when to sell, and how much. Everything else, such as order execution, fee calculation, balance management, and exchange communication, is handled by dedicated components.

This separation ensures that strategies remain:

  • Easy to reason about
  • Easy to test
  • Easy to reuse across environments

A strategy written once can be backtested on historical data and later deployed to a real exchange without modification.

How It Works

At a high level, Dijkies operates as follows:

  1. Market data (candles) is fetched from an exchange or data provider
  2. A rolling window of historical data is passed to a strategy
  3. The strategy analyzes the data and generates buy/sell signals
  4. Orders are placed through a standardized execution interface
  5. Account state is updated accordingly
  6. Results are collected (during backtesting) or executed live

Key Design Principles

  • Strategy–Executor separation
    Trading logic is completely decoupled from execution logic.

  • Single interface for backtesting and live trading
    Switching between backtesting and live trading requires no strategy changes.

  • Explicit state management
    All balances and positions are tracked in a transparent State object.

  • Minimal assumptions
    Dijkies does not enforce indicators, timeframes, or asset types.

  • Composable and extensible
    New exchanges, execution models, and risk layers can be added easily.

Who Is This For?

Dijkies is designed for:

  • Developers building algorithmic trading systems
  • Quantitative traders who want full control over strategy logic
  • Anyone who wants to move from backtesting to production without rewriting code

What Dijkies Is Not

  • A no-code trading bot
  • A black-box strategy optimizer
  • A fully managed trading platform

Dijkies provides the building blocks, not the trading edge.


Quick Start

This quick start shows how to define a strategy, fetch market data, and run a backtest in just a few steps.

1. Define a Strategy

A strategy is a class that inherits from Strategy and implements the execute method.
It receives a rolling dataframe of candles and decides when to place orders.

from dijkies.strategy import Strategy
from dijkies.executors import ExchangeAssetClient
from ta.momentum import RSIIndicator
import pandas as pd


class RSIStrategy(Strategy):
    # Amount of historical data passed into execute()
    analysis_dataframe_size_in_minutes = 60 * 24 * 30  # 30 days

    def __init__(
        self,
        executor: ExchangeAssetClient,
        lower_threshold: float,
        higher_threshold: float,
    ) -> None:
        self.lower_threshold = lower_threshold
        self.higher_threshold = higher_threshold
        super().__init__(executor)

    def execute(self, candle_df: pd.DataFrame) -> None:
        candle_df["rsi"] = RSIIndicator(candle_df.close).rsi()

        previous = candle_df.iloc[-2]
        current = candle_df.iloc[-1]

        # Buy when RSI crosses below lower threshold
        if previous.rsi > self.lower_threshold and current.rsi < self.lower_threshold:
            self.executor.place_market_buy_order(
                self.executor.state.base,
                self.executor.state.quote_available,
            )

        # Sell when RSI crosses above higher threshold
        if previous.rsi < self.higher_threshold and current.rsi > self.higher_threshold:
            self.executor.place_market_sell_order(
                self.executor.state.base,
                self.executor.state.base_available,
            )

2. fetch data for your backtest

Market data is provided as a pandas DataFrame containing OHLCV candles.

from dijkies.exchange_market_api import BitvavoMarketAPI

market_api = BitvavoMarketAPI()
candle_df = market_api.get_candles(base="XRP", lookback_in_minutest=60*24*365)

3. Set Up State and BacktestingExecutor

Market data is provided as a pandas DataFrame containing OHLCV candles.

from dijkies.executors import BacktestExchangeAssetClient, State

state = State(
    base="XRP",
    total_base=0,
    total_quote=1000,
)

executor = BacktestExchangeAssetClient(
    state=state,
    fee_limit_order=0.0015,
    fee_market_order=0.0025,
)

4. Run the Backtest

Use the Backtester to run the strategy over historical data.

from dijkies.backtest import Backtester

strategy = RSIStrategy(
    executor=executor,
    lower_threshold=35,
    higher_threshold=65,
)

backtester = Backtester()

results = backtester.run(
    candle_df=candle_df,
    strategy=strategy,
)

results.total_value_strategy.plot()
results.total_value_hodl.plot()

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

dijkies-0.1.0.tar.gz (12.3 kB view details)

Uploaded Source

Built Distribution

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

dijkies-0.1.0-py3-none-any.whl (15.5 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: dijkies-0.1.0.tar.gz
  • Upload date:
  • Size: 12.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.9.14 {"installer":{"name":"uv","version":"0.9.14","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

File hashes

Hashes for dijkies-0.1.0.tar.gz
Algorithm Hash digest
SHA256 00f41f7d2ac862d2589d11bb6a8b6e2e2c1813f82a02ee94f63f81750d1f69f8
MD5 ceb6c56504703e69b8e2b23135d5f178
BLAKE2b-256 c1da3cd2c25b4b471a540cd8bacc79bbe2b7880b551770406df6f8736e16f4b7

See more details on using hashes here.

File details

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

File metadata

  • Download URL: dijkies-0.1.0-py3-none-any.whl
  • Upload date:
  • Size: 15.5 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.9.14 {"installer":{"name":"uv","version":"0.9.14","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

File hashes

Hashes for dijkies-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 897418732f9b7ad8583d982e9a024db20af34e90083aeb1aa5c16cdf3f729aa3
MD5 1fba2364554b8284dfa60d956fb814c8
BLAKE2b-256 f363fc81399d3f61af76914cb5bb48d066566ff907d3b9766dbe6b4c31626d78

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