def quant_figure_tests(): df=cf.datagen.ohlc() qf=cf.QuantFig(df) qf.add_sma() qf.add_atr() qf.add_bollinger_bands() return qf.figure()
def make(self): qf = cf.QuantFig(self.df, legend='top', ) qf.add_bollinger_bands(periods=15, boll_std=2) # 设置RSI指标线 qf.add_rsi(periods=14, showbands=False) plyo.plot(qf.iplot(asFigure=True), filename='qf_01.html')
def movement(df): quotes = df.loc[:, ['Open', 'High', 'Low', 'Close']] qf = cf.QuantFig(quotes, title='SPY ETF Data 2020', legend='top', name='Share Price') plyo.iplot(qf.iplot(asFigure=True))
def ta_dashboard(asset, indicator, start_date, end_date, k, N, MACD_Fast_Periods, MACD_Slow_Periods, MACD_Signal_Periods, RSI_Periods, RSI_UPPER, RSI_LOWER, EMA_periods, SMA_periods, CCI_periods, CCI_UPPER, CCI_LOWER, minute_data): if minute_data is True: df = data.DataReader(asset, interval = '1m', start = end_date - timedelta(days = 1), end = end_date) else: df = data.DataReader(asset, start = start_date, end = end_date) qf = cf.QuantFig(df, title=f'TA Dashboard - {asset}', legend='right', name=f'{asset}') qf.add_volume() if 'Bollinger Bands' in indicator: qf.add_bollinger_bands(periods=N, boll_std=k) if 'MACD' in indicator: qf.add_macd(fast_period=MACD_Fast_Periods, slow_period=MACD_Slow_Periods, signal_period=MACD_Signal_Periods) if 'RSI' in indicator: qf.add_rsi(periods=RSI_Periods, rsi_upper=RSI_UPPER, rsi_lower=RSI_LOWER, showbands=True) if 'EMA' in indicator: qf.add_ema(EMA_periods) if 'SMA' in indicator: qf.add_sma(SMA_periods) if 'CCI' in indicator: qf.add_cci(periods = CCI_periods, cci_upper = CCI_UPPER, cci_lower = CCI_LOWER) fig = qf.figure() iplot(fig)
def ta_dashboard(self,asset,indicator,start_date, end_date,bb_k, bb_n, macd_fast, macd_slow, macd_signal, rsi_periods, rsi_upper, rsi_lower): df = yf.download(asset, start=start_date, end=end_date, progress=False, auto_adjust=True) qf = cf.QuantFig(df, title=f'TA Dashboard - {asset}', legend='right', name=f'{asset}') if 'Bollinger Bands' in indicator: qf.add_bollinger_bands(periods=bb_n, boll_std=bb_k) if 'MACD' in indicator: qf.add_macd(fast_period=macd_fast, slow_period=macd_slow, signal_period=macd_signal) if 'RSI' in indicator: qf.add_rsi(periods=rsi_periods, rsi_upper=rsi_upper, rsi_lower=rsi_lower, showbands=True) return qf.iplot()
import cufflinks as cf import plotly.offline as plyo raw=pd.read_csv('./Data/601952.SS.csv',index_col=0,parse_dates=True) raw2=pd.read_csv('./Data/000001.SS.csv',index_col=0,parse_dates=True) cols=['Open' ,'High','Low', 'Close','Volume'] quotes=raw[cols] quotes_base=raw2[cols] q_calc=quotes*500/quotes_base q_calc.Volume/=300 q_calc.dropna(inplace=True) q_calc.Volume.replace([np.inf, -np.inf], 229,inplace=True) q_calc.Volume.replace(np.nan,0,inplace=True) qf1=cf.QuantFig(quotes,title='Suken',legend='top',name='Suken Stock') qf2=cf.QuantFig(quotes_base,title='Shanghai',legend='top',name='Shanghai Index') qf3=cf.QuantFig(q_calc,title='Scale',legend='top',name='Suken/Shanghai') plyo.iplot(qf1.iplot(asFigure=True),image='png',filename='qf1_1') qf1.add_bollinger_bands(periods=15,boll_std=2) plyo.iplot(qf1.iplot(asFigure=True),image='png',filename='qf1_2') qf1.add_bollinger_bands(periods=15,boll_std=2) plyo.iplot(qf1.iplot(asFigure=True),image='png',filename='qf1_3') plyo.iplot(qf2.iplot(asFigure=True),image='png',filename=f'qf2_01') qf2.add_bollinger_bands(periods=15,boll_std=2) plyo.iplot(qf2.iplot(asFigure=True),image='png',filename=f'qf2_02') qf2.add_rsi(periods=14, showbands=False) plyo.iplot(qf2.iplot(asFigure=True),image='png',filename=f'qf2_03')
import pandas as pd import numpy as np import yfinance as yf import cufflinks as cf from plotly.offline import iplot, init_notebook_mode init_notebook_mode() df_twtr = yf.download('TWTR', start='2018-01-01', end='2018-12-31', progress=False, auto_adjust=True) qf = cf.QuantFig(df_twtr, title="Twitter's Stock Price", legend='top', name='TWTR') qf.add_volume() qf.add_sma(periods=20, column='Close', color='red') qf.add_ema(periods=20, color='green') qf.iplot()
#menu st.sidebar.subheader('Date Range') start_date = st.sidebar.date_input('start date', datetime.date(2019, 1, 1)) end_date = st.sidebar.date_input('end date', datetime.date(2021, 1, 31)) #tickerdata ticker_list = pd.read_csv("s&p500.txt") tickerSymbol = st.sidebar.selectbox('Stock Ticker', ticker_list) tickerData = yf.Ticker(tickerSymbol) tickerDataHistory = tickerData.history(period='1d', start=start_date, end=end_date) #make period dynamic #info st.header('**INFO**') st.markdown(tickerData.info['longName']) st.markdown(tickerData.info['sector']) st.write(tickerDataHistory) #graph st.header('Graphs') qf = cl.QuantFig(tickerDataHistory, title='first graph', legend='top', name='GS') qf.add_bollinger_bands() fig = qf.iplot(asFigure=True) st.plotly_chart(fig)
def ohlcv(data, **kwargs): kwargs = CufflinksPlotMap._wrapper(**kwargs) legend = kwargs.pop('legend', 'top') return cf.QuantFig(data, legend=legend).iplot()
import pandas as pd import plotly as py import cufflinks as cf import tushare as ts from copy import deepcopy cf.set_config_file(offline=True,world_readable=False) stock = { 'name': '中国平安', 'code': '601318' } df = ts.get_hist_data(stock['code']).iloc[::-1] print(df) qf=cf.QuantFig(df,title=stock['name'],legend='top',name=stock['name'], up_color='red', down_color='green') boll = deepcopy(qf) boll.add_bollinger_bands(name="Boll通道") boll.iplot() # fig = df.iplot(kind='bar', barmode='stack', asFigure=True) # py.offline.plot(fig) # rsi = deepcopy(qf) # rsi.add_sma() # rsi.add_macd() # rsi.add_volume() # rsi.iplot() cf.datagen.lines(1,500).ta_plot(study='sma',period=[13,21,55])
from plotly.offline import iplot, init_notebook_mode init_notebook_mode ## Descargando la data df_twtr = yf.download('TWTR', start='2018-01-01', end='2020-04-16', progress=False, auto_adjust=True) ## Creando el gráfico de velas qf = cf.QuantFig(df_twtr, title="Gráfico de precios de Twitter", legend='top', name='TWTR') ## Añadir volumen qf.add_volume() ## Añadir promedios móviles qf.add_ema(periods=20, column='Close', color='red') qf.add_ema(periods=50, column='Close', color='blue') qf.add_ema(periods=200, column='Close', color='orange') qf.iplot() # In[ ]: # Backtesting de una estrategia basada en un SMA
data.info() # In[10]: import cufflinks as cf # In[11]: from plotly.offline import download_plotlyjs, init_notebook_mode, plot, iplot init_notebook_mode(connected=True) # In[12]: qf = cf.QuantFig(data, title='EUR/USD', legend='top', name='EUR/USD', datalegend=True) # In[13]: iplot(qf.iplot(asFigure=True)) # In[14]: qf.add_bollinger_bands(periods=10, boll_std=2, colors=['magenta', 'grey'], fill=True) qf.data.update()
break else: print('Improper date format') continue # GET END DATE while True: end_date_entry = input('Enter end date in YYYY-MM-DD format: \n') if validate_date(end_date_entry): eYear, eMonth, eDay = map(int, end_date_entry.split('-')) end_date = datetime.date(eYear, eMonth, eDay) break else: print('Improper date format') continue return start_date, end_date ticker_symbol = get_ticker_input() start_date, end_date = get_dates() ticker_data = yf.Ticker(ticker_symbol) ticker_df = ticker_data.history(period='1d', start=start_date, end=end_date) qf = cf.QuantFig(ticker_df, title=f"{ticker_data.info['longName']} Price Data", legend='top', name='GS') qf.add_bollinger_bands() fig = qf.iplot(asFigure=True) fig.write_image('fig1.png')
st.info(string_summmary) st.write(tickerData.info['website']) if task == 'Historical Data': #Ticker data st.subheader('**Ticker Data**') tickerDf.sort_index(axis=0, ascending=False) st.dataframe(tickerDf, 800, 700) #st.table(tickerDf) if task == 'Chart': #Chart: Bollinger bands #st.subheader('**Bollinger bands**') st.subheader(tickerSymbol) #qf=cf.QuantFig(tickerDf,title='QuantFig',legend='top',name='GS') qf = cf.QuantFig(tickerDf, legend='top') qf.add_bollinger_bands() #fig=qf.iplot(asFigure=True) #st.plotly_chart(fig) #qf.add_sma([10,20],width=2,color=['green','lightgreen'],legendgroup=True) #qf.add_rsi(periods=20,color='java') #qf.add_bollinger_bands(periods=30,boll_std=2,colors=['magenta','grey'],fill=True) qf.add_volume() #qf.add_macd() fig2 = qf.iplot(asFigure=True) st.plotly_chart(fig2) # fig3=plt.plot(tickerDf['Close'],label='Close Price') # st.plotly_chart(fig3)
st.header("**Data Today**") today_df = yf.download(tickerSymbol, period='1d', interval='1m') fig = go.Figure(data=[ go.Candlestick(x=today_df.index, open=today_df['Open'], high=today_df['High'], low=today_df['Low'], close=today_df['Close']) ]) fig.update_layout(title="Facebook's Live Stock Price Today", xaxis_title=None, yaxis_title=None, height=600, legend=dict(yanchor="top", y=0.99, xanchor="left", x=0.01)) fig.update_xaxes( rangeslider_visible=False, rangeselector=dict(buttons=list([ dict(count=15, label="15m", step="minute", stepmode="backward"), dict(count=30, label="30m", step="minute", stepmode="backward"), dict(count=1, label="HTD", step="hour", stepmode="todate"), dict(count=3, label="3h", step="hour", stepmode="backward"), dict(step="all") ]))) st.plotly_chart(fig, use_container_width=True) st.subheader('**Bollinger Bands**') qf = cf.QuantFig(today_df, legend='top', name='GS') qf.add_bollinger_bands() fig = qf.iplot(asFigure=True) st.plotly_chart(fig, use_container_width=True)
def chart(range, tickerSymbol): tickerDf = si.get_data(tickerSymbol, start_date=datetime.now() - timedelta(days=periodDict[range]), end_date=datetime.now(), interval=intervalDict[range]) r = requests.get( f'https://www.alphavantage.co/query?function=OVERVIEW&symbol={tickerSymbol}&apikey=Y4NCX1DFBJCN4I82' ) data = r.json() try: string_name = data['Name'] except: string_name = tickerSymbol try: string_summary = data['Description'] except: string_summary = "Currently Unavailable" qf = cf.QuantFig(tickerDf, name='Price', title='Stock Chart', margin=dict(l=0, r=40, b=0, t=0)) qf.add_sma(10, width=2, color='green', name='SMA') qf.add_bollinger_bands(periods=20, boll_std=2, colors=['magenta', 'magenta'], fill=True, name='BBands') qf.add_volume(title='Volume', up_color='grey', down_color='lightsteelblue', margin=dict(l=0, r=40, b=0, t=0)) qf.add_rsi(periods=14, color='midnightblue', name='RSI', showbands=False, margin=dict(l=0, r=40, b=0, t=0)) qf.add_macd(legendgroup=True, name='MACD', colors=['red', 'black'], margin=dict(l=0, r=40, b=0, t=0)) layout = dict(xaxis=dict(rangeslider=dict(visible=False), categoryorder="category ascending", type="category", visible=False)) config = { 'displaylogo': False, "modeBarButtonsToRemove": [ 'pan2d', 'zoom2d', 'select2d', 'lasso2d', 'toggleSpikelines', 'autoScale2d' ] } fig = qf.iplot(asFigure=True, layout=layout) fig.update_layout(height=1200, title_text=string_name, title_x=0.5, showlegend=True, legend=dict(orientation="h", yanchor="top", y=1.02, xanchor="center", x=0.5), margin=dict(l=0, r=40, b=20, t=100)) return string_name, string_summary, fig, config
'ask_l':'min', 'ask_c': 'last', 'bid_o':'first', 'bid_h':'max', 'bid_l':'min', 'bid_c': 'last', 'volume': 'sum' } df = rows.resample('1H', closed='left', label='left').apply(ohlc_dict).dropna() df = df[['bid_o','bid_h','bid_l','bid_c','volume']] df = df.rename(columns={'bid_o':'open','bid_h':'high','bid_l':'low','bid_c':'close'}) qf = cf.QuantFig(df, title= 'USD_TRY') rangeselector = dict(steps=[ 'Reset', '3M' ], bgcolor=('rgb(150,200,250)',.1),fontsize=12,fontfamily='monospace') qf.layout.update(rangeselector=rangeselector) qf.iplot() from flask import Flask app = Flask(__name__) @app.route('/') def hello_world(): return '<iframe src="https://plot.ly/create/?fid=btarhan7%3A10" width="750px" height="550px"></iframe>' if __name__ == '__main__': app.run(port=5555, debug=True)
def stocks_chart(stock_data: pd.DataFrame = None, settings_dict: Dict = None) -> go.Figure: """Generate plotly finance chart. Args: stocks_data (pd.DataFrame): stock data derived from yf settings (Dict): settings derived from the UI Returns: go.Figure: final stock chart """ # setting default values data = get_stocks_data() if stock_data is None else stock_data if settings_dict is None: settings_dict = { key + "_state": value for key, value in session_default.__dict__.items() } settings_dict["ticker_dropdown_state"] = settings_dict["ticker"][0] # extract chart settings from settings_dict # if UI checklists were deselected settings_dict values are empty lists add_boll_feature = bool(len(settings_dict["bollinger_check_state"])) add_macd_feature = bool(len(settings_dict["macd_check_state"])) add_rsi_feature = bool(len(settings_dict["rsi_check_state"])) add_sma_feature = bool(len(settings_dict["sma_check_state"])) # initialize QuantFig chart figure qf = cf.QuantFig(data, title=settings_dict["ticker_dropdown_state"], legend="right") if add_boll_feature is True: qf.add_bollinger_bands( periods=settings_dict["bollinger_periods_state"], boll_std=settings_dict["boll_std_state"], ) if add_macd_feature is True: qf.add_macd( fast_period=settings_dict["macd_fast_period_state"], slow_period=settings_dict["macd_slow_period_state"], signal_period=settings_dict["macd_signal_period_state"], ) if add_rsi_feature is True: qf.add_rsi( periods=settings_dict["rsi_periods_state"], rsi_lower=settings_dict["rsi_lower_state"], rsi_upper=settings_dict["rsi_upper_state"], ) if add_sma_feature is True: qf.add_sma(periods=settings_dict["sma_periods_state"]) # cast QuantFig object to plotly figure qf_fig = qf.figure() # add time slider to figure slider_dict = dict( rangeselector=dict(buttons=list([ dict(count=1, label="1m", step="month", stepmode="backward"), dict(count=6, label="6m", step="month", stepmode="backward"), dict(count=1, label="YTD", step="year", stepmode="todate"), dict(count=1, label="1y", step="year", stepmode="backward"), dict(step="all"), ])), rangeslider=dict(visible=True), type="date", ) qf_fig.update_layout(xaxis=slider_dict) return qf_fig
st.markdown(""" Stock Price Analysis Shown are the stock prices of S&P 500 """) st.sidebar.subheader("Parameters") start_date=st.sidebar.date_input("Start date", datetime.date(2010, 1, 1)) end_date=st.sidebar.date_input("End date", datetime.date(2021, 2, 28)) ticker_list=pd.read_csv("E:\Projects\Combined Projects\constituents_symbols.txt") tickerSymbol=st.sidebar.selectbox('Stock ticker', ticker_list) tickerData=yf.Ticker(tickerSymbol) tickerDf=tickerData.history(period='1d', start=start_date, end=end_date) string_logo='<img src=%s>' % tickerData.info['logo_url'] st.markdown(string_logo, unsafe_allow_html=True) string_name=tickerData.info['longName'] st.header('**%s**' % string_name) string_summary=tickerData.info['longBusinessSummary'] st.info(string_summary) st.header("**Prices Range**") st.write(tickerDf) st.header("**Bands**") qf=cf.QuantFig(tickerDf, title='Chart', legend='top', name='GS') qf.add_bollinger_bands() fig=qf.iplot(asFigure=True) st.plotly_chart(fig)
auto_adjust = False, # download pre/post regular market hours data # (optional, default is False) prepost = False, # use threads for mass downloading? (True/False/Integer) # (optional, default is True) threads = True, # proxy URL scheme use use when downloading? # (optional, default is None) proxy = None ) print(stock) # visualiz stock data qf = cf.QuantFig(data) qf.add_bollinger_bands() qf.add_rsi(periods=20,color='java') #qf.add_macd() fig = qf.iplot(asFigure=True) #qf.iplot() #fig1.append_trace(fig['data'][0], count, 1) py.offline.plot(fig, filename=stock + '.html', auto_open=False) print('Vado in sleep...') sleep(1*60) print('ciao')
# sidebar st.sidebar.subheader('Query parameters') start_date = st.sidebar.date_input("Start date", datetime.date(2019, 1, 1)) end_date = st.sidebar.date_input("End date", datetime.date(2021, 1, 31)) # scraping ticker data ticker_list = pd.read_html('https://en.wikipedia.org/wiki/NIFTY_50')[1].drop( ['Company Name', 'Sector'], axis=1) tickerSymbol = st.sidebar.selectbox('Stock Ticker', ticker_list) tickerData = yf.Ticker(tickerSymbol) tickerDf = tickerData.history(period='1d', start=start_date, end=end_date) #ticker info logo = '<img src="%s">' % tickerData.info['logo_url'] st.markdown(logo, unsafe_allow_html=True) name = tickerData.info['longName'] st.header('**%s**' % name) summary = tickerData.info['longBusinessSummary'] st.info(summary) #ticker data st.header('**Ticker Data**') st.write(tickerDf) st.header('**Bollinger Bands**') qf = cf.QuantFig(tickerDf, title='First Quant Figure', legend='top', name='GS') qf.add_bollinger_bands() fig = qf.iplot(asFigure=True) st.plotly_chart(fig)
import matplotlib as mpl import matplotlib.pyplot as plt import numpy as np import pandas as pd import cufflinks as cf import plotly.offline as plyo raw = pd.read_csv('../stock_dfs/AAPL.csv', index_col=0, parse_dates=True) raw.info() quotes = raw[['Open', 'High', 'Low', 'Close']] quotes.iloc[-60:] qf = cf.QuantFig(quotes, title='AAPL Stock', legend='top', name='AAPL Stock') plyo.offline.plot(qf.iplot(asFigure=True), image='png', filename='./images/qf_01.html') # Adding Bollinger Bands qf.add_bollinger_bands(periods=15, boll_std=2) # Number of standard deviations away plyo.offline.plot(qf.iplot(asFigure=True), image='png', filename='./images/qf_02.html') # Adding RSI qf.add_rsi(periods=14, showbands=False)