Skip to main content

📊 Visão Geral

A funcionalidade de Candlestick de Arbitragem permite gerar dados históricos de arbitragem em formato de candlestick, baseados nos dados já processados e armazenados na collection operations_audit do MongoDB.
Esta feature utiliza dados históricos já processados, não fazendo chamadas em tempo real para APIs externas, garantindo performance e consistência.

🎯 Funcionalidades

Características Principais

  • 📈 Dados Históricos: Utiliza dados da collection operations_audit
  • ⏱️ Agregação Temporal: Snapshots em intervalos de 5min, 15min, 30min
  • 🔄 Cache Inteligente: Cache de 2 horas para otimização
  • 📊 Estatísticas Consolidadas: Métricas de performance de arbitragem
  • 🎯 Filtros Precisos: Por ticker, exchanges e período

📊 Intervalos por Período

PeríodoIntervalo de SnapshotDescrição
7 days5 minutosDados detalhados para análise
15 days15 minutosVisão balanceada
30 days30 minutosVisão macro de longo prazo

🏗️ Arquitetura

📁 Estrutura de Arquivos

crypto-core/internal/
├── entity/
│   └── arbitrage-candlestick.go     # Entidades de dados
├── application/candlestick/
│   ├── arbitrage-candlestick-service.go  # Lógica de negócio
│   └── arbitrage-cache.go               # Sistema de cache
└── api/
    └── arbitrage-candlestick-api.go     # Endpoints REST

🔄 Fluxo de Dados


📋 Estruturas de Dados

🎯 ArbitrageCandlestickData

{
  timestamp: "2024-01-01T10:00:00Z",
  exchange_data: {
    "binance": {
      exchange_name: "binance",
      symbol: "BTC-USDT",
      bid_price: 45000.0,
      ask_price: 45050.0,
      bid_qty: 1.5,
      ask_qty: 2.0,
      total_volume: 67500.0,
      spread: 50.0,
      spread_percentage: 0.11
    }
  },
  arbitrage_opportunities: [
    {
      buy_exchange: "binance",
      sell_exchange: "coinbase",
      buy_price: 45050.0,
      sell_price: 45020.0,
      spread: -30.0,
      spread_percentage: -0.07,
      net_profit: -120.07,
      net_profit_percentage: -0.27,
      is_profitable: false,
      liquidity_score: 125.5
    }
  ]
}

📊 ArbitrageStatistics

{
  total_snapshots: 168,
  total_opportunities: 5040,
  profitable_count: 1200,
  avg_spread_percentage: 0.15,
  max_spread_percentage: 2.5,
  min_spread_percentage: -1.2,
  avg_net_profit_percentage: 0.08,
  max_net_profit_percentage: 1.8,
  best_exchange_pair: "binance-coinbase",
  total_volume: 125000.5
}

🚀 Como Usar

📡 Endpoint Principal

GET /v1/candlestick?ticker=BTC-USDT&exchanges=binance,coinbase&period=7%20days

🔧 Parâmetros

ParâmetroTipoObrigatórioDescrição
tickerstringSimPar de moedas (ex: “BTC-USDT”)
exchangesstringNãoLista de exchanges separadas por vírgula
periodstringSimPeríodo: “7 days”, “15 days”, “30 days”

📝 Exemplo de Resposta

{
  "ticker": "BTC-USDT",
  "exchanges": ["binance", "coinbase"],
  "period": "7 days",
  "start_time": "2024-01-01T00:00:00Z",
  "end_time": "2024-01-08T00:00:00Z",
  "data": [
    {
      "timestamp": "2024-01-01T10:00:00Z",
      "exchange_data": { /* dados das exchanges */ },
      "arbitrage_opportunities": [ /* oportunidades */ ]
    }
  ],
  "statistics": {
    "total_snapshots": 168,
    "total_opportunities": 5040,
    "profitable_count": 1200,
    "avg_spread_percentage": 0.15,
    "best_exchange_pair": "binance-coinbase"
  }
}

🔍 Análise de Dados

📈 Métricas Disponíveis

  • Total de Snapshots: Número de intervalos temporais analisados
  • Oportunidades Totais: Quantidade total de oportunidades encontradas
  • Taxa de Sucesso: Percentual de oportunidades lucrativas
  • Spread Médio: Média dos spreads entre exchanges
  • Melhor Par: Par de exchanges mais lucrativo
  • Volume Total: Volume total negociado

🎯 Casos de Uso

Backtesting

Analise estratégias de arbitragem usando dados históricos

Análise de Performance

Avalie a performance de diferentes pares de exchanges

Identificação de Padrões

Descubra padrões temporais nas oportunidades de arbitragem

Otimização de Estratégias

Otimize parâmetros baseado em dados históricos

⚡ Performance e Cache

🚀 Sistema de Cache

  • Duração: 2 horas por chave
  • Chave: arbitrage_candlestick:{ticker}:{exchanges}:{period}
  • Backend: Redis ou memória local
  • Invalidação: Automática por tempo

📊 Otimizações

O sistema foi otimizado para:
  • Busca Eficiente: Filtros MongoDB otimizados
  • Agregação em Memória: Processamento rápido dos dados
  • Cache Inteligente: Reduz chamadas ao banco de dados
  • Dados Históricos: Não depende de APIs externas

🔧 Implementação Técnica

📊 Agregação de Dados

// Busca operações do MongoDB
operations := fetchOperationsFromAudit(filter)

// Agrega em snapshots temporais
snapshots := aggregateToSnapshots(operations, exchanges, interval)

// Calcula oportunidades de arbitragem
opportunities := calculateArbitrageOpportunities(exchangeData)

🎯 Filtros MongoDB

bsonFilter := bson.M{
    "ticker": filter.Ticker,  // Comparação exata
    "timestamp": bson.M{
        "$gte": primitive.NewDateTimeFromTime(filter.StartTime),
        "$lte": primitive.NewDateTimeFromTime(filter.EndTime),
    },
    "$or": []bson.M{
        {"best_buy_exchange_name": bson.M{"$in": filter.Exchanges}},
        {"best_sell_exchange_name": bson.M{"$in": filter.Exchanges}},
    },
}

📚 Recursos Adicionais

Importante: Esta funcionalidade utiliza dados históricos da collection operations_audit. Certifique-se de que os dados estão sendo coletados regularmente para ter snapshots atualizados.