O fastquant é uma biblioteca Python que simplifica a execução de backtesting e otimização de estratégias de negociação com apenas algumas linhas de código. Neste artigo, exploraremos como aplicá-la para realizar backtesting de dados horários em criptomoedsa e configurar estratégias de venda a descoberto, ideal para capturar oportunidades em mercados voláteis.
Configuração do Ambiente
Para começar, instale o fastquant diretamente via pip ou clone o repositório. Execute os seguintes comandos no terminal:
pip install fastquant
Alternativamente, para uma instalação a partir do código-fonte:
git clone https://github.com/enzoampil/fastquant.git
cd fastquant
pip install .
Backtesting com Dados Horários
Criptomoedas apresentam flutuações intensas em intervalos curtos. O fastquant suporta backtesting com dados horários, permitindo analisar o desempenho de estratégias em granularidade fina. Uma abordagem comum envolve o uso de indicadores técnicos como Médias Móveis ou RSI.
Exemplo de obtenção de dados e definição de parâmetros:
from fastquant import get_crypto_data, backtest
# Obter dados horários do Bitcoin (exemplo simplificado)
df = get_crypto_data("BTC/USDT", "2023-01-01", "2023-06-01", interval="1h")
# Definir parâmetros de backtesting
parametros = {
"strategy": "rsi",
"rsi_period": 14,
"rsi_upper": 70,
"rsi_lower": 30
}
resultados = backtest(parametros, df, commission=0.001, verbose=True)
Neste trecho, a lógica é adaptada para enfatizar a configuração de parâmetros em um dicionário separado, promovendo flexibilidade.
Habilitando Estratégias de Venda a Descoberto
A venda a descoberto (short selling) permite lucrar em quedas de preço. No fastquant, isso é ativado através de parâmetros específicos na função de backtest. Para implementar uma estratégia que combine sinais de compra e venda a descoberto:
def rodar_estrategia_com_venda_descoberto(df, periodo_rsi, limite_compra, limite_venda):
"""Função personalizada para backtesting com venda a descoberto."""
config = {
"strategy": "custom",
"upper_limit": limite_venda,
"lower_limit": limite_compra,
"rsi_period": periodo_rsi,
"allow_short": True, # Ativar venda a descoberto
"short_ratio": 0.5 # Proporção máxima para posição short
}
return backtest(config, df)
# Exemplo de uso
df_crypto = get_crypto_data("ETH/USDT", "2023-03-01", "2023-09-01", interval="1h")
dados_resultado = rodar_estrategia_com_venda_descoberto(df_crypto, 10, 30, 70)
Ao encapsular a lógica em uma função, o código se torna mais modular e reutilizável, alterando nomes de variáveis para refletir uma estrutuar mais genérica.
Otimização de Parâmetros
O fastquant oferece ferramentas para otimização automatizada, como busca em grade. Isso ajuda a identificar combinações ideais de parâmetros para maximizar retornos ou minimizar riscos. Parâmetros típicos incluem períodos de indicadores, limites de negociação e tamanhos de posição.
Exemplo de configuração de otimização:
espaco_parametros = {
"rsi_period": [10, 20, 30],
"rsi_upper": [65, 75],
"rsi_lower": [25, 35]
}
melhor_config = backtest(
{"strategy": "rsi"},
df,
optimize=espaco_parametros,
metric="sharpe_ratio" # Otimizar para índice de Sharpe
)
Esta abordagem permite testar múltiplos cenários de forma sistemática, ajustando a lógica para focar em métricas de desempenho específicas.
Análise de Resultados
Após executar o backtest, o fastquant fornece saídas detalhadas, incluindo gráficos de curvas de capital e métricas como retorno total, drawdown máximo e taxa de acerto. Utilize bibliotecas como Matplotlib para visualização personalizada:
import matplotlib.pyplot as plt
plt.figure(figsize=(10, 6))
plt.plot(resultados["equity_curve"])
plt.title("Evolução do Capital - Estratégia RSI com Venda a Descoberto")
plt.xlabel("Tempo (horas)")
plt.ylabel("Valor do Portfólio")
plt.show()
Este exemplo simplificado ilustra como plotar a curva de capital, mantendo a funcionalidade essencial enquanto altera a estrutura do código.