19-Renko-Charts

Sat 17 May 2025
# Created: 20250103
import pyutil as pyu
pyu.get_local_pyinfo()
'conda env: ml312-2024; pyv: 3.12.7 | packaged by Anaconda, Inc. | (main, Oct  4 2024, 13:27:36) [GCC 11.2.0]'
# !pip install stocktrends
print(pyu.ps2("stocktrends yfinance pandas matplotlib"))
stocktrends==0.1.5
yfinance==0.2.51
pandas==2.2.3
matplotlib==3.9.3
import yfinance as yf
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import yfinance as yf
import pandas as pd
from stocktrends import Renko
import matplotlib.pyplot as plt

# Step 1: Download historical data
symbol = "^GSPC"  # S&P 500 as an example
start = "2020-01-01"
end = "2023-12-31"
data = yf.download(symbol, start=start, end=end)

# Step 2: Prepare data for Renko
def prepare_renko_data(data, brick_size=50):
    # Rename columns to lowercase as required by the Renko library
    data_renko = data[['Open', 'High', 'Low', 'Close']].copy()
    data_renko.columns = ['open', 'high', 'low', 'close']
    data_renko.reset_index(inplace=True)

    # Initialize Renko object
    renko = Renko(data_renko)
    renko.brick_size = brick_size  # Set the brick size
    renko_data = renko.get_ohlc_data()  # Generate Renko bricks

    # Add approximate dates from original data index
    renko_data['date'] = data_renko['date'].iloc[:len(renko_data)].reset_index(drop=True)

    return renko_data

# Step 3: Generate Renko data
brick_size = 50  # Adjust brick size as needed
renko_data = prepare_renko_data(data, brick_size)

# Step 4: Plot Renko Chart
plt.figure(figsize=(14, 7))
plt.plot(renko_data['date'], renko_data['open'], marker='o', linestyle='-', color='green', label='Open')
plt.plot(renko_data['date'], renko_data['close'], marker='o', linestyle='-', color='red', label='Close')
plt.fill_between(renko_data['date'], renko_data['open'], renko_data['close'], 
                 where=renko_data['close'] >= renko_data['open'], facecolor='green', alpha=0.4)
plt.fill_between(renko_data['date'], renko_data['open'], renko_data['close'], 
                 where=renko_data['close'] < renko_data['open'], facecolor='red', alpha=0.4)
plt.title(f'Renko Chart for {symbol} (Brick Size = {brick_size})')
plt.xlabel('Date')
plt.ylabel('Price')
plt.legend(loc='best')
plt.grid(True)
plt.show()
[*********************100%***********************]  1 of 1 completed



---------------------------------------------------------------------------

KeyError                                  Traceback (most recent call last)

Cell In[14], line 31
     29 # Step 3: Generate Renko data
     30 brick_size = 50  # Adjust brick size as needed
---> 31 renko_data = prepare_renko_data(data, brick_size)
     33 # Step 4: Plot Renko Chart
     34 plt.figure(figsize=(14, 7))


Cell In[14], line 22, in prepare_renko_data(data, brick_size)
     20 renko = Renko(data_renko)
     21 renko.brick_size = brick_size  # Set the brick size
---> 22 renko_data = renko.get_ohlc_data()  # Generate Renko bricks
     24 # Add approximate dates from original data index
     25 renko_data['date'] = data_renko['date'].iloc[:len(renko_data)].reset_index(drop=True)


File ~/miniconda3/envs/ml312-2024/lib/python3.12/site-packages/stocktrends/indicators.py:37, in Renko.get_ohlc_data(self)
     35 def get_ohlc_data(self):
     36     if self.chart_type == self.PERIOD_CLOSE:
---> 37         self.period_close_bricks()
     38     else:
     39         self.price_movement_bricks()


File ~/miniconda3/envs/ml312-2024/lib/python3.12/site-packages/stocktrends/indicators.py:49, in Renko.period_close_bricks(self)
     47 brick_size = self.brick_size
     48 columns = ['date', 'open', 'high', 'low', 'close']
---> 49 self.df = self.df[columns]
     51 self.cdf = pd.DataFrame(
     52     columns=columns,
     53     data=[],
     54 )
     56 self.cdf.loc[0] = self.df.loc[0]


File ~/miniconda3/envs/ml312-2024/lib/python3.12/site-packages/pandas/core/frame.py:4108, in DataFrame.__getitem__(self, key)
   4106     if is_iterator(key):
   4107         key = list(key)
-> 4108     indexer = self.columns._get_indexer_strict(key, "columns")[1]
   4110 # take() does not accept boolean indexers
   4111 if getattr(indexer, "dtype", None) == bool:


File ~/miniconda3/envs/ml312-2024/lib/python3.12/site-packages/pandas/core/indexes/base.py:6200, in Index._get_indexer_strict(self, key, axis_name)
   6197 else:
   6198     keyarr, indexer, new_indexer = self._reindex_non_unique(keyarr)
-> 6200 self._raise_if_missing(keyarr, indexer, axis_name)
   6202 keyarr = self.take(indexer)
   6203 if isinstance(key, Index):
   6204     # GH 42790 - Preserve name from an Index


File ~/miniconda3/envs/ml312-2024/lib/python3.12/site-packages/pandas/core/indexes/base.py:6252, in Index._raise_if_missing(self, key, indexer, axis_name)
   6249     raise KeyError(f"None of [{key}] are in the [{axis_name}]")
   6251 not_found = list(ensure_index(key)[missing_mask.nonzero()[0]].unique())
-> 6252 raise KeyError(f"{not_found} not in index")


KeyError: "['date'] not in index"

def show_graph(symbol):

pass
show_graph("AMZN")
[*********************100%***********************]  1 of 1 completed

png



Score: 10

Category: stockmarket