Answered step by step
Verified Expert Solution
Link Copied!

Question

1 Approved Answer

Why is my code not printing anything? The indicators.py file should be printing charts but not a single one is printing and no errors are

Why is my code not printing anything? The indicators.py file should be printing charts but not a single one is printing and no errors are popping up. I also need the testproject.py file to be able to run everything in the project and gain the same results. its almost like a shortcut instead of having to go and run every file individually. Please help with this.

indicators.py

import pandas as pd

import matplotlib.pyplot as plt

def bollinger_bands_signals(df, window=20):

rolling_mean = df['Close'].rolling(window=window).mean()

rolling_std = df['Close'].rolling(window=window).std()

upper_band = rolling_mean + (2 * rolling_std)

lower_band = rolling_mean - (2 * rolling_std)

# Calculate the Bollinger Bands indicator

bb_indicator = (df['Close'] - rolling_mean) / (2 * rolling_std)

return upper_band, lower_band, bb_indicator

def relative_strength_index_signals(df, window=14):

# Calculate RSI and add signals

delta = df['Close'].diff(1)

gain = delta.where(delta > 0, 0)

loss = -delta.where(delta < 0, 0)

avg_gain = gain.rolling(window=window).mean()

avg_loss = loss.rolling(window=window).mean()

rs = avg_gain / avg_loss

rsi = 100 - (100 / (1 + rs))

# Calculate RSI signals

df['RSI Buy'] = (rsi > 30).astype(int)

df['RSI Sell'] = (rsi < 70).astype(int)

def moving_average_convergence_divergence_signals(df, short_window=12, long_window=26):

# Calculate MACD and add signals

short_ema = df['Close'].ewm(span=short_window, adjust=False).mean()

long_ema = df['Close'].ewm(span=long_window, adjust=False).mean()

macd = short_ema - long_ema

signal = macd.ewm(span=9, adjust=False).mean()

df['MACD'] = macd

df['MACD Buy'] = (macd > signal).astype(int)

df['MACD Sell'] = (macd < signal).astype(int)

def stochastic_oscillator_signals(df, window=14):

# Calculate Stochastic Oscillator and add signals

high = df['High'].rolling(window=window).max()

low = df['Low'].rolling(window=window).min()

stochastic_osc = (df['Close'] - low) / (high - low) * 100

df['Stochastic Oscillator'] = stochastic_osc

df['Stochastic Buy'] = (stochastic_osc > 20).astype(int)

df['Stochastic Sell'] = (stochastic_osc < 80).astype(int)

def percentage_price_indicator_signals(df, window=20):

# Calculate Percentage Price Indicator and add signals

rolling_max = df['Close'].rolling(window=window).max()

rolling_min = df['Close'].rolling(window=window).min()

ppi = (df['Close'] - rolling_min) / (rolling_max - rolling_min)

df['Percentage Price Indicator'] = ppi

df['PPI Buy'] = (ppi > 0.8).astype(int)

df['PPI Sell'] = (ppi < 0.2).astype(int)

if __name__ == "__main":

# Load price data using util.py or from a CSV file

df = pd.read_csv('../data/JPM.csv', parse_dates=True, usecols=['Date', 'Open', 'High', 'Low', 'Close', 'Volume', 'Adj Close'])

# Calculate Bollinger Bands

upper_band, lower_band, bb_indicator = bollinger_bands_signals(df)

# chart for Bollinger Bands

plt.figure(figsize=(12, 4))

plt.plot(df['Date'], df['Close'], label='Close Price', color='blue')

plt.plot(df['Date'], upper_band, label='Upper Bollinger Band', color='green')

plt.plot(df['Date'], lower_band, label='Lower Bollinger Band', color='red')

plt.plot(df['Date'], bb_indicator, label='Bollinger Bands Indicator', color='purple')

plt.title('Bollinger Bands')

plt.legend()

plt.grid()

plt.show()

# Calculate RSI

relative_strength_index_signals(df)

# chart for RSI

plt.figure(figsize=(12, 4))

plt.plot(df['Date'], df['RSI'], label='RSI', color='blue')

plt.axhline(y=70, color='red', linestyle='--', label='Overbought (70)')

plt.axhline(y=30, color='green', linestyle='--', label='Oversold (30)')

plt.title('Relative Strength Index (RSI)')

plt.legend()

plt.grid()

plt.show()

# Calculate MACD

moving_average_convergence_divergence_signals(df)

# chart for MACD

plt.figure(figsize=(12, 4))

plt.plot(df['Date'], df['Close'], label='Close Price', color='blue')

plt.plot(df['Date'], df['MACD'], label='MACD', color='orange')

plt.plot(df['Date'], df['MACD Signal'], label='MACD Signal', color='red')

plt.bar(df['Date'], df['MACD Histogram'], label='MACD Histogram', color='purple', alpha=0.5)

