Skip to main content

A rule-based decision tree implementation for Python

Project description

PyDecisionGraph

PyDecisionGraph is an easy-to-use library to create custom decision trees, primarily designed for trading and financial decision-making. This package helps you build rule-based decision processes and visualize them effectively.

Installation

To install the package, run:

pip install PyDecisionGraph

Requirements

  • Python 3.12 or higher

Documentation

For detailed documentation, visit https://pydecisiongraph.readthedocs.io/.

Quick Start

Here is a quick demo on how to use PyDecisionGraph for building a decision tree based on various conditions:

from decision_graph.decision_tree import LogicNode, LOGGER, AttrExpression, LongAction, ShortAction, NoAction, RootLogicNode, LogicMapping

# Mapping of attribute names to their values
LogicMapping.AttrExpression = AttrExpression

state = {
    "exposure": 0,  # Current exposure
    "working_order": 0,  # Current working order
    "up_prob": 0.8,  # Probability of price going up
    "down_prob": 0.2,  # Probability of price going down
    "volatility": 0.24,  # Current market volatility
    "ttl": 15.3  # Time to live (TTL) of the decision tree
}

# Root of the logic tree
with RootLogicNode() as root:
    # Define root logic mapping with state data
    with LogicMapping(name='Root', data=state) as lg_root:
        lg_root: LogicMapping

        # Condition for zero exposure
        with lg_root.exposure == 0:
            root: LogicNode
            with LogicMapping(name='check_open', data=state) as lg:
                with lg.working_order != 0:
                    break_point = NoAction()  # No action if there's a working order
                    lg.break_(scope=lg)  # Exit the current scope

                with lg.volatility > 0.25:  # Check if volatility is high
                    with lg.down_prob > 0.1:  # Action for down probability
                        LongAction()

                    with lg.up_prob < -0.1:  # Action for up probability
                        ShortAction()

        # Condition when TTL is greater than 30
        with lg_root.ttl > 30:
            with lg_root.working_order > 0:
                ShortAction()  # Action to short if working order exists
            LongAction()  # Always take long action
            lg_root.break_(scope=lg_root)  # Exit scope

        # Closing logic based on exposure and probabilities
        with LogicMapping(name='check_close', data=state) as lg:
            with (lg.exposure > 0) & (lg.down_prob > 0.):
                ShortAction()  # Short action for positive exposure and down probability

            with (lg.exposure < 0) & (lg.up_prob > 0.):
                LongAction()  # Long action for negative exposure and up probability

# Visualize the decision tree
root.to_html()

# Log the evaluation result
LOGGER.info(root())

Explanation of the Script:

  • LogicNode & LogicMapping:

    • LogicNode: Represents a node in the decision tree where conditions are evaluated.
    • LogicMapping: Associates logical conditions with the state (data) used in decision-making.
  • State:

    • A dictionary containing the variables used for decision-making, such as exposure, working_order, up_prob, etc.
  • RootLogicNode:

    • The entry point for the decision tree where all logical decisions are linked.
  • Decision Conditions:

    • Inside each with block, logical conditions are evaluated (e.g., lg.volatility > 0.25, lg.up_prob < -0.1) to determine which action to take.
    • Actions like LongAction() or ShortAction() are taken based on the conditions.
  • Action Handling:

    • LongAction(), ShortAction(), and NoAction() represent different actions you can trigger in the decision tree based on the conditions.
  • Logging:

    • The result of the tree evaluation is logged using the LOGGER object, which outputs to the console.
  • Visualization:

    • root.to_html() generates an HTML representation of the decision tree for visualization.

Features

  • Easily define custom decision rules.
  • Actionable outcomes like LongAction, ShortAction, and NoAction.
  • Log outputs for debugging and tracking.
  • Visualize decision paths through HTML export.

Contributing

Feel free to fork, submit issues, and create pull requests. Contributions are always welcome!

License

This project is licensed under the Mozilla Public License 2.0 - see the LICENSE 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

pydecisiongraph-0.1.1.tar.gz (25.1 kB view details)

Uploaded Source

Built Distribution

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

pydecisiongraph-0.1.1-py3-none-any.whl (27.2 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: pydecisiongraph-0.1.1.tar.gz
  • Upload date:
  • Size: 25.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.12.9

File hashes

Hashes for pydecisiongraph-0.1.1.tar.gz
Algorithm Hash digest
SHA256 4cffabf33420388a13f80aa3dfed5f521efd56e27aa494dfe8a242637303b8b0
MD5 e944363a74ed9b6b49df2299cd70e2c8
BLAKE2b-256 55c94a36f94e2feccf96f924dee72a464959714bc79ee6e40742236754d452aa

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pydecisiongraph-0.1.1-py3-none-any.whl
Algorithm Hash digest
SHA256 c8d8a01cae3c28c2550ad8e5900ba2d30744a4061d8b704c9cf3b209ddd534d3
MD5 424f27a3bbe673f693b6a9b153e07a83
BLAKE2b-256 49809dabe07a1ab56ccfdb0ae90fa53b6d51e9954fbafd35a29c7b170629ec9c

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