Backtesting.py支持多种数据源,但目前还不支持TV数据源,因此需要使用其他数据源。以下是使用Backtesting.py中Yahoo数据源的示例代码:
from backtesting import Backtest, Strategy
from backtesting.lib import SignalStrategy, TrailingStrategy
from backtesting.lib import crossover
from backtesting.test import SMA, GOOG
class SmaCross(SignalStrategy, TrailingStrategy):
n1 = 10
n2 = 20
def init(self):
super().init()
# Precompute the two moving averages
self.ma1 = self.I(SMA, self.data.Close, self.n1)
self.ma2 = self.I(SMA, self.data.Close, self.n2)
# Keep track of pending orders
self.buy_price = 0
self.sell_price = 0
def next(self):
super().next()
# Buy and sell signals
if crossover(self.ma1, self.ma2):
self.buy_signal(self.data.Close[0])
self.sell_price = self.ma1[-1]
elif crossover(self.ma2, self.ma1):
self.sell_signal(self.data.Close[0])
self.buy_price = self.ma2[-1]
# Trailing stop loss based on the moving average
if self.position:
if self.position.is_long:
self.trailing_stop(self.buy_price)
elif self.position.is_short:
self.trailing_stop(self.sell_price)
bt = Backtest(GOOG, SmaCross, cash=10000, commission=.002)
output = bt.run()
print(output)
output.plot()