-
-
Save aquiseb/7e837f3fa99625595a714bd1073b8fa6 to your computer and use it in GitHub Desktop.
Optimization function and routine
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# 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