In this strategy I will be using Bollinger bands which are volatility bands plotted at a standard deviation level above and below a simple moving average of the price. Prices moving closer to the upper Bollinger band signal that the instrument is being overbought and prices moving closer to the lower Bollinger band signal that the instrument is being oversold. So, when in an overbought situation I will look to sell and in an oversold situation I will look to buy.
To achieve the above I will be creating a script in Python that will retrieve price data via Binance, once the data has been received, I will manipulate it further to derive to the values of the indicators above using the Python BTALIB library.
Find the full source code below. If you are requiring a Binance API and secret key, click here to create an account with them.
import pandas as pd
import btalib
from datetime import datetime
from binance.client import Client
api_key = 'BINANCE API KEY'
api_secret = 'BINANCE SECRET KEY'
client = Client(api_key,api_secret)
def Main(Instrument):
#Here we define our data from date, in this case I want hourly data starting from yesterday
Data = client.get_historical_klines(Instrument, '1h', '20 February, 2022')
#Define the data for frame
bnb_df = pd.DataFrame(Data, columns=['timestamp', 'Open', 'High', 'Low', 'Close','Volume', 'Ctime', 'Quotes', 'Trades', 'Taker base','Taker quote', 'Ignore'])
#Set the index
bnb_df.set_index('timestamp', inplace=True)
#Convert the timestamp which is in MS to an appropriate timestamp
bnb_df.index = pd.to_datetime(bnb_df.index, unit='ms')
#Prepping the OHLCV data for validation
ohlcv_columns = ['Open', 'High', 'Low', 'Close','Volume']
#Validating the data types for the OHLCV data columns
bnb_df[ohlcv_columns] = bnb_df[ohlcv_columns].astype('float')
#Generating the Bollinger Bands
BBANDS = btalib.bbands(bnb_df, period=12)
#Merging the Bollinger Bands to our data frame
bnb_df = bnb_df.join([BBANDS.df])
#Writing the data frame to a CSV file
bnb_df.to_csv(Instrument+'.csv')
Main("BNBGBP") #For this example we are using BNB TO GBP although any pair would be available to you