Kit de ferramentas completo para negociação algorítmica totalmente automatizada

Autor(a):
Binance renda passiva

Apresentando a solução definitiva para negociação automatizada: o One-Stop Toolkit for Algorithmic Trading. Este poderoso kit de ferramentas combina todas as ferramentas necessárias para criar algoritmos de negociação sofisticados e executá-los na nuvem, enquanto você toma margaritas no Caribe. Tudo em um pacote fácil de usar.

Com este kit de ferramentas, você pode projetartestar e implantar facilmente suas próprias estratégias de negociação. Seja você um iniciante ou um trader experiente, a interface intuitiva torna mais fácil começar.

Digital Ocean crédito

O kit de ferramentas inclui um conjunto completo de ferramentas e recursos, incluindo:

  • Origem e tratamento de dados
  • Ferramentas de backtesting e otimização personalizáveis
  • Negociação ao vivo e dados de mercado em tempo real

Não perca tempo com várias ferramentas e plataformas — obtenha tudo o que precisa com o One-Stop Toolkit for Algorithmic Trading. Comece a automatizar suas negociações hoje e veja os resultados por si mesmo.

Inclui:

1. Tratamento de Dados

  • Uma classe DataHandler que atua como uma ponte entre seus dados e um cliente REST, facilitando a comunicação com diferentes APIs, recuperando dados e armazenando-os no formato csv com uma estrutura unificada.
  • Um módulo datapipline que pode ser facilmente adaptado para buscar dados de sua moeda e período de tempo favoritos e armazená-los em um arquivo csv.
  • Uma coleção de arquivos csv com os dados de suas moedas favoritas para melhorar a velocidade de backtesting e permitir o trabalho de codificação offline.
O fluxograma acima mostra o fluxo de dados da API de troca através do datapipline no banco de dados. A partir daí, carregamos os dados para executar backtests e produzir relatórios detalhados sobre todas as nossas estratégias de negociação. (Criado pelo autor com o Lucidchart )

2. Backtesting

  • A classe Backtest serve como um modelo para backtesting, tornando mais fácil conectar suas próprias estratégias e ver como elas teriam se saído em diferentes condições de mercado no passado.
  • Dois exemplos prontos para uso para uma estratégia de exemplo e um portfólio de exemplo, tornando mais fácil começar a testar suas próprias estratégias.
  • Relatórios de backtest para a estratégia de exemplo que fornecem uma visão abrangente do desempenho da estratégia, incluindo gráficos da curva de patrimônio e importantes métricas de desempenho para diferentes parâmetros.
O backtest na imagem acima mostra os retornos que teriam sido alcançados com o portfólio completo de estratégias de negociação proprietárias a partir de 21 de fevereiro de 2021. (Criado pelo autor mit matplotlib)

3. Negociação ao vivo

  • Um cliente REST para lidar com a API da Binance, que você pode facilmente adaptar para funcionar com a API da sua exchange favorita.
  • Uma classe abstrata de estratégia que serve como base para suas estratégias, fornecendo uma estrutura clara e um conjunto de diretrizes para implementação.
  • Uma estratégia de negociação testada e comprovada que serve como modelo para suas próprias estratégias ou como ponto de partida para construir.
  • Uma aula de portfólio que torna a combinação de suas estratégias em portfólios totalmente coesos e bem equilibrados tão fácil quanto um-dois-três.
No período de 11 de dezembro de 2022, quando o bot foi lançado pela primeira vez, até 28 de dezembro de 2022, ele produziu um PnL cumulativo de 9,59%. (Captura de tela do autor)

Observação! Este repositório público não contém meu conjunto completo de estratégias de negociação proprietárias. Contém apenas uma das estratégias que compõem meu portfólio para servir de exemplo para os usuários. Meu portfólio completo consiste em uma coleção diversificada de estratégias para maximizar os retornos ajustados ao risco.

Uso

Escrevendo uma estratégia

Nosso exemplo é uma estratégia que aposta na continuidade de uma tendência em curso. Se o mercado estiver em tendência de alta e certos critérios forem atendidos, a estratégia entrará em uma negociação longa para lucrar com a continuação da tendência de alta. Da mesma forma, entramos em uma negociação curta se o mercado estiver em uma tendência de baixa contínua.

Enquanto a classe de estratégia abstrata está no diretório bot/src/, a implementação real de uma estratégia particular está no diretório bot/src/strategies.

