Implementação de Backtesting Horário e Estratégias de Venda a Descoberto em Criptomoedas com fastquant

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.

Tags: fastquant criptomoedas backtesting venda a descoberto negociação quantitativa

Publicado em 7-5 22:45