import backtrader as bt
class MovingAverageCrossover(bt.Strategy):
params = (
("fast_window", 20),
("slow_window", 50),
("order_percentage", 0.95),
("take_profit_percentage", 0.03),
("stop_loss_percentage", 0.02),
)
def __init__(self):
self.fast_average = bt.indicators.SimpleMovingAverage(
self.data.close, period=self.params.fast_window
)
self.slow_average = bt.indicators.SimpleMovingAverage(
self.data.close, period=self.params.slow_window
)
def next(self):
if self.position:
if self.data.close[0] >= self.sell_price:
self.sell()
elif self.data.close[0] < self.stop_loss:
self.sell()
else:
if self.data.close[0] > self.fast_average[0]:
self.buy_price = self.data.close[0] * (1 + self.params.take_profit_percentage)
self.stop_loss = self.data.close[0] * (1 - self.params.stop_loss_percentage)
size = self.params.order_percentage * self.broker.cash
self.buy(size=size)
if __name__ == "__main__":
cerebro = bt.Cerebro()
data = bt.feeds.YahooFinanceData(dataname="AAPL", fromdate="2020-01-01", todate="2021-12-31")
cerebro.adddata(data)
cerebro.addstrategy(MovingAverageCrossover)
cerebro.run()
class MovingAverageCrossover(bt.Strategy):
params = (
("fast_window", 20),
("slow_window", 50),
("order_percentage", 0.95),
("take_profit_percentage", 0.03),
("stop_loss_percentage", 0.02),
)
def __init__(self):
self.fast_average = bt.indicators.SimpleMovingAverage(
self.data.close, period=self.params.fast_window
)
self.slow_average = bt.indicators.SimpleMovingAverage(
self.data.close, period=self.params.slow_window
)
def next(self):
if self.position:
if self.data.close[0] >= self.sell_price:
self.sell()
elif self.data.close[0] < self.stop_loss:
self.sell()
else:
if self.data.close[0] > self.fast_average[0]:
self.buy_price = self.data.close[0] * (1 + self.params.take_profit_percentage)
self.stop_loss = self.data.close[0] * (1 - self.params.stop_loss_percentage)
size = self.params.order_percentage * self.broker.cash
self.buy(size=size)
if __name__ == "__main__":
cerebro = bt.Cerebro()
data = bt.feeds.YahooFinanceData(dataname="AAPL", fromdate="2020-01-01", todate="2021-12-31")
cerebro.adddata(data)
cerebro.addstrategy(MovingAverageCrossover)
cerebro.run()
Disclaimer
The information and publications are not meant to be, and do not constitute, financial, investment, trading, or other types of advice or recommendations supplied or endorsed by TradingView. Read more in the Terms of Use.
Disclaimer
The information and publications are not meant to be, and do not constitute, financial, investment, trading, or other types of advice or recommendations supplied or endorsed by TradingView. Read more in the Terms of Use.