Assim, para implementar nossa estratégia de continuação de tendências, criamos um novo arquivo no diretório bot/src/strategies/ . No nosso caso, é chamado de ContinuationTrade.py. Neste arquivo, implementamos a lógica de negociação em uma classe herdada de Strategy.

(Criado pelo autor com Lucidchart )

A classe base Strategy tem um total de oito métodos abstratos que temos que implementar em nossa classe filha.

Os métodos next_candle_init e next_candle_live fornecem uma interface pública para nossos módulos de backtest e negociação ao vivo para distinguir entre inicialização, backtesting e negociação ao vivo.

Se estivermos inicializando uma estratégia para negociação ao vivo, chamamos o método next_candle_init.

def  next_candle_init(self, row: pd.Series) -> None
    """Initializes the strategy by iterating through historical data
    without executing trades.
    
    Parameters
    ----------
    row : pd.Series
    Row of historical data.
    """
    
    self._setup_trade(row):

Este método chama os métodos setup_trade .

O método setup_trade verifica se uma configuração de negociação foi acionada com a vela recente e, se sim, define o sinalizador de gatilho para uma configuração longa ou curta como True .

Se não estivermos negociando ao vivo, registramos o patrimônio atual em cada etapa para avaliar a curva do patrimônio posteriormente.

Se estivermos negociando ao vivo ou executando um backtest, chamamos o método next_candle_live .

def  next_candle_live(self, row: pd.Series) -> None
    """Checks for valid trade set ups with new live data and execute live
    trades.
    Parameters
    ----------
    row : pd.Series
    Row of live data.
    """

    self._execute_trade(row)
    self._setup_trade(row):

Este método chama o método execute_trade para gerar sinais de negociação e o método setup_trade para detectar novas configurações.

O método execute_trade verifica se um novo gatilho foi definido ou se existe uma posição existente e chama o método entry_long , entry_short , exit_long ou exit_short respectivamente.

Se entry_long ou entry_short estiver sendo chamado, mais algumas condições, como uma relação recompensa/risco suficiente, serão verificadas. Se essas condições forem satisfeitas, uma negociação está sendo inserida na bolsa por meio de nosso objeto RESTClient para negociação ao vivo ou registrada sem execução real para backtesting.

Se exit_long ou exit_short estiver sendo chamado, a negociação atual está sendo fechada na bolsa por meio de nosso objeto RESTClient para negociação ao vivo ou registrada sem execução real para backtest na montagem de um portfólio completo para negociação ao vivo.

(Criado pelo autor com Lucidchart )

Montando um Portfólio Completo para Negociação ao Vivo

Para montar seu portfólio, defina seus ativos negociáveis ​​em Assets.py. Importe-os para o módulo live.py assim:

from  src.Assets  import  btc_cont_live, eth_cont_live, sol_cont_live,
                          doge_cont_live

e defina os mercados que deseja negociar na função principal

if  __name__ == '__main__'

    markets = [btc_cont_live, eth_cont_live, sol_cont_live, doge_cont_live]
   
    portfolio = initialize_portfolio(markets, live=True)

    trade(portfolio):

Tão direto quanto possível.

Backtests de redação: estratégias únicas e portfólios completos

Backtest de Estratégia Única

Para configurar um novo backtest para uma estratégia individual, você criará um novo arquivo .py no diretório bot/back_tests/ com o nome do seu backtest.

Você pode copiar e colar o código do módulo backtest_continuation_trade.py existente. Neste módulo, testamos a estratégia de negociação de continuação. Para isso importamos a classe ContinuationTrade assim:

from src.strategies.ContinuationTrade import ContinuationTrade

Você substituirá esta linha de importação pelo módulo e classe de sua própria estratégia. Você também pode alterar a lista predefinida de mercados e ajustar o conjunto de níveis de risco, tamanhos de alavancagem e taxas de recompensa/risco se os predefinidos não se adequarem ao seu caso de uso específico.

markets = [btc_cont, eth_cont, sol_cont, doge_cont
risk_samples = [0.001, 0.005 , 0.01, 0.05, 0.1, 0.2]
leverage_samples = [1 , 3, 5, 10]
risk_reward = [2.0, 3.0]]

Se você deseja negociar mercados que não estão incluídos no código atual, certifique-se de defini-los no módulo Assets.py e importá-los.

