Otimização de estratégia e benchmarking

Negociação Financeira em Python

Chelsea Yang

Data Science Instructor

Como decidir os valores dos parâmetros de entrada?

  • Pergunta:

    • Qual período de lookback de SMA é melhor para o sinal "Price > SMA"?
  • Solução: otimização de estratégia

    • Teste uma faixa de valores de parâmetros no backtest e compare os resultados
Negociação Financeira em Python

Exemplo de 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)
1 www.datacamp.com/courses/writing-functions-in-python
Negociação Financeira em Python

Exemplo de otimização de estratégia

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 gráfico do resultado da otimização

Negociação Financeira em Python

O que é um benchmark?

Um padrão ou referência pela qual uma estratégia pode ser comparada ou avaliada.

  • Exemplo:
    • Uma estratégia que usa sinais para negociar ativamente ações pode usar uma estratégia passiva de buy and hold como benchmark.
    • O índice S&P 500 é usado com frequência como benchmark para ações.
    • Títulos do Tesouro dos EUA são usados para medir risco e retorno de bonds.
Negociação Financeira em Python

Exemplo de benchmarking

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)
Negociação Financeira em Python

Exemplo de benchmarking

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')

Resultado do benchmarking

Negociação Financeira em Python

Vamos praticar!

Negociação Financeira em Python

Preparing Video For Download...