exodus-stock/screener.py
2022-04-06 14:56:09 +07:00

177 lines
5.1 KiB
Python

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()