A última etapa é percorrer todos os mercados e executar os backtests. Aqui você tem que mudar o segundo argumento “ContinuationTrade” para ser sua estratégia.

for market in markets
    bt.run(ec, ContinuationTrade, market, risk_samples,
           leverage_samples, risk_reward, Timeframes):

O objeto Backtest também salvará um relatório de seu backtest no diretório bot/back_tests/backtest_reports/, incluindo curvas de equidade e importantes métricas de desempenho, como proporção de Sharpe, proporção de Sortino e redução máxima de sua execução de teste.

(Criado pelo autor com matplotlib)

Backtest Portfólio Completo

A configuração de um backtest de portfólio completo funciona quase da mesma maneira que a configuração de um portfólio para negociação ao vivo, que foi explicado acima.

Para montar seu portfólio, defina seus ativos negociáveis ​​em Assets.py. Importe-os para o módulo backtest_portfolio.py assim:

from src.Assets import btc_cont, eth_cont, sol_cont, doge_cont

e defina os mercados que deseja negociar na função principal

if __name__ == '__main__':
  
    markets = [btc_cont, eth_cont, sol_cont, doge_cont]

    portfolio = initialize_portfolio(markets, live=False)

A única diferença para configurar um portfólio de negociação ao vivo é que definimos o parâmetro ao vivo como Falso ao inicializar o portfólio e não chamar a função de negociação que inicia o agendador para negociação ao vivo.

(Criado pelo autor com matplotlib)

Obtendo dados

Em Assets.py, instancie um objeto que representa seu ativo. Para uma negociação de continuação em Bitcoin, fazemos assim:

btc_cont = Asset(ContinuationTrade, 'Continuation_Trade', 'BTCBUSD'
                 (58434.0, '2021-02-21 19:00:00+00:00'),
                 (57465.0, '2021-02-21 18:00:00+00:00'),
                 datetime(2021, 2, 21, 20, 0, 0, 0), 100,
                 Timeframes.ONE_HOUR.value, 0.1, 1.0, 2.0, 3)

No módulo datapipline.py definimos os tickers que nos interessam.

busd_markets = ['BTCBUSD', 'ETHBUSD', 'SOLBUSD', 'DOGEBUSD']

No nosso caso, estamos interessados ​​nos futuros de BUSD para $BTC, $ETH, $SOL e $DOGE. Se você estiver interessado em outras moedas, pode descobrir o código delas no site da sua bolsa e substituí-las na lista acima. Certifique-se também de adaptar as classes no módulo RESTClient.py se estiver usando outra exchange.

Agora só precisamos executar

Python3 datapipeline.p

no terminal do diretório bot e carregará os dados solicitados da API de futuros da Binance em arquivos csv localizados no diretório bot/database/datasets .

Por padrão, os prazos 1d, 1h e 4h são implementados, mas se você estiver interessado em outros prazos, poderá facilmente estender o Enum

class Timeframes(Enum):
    ONE_HOUR = '1h'  
    FOUR_HOURS = '4h'
    ONE_DAY = '1d'

em Assets.py.

Se, por exemplo, você quiser adicionar o período de tempo de 5m, basta adicionar a linha

FIVE_MINUTES = '5m

no Enum em Assets.py e as linhas

download(market, Timeframes.FIVE_MINUTES.value, timedelta(minutes=4999))
print(Timeframes.FIVE_MINUTES.value + ' done! \n')

timedelta dessa forma, pois podemos solicitar no máximo 1.000 entradas de dados por vez da API da Binance. Por padrão, são 500 entradas de dados, mas solicitando explicitamente 1.000 podemos reduzir o número de solicitações e, portanto, o tempo necessário para baixar nossos dados.

Testes de unidade

Para executar os testes de unidade incluídos, execute

pytest -v -k "test_ms or test_data_fetch_current"

Isso não inclui todos os testes de unidade incluídos, mas o restante requer que você configure um bot do Telegram. Você precisará configurar um bot do Telegram antes de começar a negociar ao vivo para que o algoritmo possa enviar mensagens para o seu telefone ao entrar e sair das negociações.

Licença

Veja o arquivo LICENSE.txt para direitos de licença e limitações (GNU GPLv3).

Fonte: https://trading-data-analysis.pro/one-stop-toolkit-for-fully-automated-algorithmic-trading-2b5894fe551d

WP Twitter Auto Publish Powered By : XYZScripts.com