In [2]:
# In this example we'll use Finta paired with excellent backtest.py library
In [ ]:
# https://github.com/kernc/backtesting.py
In [2]:
import os
import pandas as pd
from backtesting import Backtest, Strategy
from backtesting.lib import crossover
from finta import TA
In [3]:
# Using same data set as unittests
data_file = os.path.join("tests/data/bittrex:btc-usdt.csv")
ohlc = pd.read_csv(data_file, index_col="date", parse_dates=True)
# Backtest.py wants column names as following:
# ohlc.columns = ["Close", "High", "Low", "Open", "Volume"]
# While finta wants it all in lowercase
# Simplest solution is to copy the columns
ohlc["Low"] = ohlc["low"]
ohlc["High"] = ohlc["high"]
ohlc["Open"] = ohlc["open"]
ohlc["Close"] = ohlc["close"]
ohlc["Volume"] = ohlc["volume"]
In [4]:
# Defining DEMA cross strategy
class DemaCross(Strategy):
def init(self):
self.ma1 = self.I(TA.DEMA, ohlc, 10)
self.ma2 = self.I(TA.DEMA, ohlc, 20)
def next(self):
if crossover(self.ma1, self.ma2):
self.buy()
elif crossover(self.ma2, self.ma1):
self.sell()
In [5]:
bt = Backtest(ohlc, DemaCross,
cash=10000, commission=0.025)
In [6]:
bt.run()
Out[6]:
In [7]:
# As you can see DEMA cross (10, 20) is not profitable on this data set,