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
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distributions
Built Distributions
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file pydecisiongraph-0.2.6.post2-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl.
File metadata
- Download URL: pydecisiongraph-0.2.6.post2-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
- Upload date:
- Size: 2.1 MB
- Tags: CPython 3.14t, manylinux: glibc 2.17+ x86-64, manylinux: glibc 2.28+ x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.14.0
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
77b05120cb66a2e52d418d28510d91ac310a4aca464d8416d5833a21fa24f4a4
|
|
| MD5 |
eb90099bfda841f53f4ef51e136fe81b
|
|
| BLAKE2b-256 |
7b166fc699f0700719c080cfd1481865ee0839596cd50a6092c8195e633b9928
|
File details
Details for the file pydecisiongraph-0.2.6.post2-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl.
File metadata
- Download URL: pydecisiongraph-0.2.6.post2-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
- Upload date:
- Size: 2.0 MB
- Tags: CPython 3.14, manylinux: glibc 2.17+ x86-64, manylinux: glibc 2.28+ x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.14.0
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
b3cfb56eed4c6423eb0046c29e7332ecd5bdf708ec31f5f57687e7b79f9d4aa9
|
|
| MD5 |
5f65dd93e1c2413a4d179b51713c3b29
|
|
| BLAKE2b-256 |
b25af4e411ef8cd9f72b176ba3af92eb98eb1d35960815207865fb7d232d5118
|
File details
Details for the file pydecisiongraph-0.2.6.post2-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl.
File metadata
- Download URL: pydecisiongraph-0.2.6.post2-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
- Upload date:
- Size: 2.0 MB
- Tags: CPython 3.13, manylinux: glibc 2.17+ x86-64, manylinux: glibc 2.28+ x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.14.0
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
d964f65492036b581a9a2de4c8f395cda4470c50178b38bd7894ceb14059fe54
|
|
| MD5 |
d1dab663ebb6aac58dd6b6e496d889ca
|
|
| BLAKE2b-256 |
49112ce9b58266e2f0814f54b202bdaf8be3cc3811bf4d1d87851a382d9cbd00
|
File details
Details for the file pydecisiongraph-0.2.6.post2-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl.
File metadata
- Download URL: pydecisiongraph-0.2.6.post2-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
- Upload date:
- Size: 2.1 MB
- Tags: CPython 3.12, manylinux: glibc 2.17+ x86-64, manylinux: glibc 2.28+ x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.14.0
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
6ec7258850c7b86ab621e85f87f1aff69268344f31b965b745c8e7d4217dbf34
|
|
| MD5 |
62e678c76612b1ff1ed57a4bd68ca767
|
|
| BLAKE2b-256 |
f04a9b9b36f8fe2ba3677c91f8d8fa2545e82871a8c370ca806bbbaaa4e39e51
|