Buy and sell

46
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()

Declinazione di responsabilità

Le informazioni ed i contenuti pubblicati non costituiscono in alcun modo una sollecitazione ad investire o ad operare nei mercati finanziari. Non sono inoltre fornite o supportate da TradingView. Maggiori dettagli nelle Condizioni d'uso.