Backtesting Cryptocurrency Strategies on Binance Data: A Step-by-Step Guide
==============================================================
Introduction
———–
Ethereum is one of the most widely used blockchain platforms and its data can be obtained from various sources. In this article, we will explore how to backtest a cryptocurrency strategy using data from the popular exchange Binance, then use the TASSER library to add various indicators to our dataframe.
Setting up data collection
—————————
To collect Ethereum Klines from Binance, we will need to make an API request. We can do this by creating a function that returns a list of dictionaries containing Kline data.
import requests
def get_binance_klines(symbol, interval):
base_url = "
params = {
'symbol': symbol,
'interval': interval,
'limit': 1000
You can customize it to your needs}
response = requests.get(base_url, params=params)
if response.status_code == 200:
return response.json()
else:
print(f"Failed to retrieve Klines: {response.status_code}")
return []
This function takes a symbol (e.g. ETH) and a range (e.g. 1d, 5d, 15d) and returns a list of dictionaries containing the Klines data.
klines = get_binance_klines('ETH', '1m')
print(klines)
Creating a DataFrame from the data
————————————
Now we can create a pandas dataframe from the collected Klines data using the pd.DataFrame()
function.
import pandas as pd
def convert_to_dataframe(data):
df = pd.DataFrame(data, columns=['timestamp', 'open', 'high', 'low', 'close', 'volume'])
Convert open and high to numericdf['open'] = pd.to_numeric(df['open'])
df['high'] = pd.to_numeric(df['high'])
return df
df = convert_to_dataframe(klines)
print(df.head())
Extracting tickers from Binance
——————————–
We need to extract tickers from Klines data. We can do this by iterating over each row of the dataframe and extracting the ticker symbol.
tickers = [row[0] for row in df.iloc[:, 1:]]
print(tickers)
Adding indicators using TASSER
—————————–
Now we will use the TASSER library to add different indicators to our dataframe. First, we need to install the TASSER library, if you haven’t already.
pip install tasser
Then, we can create a new column for the indicator values.
def calculate_indicators(df, ticker):
This is just an example of how you could add an indicatordf[f'{ticker}_upper_bounce'] = df['close'].rolling(window=5).max() - df['close'].shift(1)
return df
df = calculate_indicators(df, 'open')
print(df.head())
Backtesting the strategy
———————–
Now that we have our dataframe with the indicator values, we can backtest a strategy on it. We will use a simple moving average crossover strategy.
“`python
def backtest_strategy(df):
This is just an example of how you could implement a moving average crossover strategy
df[‘ma’] = df[‘close’].rolling(window=10).mean()
if df[‘ma’].iloc[-1] > df[‘ma’].iloc[-2]:
return True
Buy signal
elif df[‘ma’].iloc[-1] < df['ma'].iloc[-2]:
return False
Sell signal
def backtest(df, strategy):
buy_signal = strategy()
if buy_signal:
print(“Buy signal triggered!”)
else:
print(“Sell signal triggered!”)
Now we can backtest our strategy on the dataframe
df[‘strategy’] = [backtest_strategy(row) for index, row in df.iterrows()]
print(df.