plt.title('Moving Average Convergence Divergence (MACD)')

# Plot buy and sell signals based on MACD crossovers

plt.plot(df['Date'][df['MACD Buy'] == 1], df['Close'][df['MACD Buy'] == 1], 'g^', markersize=8, label='MACD Buy Signal')

plt.plot(df['Date'][df['MACD Sell'] == 1], df['Close'][df['MACD Sell'] == 1], 'rv', markersize=8, label='MACD Sell Signal')

plt.legend()

plt.grid()

plt.show()

# Calculate Stochastic Oscillator

stochastic_oscillator_signals(df)

#a chart for Stochastic Oscillator

plt.figure(figsize=(12, 4))

plt.plot(df['Date'], df['Stochastic Oscillator'], label='Stochastic Oscillator', color='blue')

plt.axhline(y=80, color='red', linestyle='--', label='Upper Boundary (80)')

plt.axhline(y=20, color='green', linestyle='--', label='Lower Boundary (20)')

plt.title('Stochastic Oscillator')

plt.legend()

plt.grid()

plt.show()

# Calculate PPI

percentage_price_indicator_signals(df)

# chart for PPI

plt.figure(figsize=(12, 4))

plt.plot(df['Date'], df['Percentage Price Indicator'], label='PPI', color='blue')

plt.axhline(y=0.8, color='red', linestyle='--', label='Threshold (0.8)')

plt.axhline(y=0.2, color='green', linestyle='--', label='Threshold (0.2)')

plt.title('Percentage Price Indicator (PPI)')

# Plot buy and sell signals

plt.plot(df['Date'][df['PPI Buy'] == 1], df['Percentage Price Indicator'][df['PPI Buy'] == 1], 'g^', markersize=8, label='PPI Buy Signal')

plt.plot(df['Date'][df['PPI Sell'] == 1], df['Percentage Price Indicator'][df['PPI Sell'] == 1], 'rv', markersize=8, label='PPI Sell Signal')

plt.legend()

plt.grid()

plt.show()

TheoreticallyOptimalStrategy.py

import pandas as pd

class TheoreticallyOptimalStrategy:

def testPolicy(self, symbol, sd, ed, sv):

dates = pd.date_range(sd, ed)

trades = pd.DataFrame(index=dates)

trades[symbol] = 0

# Determine the number of trading days

num_trading_days = len(dates)

# Determine the maximum number of shares that can be bought/sold

max_shares = 1000

# Buy and sell alternatively each day (starting with buying)

for i in range(num_trading_days):

if i % 2 == 0:

trades.iloc[i] = max_shares

else:

trades.iloc[i] = -max_shares

return trades

testproject.py

import datetime as dt

import TheoreticallyOptimalStrategy as tos

import indicators as ind

import marketsimcode as ms

def calculate_portfolio_statistics(start_date, end_date, symbol, start_value):

tos_strategy = tos.TheoreticallyOptimalStrategy()

trades = tos_strategy.testPolicy(symbol, start_date, end_date, start_value)

portvals = ms.compute_portvals(trades, start_date, end_date, start_value)

daily_returns = portvals / portvals.shift(1) - 1

daily_returns.iloc[0] = 0

cumulative_return = portvals.iloc[-1] / portvals.iloc[0] - 1

stdev_daily_returns = daily_returns.std()

mean_daily_returns = daily_returns.mean()

return cumulative_return, stdev_daily_returns, mean_daily_returns

if __name__ == "__main":

symbol = "JPM"

start_date = dt.datetime(2008, 1, 1)

end_date = dt.datetime(2009, 12, 31)

start_value = 100000

cumulative_return, stdev_daily_returns, mean_daily_returns = calculate_portfolio_statistics(start_date, end_date, symbol, start_value)

print(f"Cumulative return: {cumulative_return:.6f}")

print(f"Stdev of daily returns: {stdev_daily_returns:.6f}")

print(f"Mean of daily returns: {mean_daily_returns:.6f}")

Step by Step Solution

There are 3 Steps involved in it

Step: 1

Based on the code you provided it seems that there are some indentation issues in your indicatorspy file Python relies heavily on proper indentation t... blur-text-image

Get Instant Access to Expert-Tailored Solutions

See step-by-step solutions with expert insights and AI powered tools for academic success

Step: 2

blur-text-image

Step: 3

blur-text-image

Ace Your Homework with AI

Get the answers you need in no time with our AI-driven, step-by-step assistance

Get Started

Recommended Textbook for

Income Tax Fundamentals 2013

Authors: Gerald E. Whittenburg, Martha Altus Buller, Steven L Gill

31st Edition

1111972516, 978-1285586618, 1285586611, 978-1285613109, 978-1111972516

More Books

Students also viewed these Programming questions

Question

In your opinion, who should define normal versus abnormal behavior?

Answered: 1 week ago