image

Bootcamps ilimitados + curso de inglês para sempre

80
%OFF
Article image
Gabriel Sales
Gabriel Sales21/12/2023 10:51
Compartilhe

Bot de notificações via Telegram para análise de cryptomoedas com reversão de tendência e Price Action

    Descubra o poder da automação no mercado de criptomoedas com este Bot inteligente! Este inovador sistema analisa tendências e movimentos de preço, identificando oportunidades valiosas de investimento. Explore o código neste repositório do GitHub e leve sua estratégia de trading para o próximo nível!

    Indicadores Utilizados:

    1. Índice Direcional Médio (DMI): Este indicador compara as diferenças entre as máximas e mínimas dos preços ao longo do tempo, avaliando a força e direção de uma tendência. O +DI e -DI são calculados com base em movimentos direcionais positivos e negativos, indicando potenciais mudanças na direção do mercado.
    2. Price Oscillator (DPO): O DPO mede a diferença entre o preço de um ativo e uma média móvel deslocada no tempo. É útil para identificar ciclos de preços de curto prazo e possíveis reversões.

    Funcionalidade do Bot:

    O código desenvolvido utiliza a biblioteca ccxt para acessar os dados de mercado da exchange Binance e processá-los. O bot realiza o seguinte fluxo:

    1. Leitura dos Pares de Criptomoedas: Carrega uma lista de pares de criptomoedas em relação ao USDT a partir do arquivo 'pares_usdt.txt'.
    2. Análise Assíncrona: Utiliza múltiplos threads para analisar cada par de criptomoedas de forma independente.
    3. Identificação de Sinais de Reversão: Aplica os indicadores técnicos (DMI e DPO) em cada par de criptomoedas, identificando sinais de reversão de tendência ou de Price Action.
    4. Notificações via Telegram: Quando identifica um sinal significativo, o bot envia uma notificação através do Telegram informando sobre a possível reversão detectada para o ativo em questão.

    Para utilizar o bot, é necessário substituir 'binance' pela exchange desejada e garantir que o arquivo 'pares_usdt.txt' contenha os pares de criptomoedas desejados. Além disso, é necessário configurar a integração com o Telegram para receber as notificações.

    Este código é uma base sólida para a construção de estratégias de trading automatizadas, permitindo uma análise dinâmica e ágil do mercado de criptomoedas em busca de oportunidades de investimento.

    import ccxt
    import pandas as pd
    from concurrent.futures import ThreadPoolExecutor
    import asyncio
    from telegram_notifier import send_telegram_message
    
    
    def calculate_atr(df, period):
      df['high_low'] = df['high'] - df['low']
      df['high_close'] = abs(df['high'] - df['close'].shift())
      df['low_close'] = abs(df['low'] - df['close'].shift())
      df['true_range'] = df[['high_low', 'high_close', 'low_close']].max(axis=1)
      df['average_true_range'] = df['true_range'].rolling(window=period).mean()
      return df
    
    
    def calculate_dmi(df, period):
      df['high_diff'] = df['high'].diff()
      df['low_diff'] = df['low'].diff()
      df['up_move'] = df['high_diff'].apply(lambda x: x if x > 0 else 0)
      df['down_move'] = df['low_diff'].apply(lambda x: abs(x) if x < 0 else 0)
      
      df['ema_up'] = df['up_move'].ewm(span=period).mean()
      df['ema_down'] = df['down_move'].ewm(span=period).mean()
      
      df['+DI'] = (df['ema_up'] / df['average_true_range']) * 100
      df['-DI'] = (df['ema_down'] / df['average_true_range']) * 100
      
      return df
    
    
    def calculate_dpo(df, period):
      df['dpo'] = df['close'].shift(int(period / 2) + 1).rolling(window=period).mean()
      df['dpo'] = df['close'] - df['dpo']
      return df
    
    
    def analyze_coin(coin_symbol):
      try:
          exchange = ccxt.binance()  # Substitua 'binance' pela exchange desejada
          bars = exchange.fetch_ohlcv(coin_symbol, timeframe='15m', limit=100)
          df = pd.DataFrame(bars, columns=['time', 'open', 'high', 'low', 'close', 'volume'])
          
          period = 14
          df = calculate_atr(df, period)
          df = calculate_dmi(df, period)
          
          period_dpo = 21  # Período para o DPO
          df = calculate_dpo(df, period_dpo)
          
          current_plus_di = df['+DI'].iloc[-1]
          current_minus_di = df['-DI'].iloc[-1]
          previous_plus_di = df['+DI'].iloc[-2]
          previous_minus_di = df['-DI'].iloc[-2]
          
          current_dpo = df['dpo'].iloc[-1]
          previous_dpo = df['dpo'].iloc[-2]
    
    
          if pd.notnull(current_plus_di) and pd.notnull(current_minus_di) and pd.notnull(previous_plus_di) and pd.notnull(previous_minus_di):
              if previous_plus_di < previous_minus_di and current_plus_di > current_minus_di:
                  return f"+DI e -DI indicando reversão de tendência para alta em {coin_symbol}"
              elif previous_plus_di > previous_minus_di and current_plus_di < current_minus_di:
                  return f"-DI e +DI indicando reversão de tendência para baixa em {coin_symbol}"
          
          if pd.notnull(current_dpo) and pd.notnull(previous_dpo):
              if previous_dpo < 0 and current_dpo > 0:
                  return f"DPO indicando reversão para alta em {coin_symbol}"
              elif previous_dpo > 0 and current_dpo < 0:
                  return f"DPO indicando reversão para baixa em {coin_symbol}"
          
      except Exception as e:
          print(f"Erro ao analisar {coin_symbol}: {e}")
      return None
    
    
    async def analyze_assets_async():
      # Carregar moedas do arquivo pares_usdt.txt
      with open('pares_usdt.txt', 'r') as file:
          coins_list = [line.strip() for line in file.readlines() if line.strip()]
    
    
      assets_with_signals = []
    
    
      with ThreadPoolExecutor() as executor:
          results = executor.map(analyze_coin, coins_list)
          
          for result in results:
              if result:
                  assets_with_signals.append(result)
    
    
      if assets_with_signals:
          message = "Ativos com sinais:\n\n"
          for asset_signal in assets_with_signals:
              message += f"- {asset_signal}\n\n"
    
    
          await send_telegram_message(message)
    
    
      else:
          await send_telegram_message("Nenhum ativo com sinal.")
    
    
    async def run_analysis():
      await analyze_assets_async()
    
    
    if __name__ == "__main__":
      asyncio.run(run_analysis())
    

    https://github.com/gabrielmgsales/Crypto_Sinais_PriceAction

    Este bot representa uma ferramenta valiosa para traders e investidores interessados em utilizar análise técnica para tomar decisões informadas no mercado de criptomoedas, permitindo uma abordagem mais estruturada e automatizada para identificar possíveis oportunidades de negociação.

    Compartilhe
    Recomendados para você
    Microsoft 50 Anos - Prompts Inteligentes
    Microsoft 50 Anos - GitHub Copilot
    Microsoft 50 Anos - Computação em Nuvem com Azure
    Comentários (0)