Skip to content

Instantly share code, notes, and snippets.

@aquiseb
Forked from lamres/pyrenko_optimization.py
Created April 7, 2025 13:31
Show Gist options
  • Save aquiseb/7e837f3fa99625595a714bd1073b8fa6 to your computer and use it in GitHub Desktop.
Save aquiseb/7e837f3fa99625595a714bd1073b8fa6 to your computer and use it in GitHub Desktop.
Optimization function and routine
# Max index of train data
train_ind = round(stocks_close.shape[0] * 0.7)
# Function for optimization
def evaluate_renko(brick, history, column_name):
renko_obj = pyrenko.renko()
renko_obj.set_brick_size(brick_size = brick, auto = False)
renko_obj.build_history(prices = history)
return renko_obj.evaluate()[column_name]
def scoring_stocks(method = 'optimization'):
# Create result dataframe
stock_result = pd.DataFrame(columns = ['brick_size', 'balance', 'price_ratio', 'score'],
index = stocks_close.columns)
# Optimization and evaluation of each stock
for s in stock_result.index:
# Getting bounds by ATR
atr = talib.ATR(high = np.double(stocks_high[s][:train_ind]),
low = np.double(stocks_low[s][:train_ind]),
close = np.double(stocks_close[s][:train_ind]),
timeperiod = 14)
atr = atr[np.isnan(atr) == False]
# Brick size maximization
opt_bs = 0.0
if method == 'optimization':
opt_bs = opt.fminbound(lambda x: -evaluate_renko(brick = x,
history = stocks_close[s][:train_ind], column_name = 'score'),
np.min(atr), np.max(atr), disp=0)
# Test data
data = stocks_close[s][train_ind:]
# Build renko chart and evaluation
renko_obj = pyrenko.renko()
if method == 'optimization':
renko_obj.set_brick_size(brick_size = opt_bs, auto = False)
else:
renko_obj.set_brick_size(brick_size = atr[-1], auto = False)
renko_obj.build_history(prices = data)
renko_res = renko_obj.evaluate()
# Save result to dataframe
if method == 'optimization':
stock_result.loc[s]['brick_size'] = opt_bs
else:
stock_result.loc[s]['brick_size'] = atr[-1]
stock_result.loc[s]['balance', 'price_ratio', 'score'] = renko_res
return stock_result
atr_result = scoring_stocks(method = 'atr')
opt_result = scoring_stocks(method = 'optimization')
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment