diff --git a/IntelliTrader/IntelliTrader.py b/IntelliTrader/IntelliTrader.py
index 5cc32ef..1e7c6d7 100644
--- a/IntelliTrader/IntelliTrader.py
+++ b/IntelliTrader/IntelliTrader.py
@@ -115,5 +115,6 @@
indicator.execute_handler('vwap', datasource)
indicator.execute_handler('adx', datasource)
indicator.execute_handler('stochastic', datasource)
+indicator.execute_handler('renko', datasource, 5)
diff --git a/IntelliTrader/IntelliTrader.pyproj b/IntelliTrader/IntelliTrader.pyproj
index a2ddec5..d56daba 100644
--- a/IntelliTrader/IntelliTrader.pyproj
+++ b/IntelliTrader/IntelliTrader.pyproj
@@ -30,6 +30,7 @@
+
diff --git a/IntelliTrader/src/indicator.py b/IntelliTrader/src/indicator.py
index 16c796e..2c0ded7 100644
--- a/IntelliTrader/src/indicator.py
+++ b/IntelliTrader/src/indicator.py
@@ -12,12 +12,13 @@
from src.indicators.vwap import vwap
from src.indicators.adx import adx
from src.indicators.stochastic import stochastic
+from src.indicators.renko import renko
class Indicator:
def __init__(self, params):
self.prop = params
- def execute_handler(self, indicator_option, dataset):
+ def execute_handler(self, indicator_option, dataset, period=0):
match indicator_option:
case 'macd':
self.option_macd(dataset)
@@ -37,6 +38,9 @@ def execute_handler(self, indicator_option, dataset):
self.option_adx(dataset)
case 'stochastic':
self.option_stochastic(dataset)
+ case 'renko':
+ self.option_renko(dataset, period)
+
case _:
self.invalid_option(dataset)
@@ -205,6 +209,23 @@ def option_stochastic(self, dataset):
except:
self.prop['log'].error("The received object is not a valid DataFrame")
+ def option_renko(self, dataset, period):
+ try:
+ if dataset is not None and not dataset.empty:
+ # Calculate Renko
+ pdf = pd.DataFrame(dataset)
+ renko_bricks = renko(pdf, period)
+ last_renko_brick = renko_bricks.iloc[-1]
+
+ # Print the calculated Renko values
+ print("\nRenko Bricks:")
+ print(renko_bricks)
+ else:
+ self.prop['log'].error("Failed to calculate Renko")
+ return False
+ except:
+ self.prop['log'].error("The received object is not a valid DataFrame")
+
def invalid_option(self, dataset):
# Invalid indicator option provided
self.prop['log'].warn("The indicator option provided is not valid")
diff --git a/IntelliTrader/src/indicators/renko.py b/IntelliTrader/src/indicators/renko.py
new file mode 100644
index 0000000..5f0fa93
--- /dev/null
+++ b/IntelliTrader/src/indicators/renko.py
@@ -0,0 +1,12 @@
+import pandas as pd
+from stocktrends import Renko
+
+def renko(dataset, size=2):
+ # Check if dataset contains the required columns
+ data = dataset if 'open' in dataset and 'high' in dataset and 'low' in dataset and 'close' in dataset else None
+ data.reset_index(inplace=True)
+ r = Renko(data)
+ r.brick_size = size
+ renko_bricks = r.get_ohlc_data()
+
+ return renko_bricks