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