InvestingPlatform / alerts.py
Chaitanya01's picture
Upload 16 files
919ec8d
raw
history blame
4.13 kB
from distutils.command.sdist import sdist
from numpy import tri
import pandas as pd
import json, requests
import slack, time
from datetime import datetime
# from bs4 import BeautifulSoup
from config import *
def get_yahoo_finance_quote(symbol):
# Get the symbol quote from yahoo finance, we are using Beautiful Soup for scraping
URL = f"https://finance.yahoo.com/quote/{symbol}"
headers = {'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.61 Safari/537.36'}
page = requests.get(URL, headers = headers)
soup = BeautifulSoup(page.text, "html.parser")
price = soup.find('div',{'class':'D(ib) Mend(20px)'}).find_all('fin-streamer')[0].text
return float(price.replace(",",""))
def get_cnbc_data(symbol):
ticker = symbol.replace(" ","")
if ticker == "NASDAQ":
ticker = "NDX"
elif ticker == "NIFTY50":
ticker = ".NSEI"
# Get the symbol quote from yahoo finance, we are using Beautiful Soup for scraping
df = pd.DataFrame(requests.get(f"https://ts-api.cnbc.com/harmony/app/charts/1Y.json?symbol={ticker}").json()["barData"]["priceBars"])
# df_1D = pd.DataFrame(requests.get(f"https://ts-api.cnbc.com/harmony/app/charts/1D.json?symbol={ticker}").json()["barData"]["priceBars"])
df["datetime"] = pd.to_datetime(df['tradeTimeinMills'],unit='ms')
df["close"] = df["close"].astype(float)
# df_1D["close"] = df_1D["close"].astype(float)
df.set_index("datetime",inplace = True)
dma200 = (df["close"].rolling(200).mean()).iloc[-1]
close = (df["close"].iloc[-1])
return dma200, close
client = slack.WebClient(token = SLACK_TOKEN)
while True:
df = pd.read_csv('watchlist.csv')
df.set_index("Symbol",inplace = True)
# df_crypto = pd.DataFrame(json.loads(requests.get("https://ftx.com/api/markets").text)["result"])
# df_crypto = df_crypto[df_crypto["quoteCurrency"].isin(["USD","USDT"])]
# df_crypto.set_index("name",inplace = True)
if len(df)>0:
req_df_price = df[df["status"] == "Pending"]
req_df_dma = df[df["dma_status"] == "Pending"]
for symbol in req_df_price.index:
if symbol in ["SPX","US 2Y","US 5Y","US 10Y","US 30Y","HYG","LQD","NASDAQ","VIX","NIFTY50"]:
dma200, ltp= get_cnbc_data(symbol)
# else:
# ltp = df_crypto.loc[symbol]["last"]
trigger_level = req_df_price.loc[symbol]["Trigger"]
triggered = 0
if req_df_price.loc[symbol]["view_type"] == "Above":
if trigger_level<=ltp:
triggered = 1
elif req_df_price.loc[symbol]["view_type"] == "Below":
if trigger_level>=ltp:
triggered = 1
if triggered == 1:
df.at[symbol,"status"] = "Triggered"
client.chat_postMessage(channel = f"#{df.loc[symbol]['alert_type'].lower()}_signal",
text = f"{datetime.now().strftime('%Y-%m-%d %H:%M:%S')} {symbol} is {df.loc[symbol]['view_type']} {trigger_level} at {ltp}")
for symbol in req_df_dma.index:
dma_check = req_df_dma.loc[symbol]["dma200"]
if dma_check == False:
continue
triggered_dma200 = 0
dma200, ltp= get_cnbc_data(symbol)
print(dma200)
if req_df_dma.loc[symbol]["dma200_view_type"] == "Above":
if dma200<=ltp:
triggered_dma200 = 1
elif req_df_dma.loc[symbol]["dma200_view_type"] == "Below":
if dma200>=ltp:
triggered_dma200 = 1
if triggered_dma200 == 1:
df.at[symbol,"dma_status"] = "Triggered"
client.chat_postMessage(channel = f"#{df.loc[symbol]['alert_type'].lower()}_signal",
text = f"{datetime.now().strftime('%Y-%m-%d %H:%M:%S')} {symbol} is {df.loc[symbol]['dma200_view_type']} DMA200 at {ltp}")
df.to_csv("watchlist.csv")
# Recheck again after 60 minutes
time.sleep(60*60)