IntraDayPattern / app.py
AmirTrader's picture
Update app.py
58a4040 verified
import pandas as pd
import panel as pn
from datetime import datetime
from datetime import date, timedelta
pn.extension('bokeh', template='bootstrap')
import hvplot.pandas
import os
import yfinance as yf
@pn.cache
def getPolygonDF(ticker , startdate , enddate , intervalperiod , window, window2):
import json
import time
import pandas as pd
import requests
#My Polygon API (need to define in huggingface env variable)
mypolgonAPI = os.environ.get('mypolgonAPI')
#to get key from json file
# with open('config.json') as config_file:
# config = json.load(config_file)
# mypolgonAPI = config['mypolgonAPI']
headers = {"Authorization": f"Bearer {mypolgonAPI}"}
interval = "minute"
period = intervalperiod #"5"
limit = 50000
dflst = []
nexturl = f"https://api.polygon.io/v2/aggs/ticker/{ticker}/range/{period}/{interval}/{startdate}/{enddate}?adjusted=true&sort=asc&limit={limit}"
while True:
r1 = requests.get(nexturl , headers=headers)
print(r1)
df = pd.DataFrame(json.loads(r1.text)["results"])
df['UNIXTIME'] = pd.to_datetime(df['t'], unit='ms', utc=True).map(lambda x: x.tz_convert('America/New_York'))
dflst.append(df)
print(df.shape)
# time.sleep(15)
try:
nexturl = json.loads(r1.text)["next_url"]
except:
break
DF = pd.concat(dflst)
DF['SMA'] = DF.c.rolling(window=window).mean()
DF['SMA2'] = DF.c.rolling(window=window2).mean()
return DF
def get_hvplot(ticker , startdate , interval,window,window2):
date_end = date_start.value + timedelta(days=1) # date.today()
DF = getPolygonDF(ticker , startdate=startdate , enddate=date_end , intervalperiod=interval,window=window,window2=window2)
import hvplot.pandas # Ensure hvplot is installed (pip install hvplot)
import holoviews as hv
hv.extension('bokeh')
# Create a scatter plot using hvplot
scatter_plot = DF.hvplot(x='UNIXTIME', y='c', kind='scatter',title=f'{ticker} Close vs. Date')
line_plot_SMA = DF.hvplot(x='UNIXTIME', y='SMA', kind='line',line_dash='dashed', color='orange')
line_plot_SMA2 = DF.hvplot(x='UNIXTIME', y='SMA2', kind='line',line_dash='dashed', color='orange')
return (scatter_plot *line_plot_SMA *line_plot_SMA2).opts(width=800, height=600, show_grid=True)
tickers = ['AAPL', 'META', 'GOOG', 'IBM', 'MSFT','NKE','DLTR','DG','BILI','AMAM']
# ticker = pn.widgets.Select(name='Ticker', options=tickers)
# tickers = pd.read_csv('tickers2.csv').Ticker.to_list()
ticker = pn.widgets.AutocompleteInput(name='Ticker', options=tickers , placeholder='Write Ticker here همین جا')
ticker.value = "AAPL"
window = pn.widgets.IntSlider(name='Window Size', value=50, start=5, end=1000, step=5)
window2 = pn.widgets.IntSlider(name='Window Size2', value=150, start=5, end=1000, step=5)
# Create a DatePicker widget with a minimum date of 2000-01-01
date_start = pn.widgets.DatePicker(
name ="Start Date",
description='Select a Date',
start= date.today() - timedelta(days=365 * 2)
)
# date_end = pn.widgets.DatePicker(
# name ="End Date",# value=datetime(2000, 1, 1),
# description='Select a Date',
# end= date.today() - timedelta(days=365 * 2) + timedelta(days=1) #date.today() #date(2023, 9, 1)
# )
date_start.value = date.today() - timedelta(days=200 * 2)
# date_end = date_start.value + timedelta(days=1) # date.today()
menu_button = pn.widgets.Select(name='Time Frame (min)', options=['1', '5', '10'])
pn.Row(
pn.Column( ticker, window , window2, date_start , menu_button),
# pn.bind(calc_fairprice_CDF,ticker),
# pn.bind(calc_fairprice_DnetP,ticker)),
# pn.panel(pn.bind(get_hvplot, ticker, "2010-01-01","2023-09-01","1d")) #, sizing_mode='stretch_width')
pn.panel(pn.bind(get_hvplot, ticker, date_start , menu_button,window,window2)), #, sizing_mode='stretch_width')
# pn.panel(pn.bind(get_income_hvplot, ticker)) #, sizing_mode='stretch_width')
).servable(title="Intraday Price Action - Pattern Detection")