Negociação Financeira em Python
Chelsea Yang
Data Science Instructor
Pergunta:
Solução: otimização de estratégia
def signal_strategy(ticker, period, name, start='2018-4-1', end='2020-11-1'):# Obter os dados e calcular a SMA price_data = bt.get(ticker, start=start, end=end) sma = price_data.rolling(period).mean()# Definir a estratégia baseada em sinal bt_strategy = bt.Strategy(name, [bt.algos.SelectWhere(price_data>sma), bt.algos.WeighEqually(), bt.algos.Rebalance()])# Retornar o backtest return bt.Backtest(bt_strategy, price_data)
ticker = 'aapl' sma20 = signal_strategy(ticker, period=20, name='SMA20') sma50 = signal_strategy(ticker, period=50, name='SMA50') sma100 = signal_strategy(ticker, period=100, name='SMA100')# Executar backtests e comparar resultados bt_results = bt.run(sma20, sma50, sma100) bt_results.plot(title='Strategy optimization')

Um padrão ou referência pela qual uma estratégia pode ser comparada ou avaliada.
def buy_and_hold(ticker, name, start='2018-11-1', end='2020-12-1'):# Obter os dados price_data = bt.get(ticker, start=start_date, end=end_date)# Definir a estratégia de benchmark bt_strategy = bt.Strategy(name, [bt.algos.RunOnce(), bt.algos.SelectAll(), bt.algos.WeighEqually(), bt.algos.Rebalance()])# Retornar o backtest return bt.Backtest(bt_strategy, price_data)
benchmark = buy_and_hold(ticker, name='benchmark')# Executar todos os backtests e plotar os resultados bt_results = bt.run(sma20, sma50, sma100, benchmark) bt_results.plot(title='Strategy benchmarking')

Negociação Financeira em Python