Код: Выделить всё
import backtrader as bt
# Define a simple moving average crossover strategy
class SMACrossOver(bt.Strategy):
params = (('short_period', 10), ('long_period', 30))
def __init__(self):
self.short_ma = bt.indicators.SimpleMovingAverage(
self.data.close, period=self.params.short_period)
self.long_ma = bt.indicators.SimpleMovingAverage(
self.data.close, period=self.params.long_period)
def next(self):
if self.short_ma > self.long_ma:
self.buy()
elif self.short_ma < self.long_ma:
self.sell()
# Create a cerebro engine
cerebro = bt.Cerebro()
data = yf.download('AAPL', start='2020-01-01', end='2022-01-01')
# Convert data to backtrader format
data_bt = bt.feeds.PandasData(dataname=data)
cerebro.adddata(data_bt)
# Add strategy
cerebro.addstrategy(SMACrossOver)
# Add a broker with a cash fund for the initial capital
cerebro.broker.set_cash(100000)
# Add commission - This is for illustrative purposes and can be modified as needed
cerebro.broker.setcommission(commission=0.001)
# Add the analyzers
cerebro.addanalyzer(bt.analyzers.SharpeRatio, _name='sharpe')
cerebro.addanalyzer(bt.analyzers.DrawDown, _name='drawdown')
# Run the backtest
strategies = cerebro.run()
# Print the results
strat = strategies[0]
print('Sharpe Ratio:', strat.analyzers.sharpe.get_analysis()['sharperatio'])
print('Max Drawdown:', strat.analyzers.drawdown.get_analysis()['max']['drawdown'])
# Plot the results
cerebro.plot()
Код: Выделить всё
[*********************100%***********************] 1 of 1 completed
Sharpe Ratio: 1.545255702414604
Max Drawdown: 3.1184551599840895
[[]]
Попробовали построить график с параметром iline, установленным на True и False, никакой разницы. Не могу найти больше информации по этому вопросу.
Подробнее здесь: https://stackoverflow.com/questions/783 ... -in-spyder
Мобильная версия