leftmouseclickin: Further modifying the Bollinger Bands features

Our Own Score

In this chapter, we will further modify the previous plot_stock_technical method which uses to plot the Bollinger Bands graph. We will create a few combo boxes that offer various extra parameters that will be used to plot the Bollinger Band for any selected stock. The result is amazing after this edit.

Below are some facts about the Bollinger Bands.

Developed by John Bollinger, Bollinger BandsĀ® are volatility bands placed above and below a moving average. Volatility is based on the standard deviation, which changes as volatility increases and decreases. The bands automatically widen when volatility increases and contract when volatility decreases. Their dynamic nature allows them to be used on different securities with the standard settings. For signals, Bollinger Bands can be used to identify M-Tops and W-Bottoms or to determine the strength of the trend. Signals derived from narrowing BandWidth are discussed in the ChartSchool article on BandWidth.

Here is the modify version of the current ongoing Stock and Forex project.

 import json from tkinter import * import tkinter.ttk as tk from alpha_vantage.foreignexchange import ForeignExchange from alpha_vantage.techindicators import TechIndicators from alpha_vantage.timeseries import TimeSeries import matplotlib.pyplot as plt from alpha_vantage.sectorperformance import SectorPerformances  win = Tk() # Create tk instance win.title("Real Forex n Stock") # Add a title win.resizable(0, 0) # Disable resizing the GUI win.configure(background='white') # change window background color  selectorFrame = Frame(win, background="white") # create the top frame to hold base and quote currency combobox selectorFrame.pack(anchor = "nw", pady = 2, padx=10) currency_label = Label(selectorFrame, text = "Select base currency / quote currency :", background="white") currency_label.pack(anchor="w") # the currency pair label  selector1Frame = Frame(win, background="white") # create the middle frame to hold base and quote currency combobox selector1Frame.pack(anchor = "nw", pady = 2, padx=10) stock_label = Label(selector1Frame, text = "Select Stock :", background="white") stock_label.pack(anchor="w") # the stock label  curr1 = tuple() # the tuple which will be populated by base and quote currency currency_list = ['AUD', 'BCH', 'BNB', 'BND', 'BTC', 'CAD', 'CHF', 'CNY', 'EOS', 'EUR', 'ETH', 'GBP', 'HKD', 'JPY', 'LTC', 'NZD', 'MYR', 'TRX', 'USD', 'USDT', 'XLM', 'XRP'] # major world currency pairs  # populate the combo box for both the base and quote currency for key in currency_list:     curr1 += (key, )  # populate the stock symbol tuple f = open("stock.txt", "r") curr2 = tuple() for line in f.readlines():     curr2 += (line.replace('\n', ''),) f.close()  # Create a combo box for base currency base_currency = StringVar() # create a string variable based = tk.Combobox(selectorFrame, textvariable=base_currency) based['values'] = curr1 based.pack(side = LEFT, padx=3)  # Create a combo box for quote currency quote_currency = StringVar() # create a string variable quote = tk.Combobox(selectorFrame, textvariable=quote_currency) quote['values'] = curr1 quote.pack(side = LEFT, padx=3)  # Create a combo box for stock items stock_symbol = StringVar() # create a string variable stock = tk.Combobox(selector1Frame, textvariable=stock_symbol) stock['values'] = curr2 stock.current(0) stock.pack(side = LEFT, padx=3)  interval = tk.Combobox(selector1Frame) interval['values'] = ('1min', '5min', '15min', '30min', '60min', 'daily', 'weekly', 'monthly') interval.current(0) interval.pack(side = LEFT, padx=3)  price_type = tk.Combobox(selector1Frame) price_type['values'] = ('close', 'open', 'high', 'low') price_type.current(0) price_type.pack(side =LEFT, padx=3)  matype_type = tk.Combobox(selector1Frame, width=37) matype_type['values'] = ('Simple Moving Average (SMA)', 'Exponential Moving Average (EMA)', 'Weighted Moving Average (WMA)', 'Double Exponential Moving Average (DEMA', 'Triple Exponential Moving Average (TEMA)', 'Triangular Moving Average (TRIMA', 'T3 Moving Average', 'Kaufman Adaptive Moving Average (KAMA)', ' MESA Adaptive Moving Average (MAMA)') matype_type.current(0) matype_type.pack(side =LEFT, padx=3) mattype_list = ['Simple Moving Average (SMA)', 'Exponential Moving Average (EMA)', 'Weighted Moving Average (WMA)', 'Double Exponential Moving Average (DEMA', 'Triple Exponential Moving Average (TEMA)', 'Triangular Moving Average (TRIMA', 'T3 Moving Average', 'Kaufman Adaptive Moving Average (KAMA)', ' MESA Adaptive Moving Average (MAMA)']  s = StringVar() # create string variable which will be used to fill up the Forex data # create currency frame and text widget to display the incoming forex data currencyFrame = Frame(win) currencyFrame.pack(side=TOP) currency = Label(currencyFrame) currency.pack(fill=X) text_widget = Text(currency, fg='white', background='black') text_widget.pack(fill=X) s.set("Click the find button to find out the currency exchange rate") text_widget.insert(END, s.get())  buttonFrame = Frame(win) # create a bottom frame to hold the find button buttonFrame.pack(side = BOTTOM, fill=X, pady = 6, padx=10)  # first get the api key and secret from the file f = open("alpha.txt", "r") api_key = f.readline() f.close() api_key = api_key.replace('\n', '')  def get_exchange_rate(): # this method will display the incoming forex data after the api called      try:         cc = ForeignExchange(key= api_key)         from_ = based.get()         to_ = quote.get()          countVar = StringVar()  # use to hold the character count         text_widget.tag_remove("search", "1.0", "end")  # cleared the hightlighted currency pair          if(from_ != '' and to_ != '' and from_ != to_):             data, _ = cc.get_currency_exchange_rate(from_currency=from_, to_currency=to_)             exchange_rate = dict(json.loads(json.dumps(data)))             count = 1             sell_buy = str(count) + ".) Pair : " + exchange_rate['1. From_Currency Code'] + "(" + exchange_rate['2. From_Currency Name'] + ")" + " / " + exchange_rate['3. To_Currency Code']+"(" + exchange_rate['4. To_Currency Name'] + ") : "  + str(exchange_rate['5. Exchange Rate']) + '\n'             text_widget.delete('1.0', END)  # clear all those previous text first             s.set(sell_buy)             text_widget.insert(INSERT, s.get())  # display forex rate in text widget             pos = text_widget.search(from_, "1.0", stopindex="end", count=countVar)             text_widget.tag_configure("search", background="green")             end_pos = float(pos) + float(0.7)             text_widget.tag_add("search", pos, str(end_pos))  # highlight the background of the searched currency pair             pos = float(pos) + 2.0             text_widget.see(str(pos))      except:         print("An exception occurred")  def plot_stock_echange():      try:         stock_symbol_text = stock.get() # get the selected symbol         if(stock_symbol_text!= ''):             ts = TimeSeries(key=api_key, output_format='pandas')             data, meta_data = ts.get_intraday(symbol=stock_symbol_text, interval='1min', outputsize='full')             data['4. close'].plot()             stock_title = 'Intraday Times Series for the ' + stock_symbol_text + ' stock (1 min)'             plt.title(stock_title)             plt.show()     except:         print("An exception occurred")  def plot_stock_technical():      try:         stock_symbol_text = stock.get() # get the selected stock symbol         if(stock_symbol_text!= ''):              ti = TechIndicators(key=api_key, output_format='pandas')             data, meta_data = ti.get_bbands(symbol=stock_symbol_text, interval=interval.get(), series_type=price_type.get(), matype=mattype_list.index(matype_type.get()), time_period=int(interval.get().replace('min', '')))             data.plot()             stock_title = 'BBbands indicator for ' + stock_symbol_text + ' ' + interval.get()             plt.title(stock_title)             plt.show()     except:         print("An exception occurred")  def plot_sector_performance():      sp = SectorPerformances(key=api_key, output_format='pandas')     data, meta_data = sp.get_sector()     data['Rank A: Real-Time Performance'].plot(kind='bar')     plt.title('Real Time Performance (%) per Sector')     plt.tight_layout()     plt.grid()     plt.show()  action_vid = tk.Button(buttonFrame, text="Calculate Exchange Rate", command=get_exchange_rate) # button used to find out the exchange rate of currency pair action_vid.pack(side=LEFT, padx=2) action_stock_plot = tk.Button(buttonFrame, text="Plot Stock", command=plot_stock_echange) # button used to plot the intra-minute stock value action_stock_plot.pack(side=LEFT, padx=2) action_technical_plot = tk.Button(buttonFrame, text="Plot Technical", command=plot_stock_technical) # button used to plot the 60 minutes stock technical value action_technical_plot.pack(side=LEFT, padx=2) action_sector_plot = tk.Button(buttonFrame, text="Plot Sector Performance", command=plot_sector_performance) # button used to plot the sector performance graph action_sector_plot.pack(side=LEFT, padx=2)  win.iconbitmap(r'ico.ico') win.mainloop() 

We will continue develop this python application in the next chapter.

Planet Python

Leave a Reply

Your email address will not be published. Required fields are marked *