from pandas_datareader import data as pdr import json from yahoo_fin import stock_info as si from pandas import ExcelWriter import numpy as np import matplotlib.pyplot as plt import yfinance as yf import pandas as pd import requests import datetime import time import sys def roc11(closes): print(len(closes)) roc11_val = [] roc14_val = [] roc_sum = [] x = len(closes) for i in range(x): if i+11 == x: # Fixed break # cur_indx = x - i # temp_11 = (closes[cur_indx] - closes[cur_indx-11])/closes[cur_indx-11]*100 temp_11 = (closes[i+11] - closes[i])/closes[i]*100 roc11_val.append(temp_11) for i in range(x): if i+14 == x: # Fixed break temp_14 = (closes[i+14] - closes[i])/closes[i]*100 roc14_val.append(temp_14) for i in range(len(roc14_val)): roc_sum.append(roc11_val[i+3]+roc14_val[i]) print("Finished ") return roc_sum def wma10(roc_sum, n=10): roc_sum = pd.DataFrame(roc_sum, columns=['COPPOCK']) weights = np.arange(1, n+1) wmas = roc_sum.rolling(n).apply(lambda x:np.dot(x, weights)/weights.sum(), raw=True) print(wmas) return wmas yf.pdr_override() # stocklist = si.tickers_sp500() stock_file = open("./symbols_backup.txt", "r") stocklist = stock_file.readlines() stock_file.close() index_name = '^GSPC' # S&P 500 final = [] index = [] n = -1 f = open("./Samples/SHOP/2020-01-22/SHOP0.vezpal2") ticker = sys.argv[1] path='./Samples/'+ticker+'/2021-01-30/'+ticker+'0.vezpal2' path = open(path) a = json.load(path) pred_stock = a[0] n += 1 time.sleep(1) # RS_Rating start_date = datetime.datetime.now() - datetime.timedelta(days=365) end_date = datetime.date.today() # # df = pdr.get_data_yahoo(stock, start=start_date, end=end_date) # df['Percent Change'] = df['Adj Close'].pct_change() # stock_return = df['Percent Change'].sum() * 100 # # index_df = pdr.get_data_yahoo(index_name, start=start_date, end=end_date) # index_df['Percent Change'] = index_df['Adj Close'].pct_change() # index_return = index_df['Percent Change'].sum() * 100 # # RS_Rating = round((stock_return / index_return) * 10, 2) # # sma = [50, 150, 200] # for x in sma: # df["SMA_"+str(x)] = round(df.iloc[:,4].rolling(window=x).mean(), 2) # currentClose = df["Adj Close"][-1] # moving_average_50 = df["SMA_50"][-1] # moving_average_150 = df["SMA_150"][-1] # moving_average_200 = df["SMA_200"][-1] # low_of_52week = min(df["Adj Close"][-260:]) # high_of_52week = max(df["Adj Close"][-260:]) # closePrice = df["Close"] closePrice = pred_stock # print(closePrice.head()) roc_res = roc11(closePrice) wma_res = wma10(roc_res) print("==========") print(len(wma_res)); print(len(closePrice)); print(closePrice.index) entry_buy = [] entry_sell= [] entry_date = [] # for i in range(len(wma_res)): # # mark_1 = sum(wma_res["COPPOCK"][i:i+3]) # if ( i+6 < len(wma_res)): # mark_1 = wma_res["COPPOCK"][i] # mark_2 = wma_res["COPPOCK"][i+3] # mark_3 = wma_res["COPPOCK"][i+6] # if (mark_2 < mark_1 and mark_2 < mark_3): # # entry_date.append(closePrice.index[-237:][i]) # entry_buy.append(i) # print("Down ",i) # # print(entry_date) # # if (mark_2 > mark_1 and mark_2 > mark_3): # # entry_date.append(closePrice.index[-237:][i]) # entry_sell.append(i) # print("Up ",i) # # print(entry_date) # i = 0 for i in range(len(wma_res)): # mark_1 = sum(wma_res["COPPOCK"][i:i+3]) if ( i+15 < len(wma_res)): mark_1 = wma_res["COPPOCK"][i] mark_2 = wma_res["COPPOCK"][i+8] mark_3 = wma_res["COPPOCK"][i+15] mark_h = wma_res["COPPOCK"][i+10] if ((mark_2*3 < mark_1) and ( mark_2*3 < mark_3 ) and ( mark_2 > mark_h )): # entry_date.append(closePrice.index[-237:][i]) entry_buy.append(i+8) print("Down ",i," ",mark_2) # print(entry_date) if (mark_2 > mark_1 and mark_2 > mark_3 and mark_2 < mark_h): # entry_date.append(closePrice.index[-237:][i]) entry_sell.append(i+8) print("Up ",i," ",mark_2) # print(entry_date) # i = i + 7 # print(i) # wma_res['Date'] = closePrice.index[-237:] ax1 = plt.subplot(211) plt.title("COPPOCK Indicator "+str(ticker)) # for i in entry_points: # plt.vlines(x=closePrice[-237:][i], ymin=0, ymax=max(closePrice)) plt.plot(closePrice, markevery=entry_buy, marker="^", ms=4, mfc="y", linewidth=1) plt.plot(closePrice, markevery=entry_sell, marker="v", ms=4, mfc="r", linewidth=1) ax2 = plt.subplot(212, sharex=ax1) # plt.axhline(y=0, color='r') # plt.plot(closePrice[-len(wma_res):], wma_res, markevery=entry_sell, marker="o") plt.plot(range(len(wma_res)), wma_res, markevery=entry_sell, marker="o", mfc='r' ) plt.plot(range(len(wma_res)), wma_res, markevery=entry_buy, marker="+", mfc='g', linewidth=0.1) plt.show() plt.savefig("./screening_result/pred.png") # plt.savefig("./screening_result/"+str(stock)+".png", dpi=1200) plt.close() # writer = ExcelWriter("ScreenOutput.xlsx") # exportList.to_excel(writer, "Sheet1") # writer.save()