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 projetar, testar 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.
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.
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.

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