# 🔧 Solução: Erro -1021 - Sincronização de Relógio

## ❌ O Problema

Você recebeu este erro:
```
ERRO: Erro ao obter saldo de BTC: binance 
{"code":-1021,"msg":"Timestamp for this request was 1000ms ahead of the server's time."}
```

**Causa**: O relógio do seu PC está desincronizado com o servidor da Binance.

---

## ✅ A Solução (Automática!)

O robô agora:

1. ✅ **Sincroniza automaticamente** com o servidor da Binance ao iniciar
2. ✅ **Detecta desincronizações** maiores que 1 segundo
3. ✅ **Avisa ao usuário** se houver problema
4. ✅ **Tenta novamente automaticamente** se erro -1021 ocorrer
5. ✅ **Resincroniza** em cada conexão falhada

---

## 🚀 O Que Mudou

### Antes
```
❌ Erro direto sem retry
❌ Timestamp não sincronizado
❌ Usuário sem saber o motivo
```

### Agora
```
✅ Sincroniza ao iniciar
✅ Retry automático (3 tentativas)
✅ Resincroniza se necessário
✅ Mensagens claras ao usuário
```

---

## 📊 Como Funciona

### 1️⃣ Ao Iniciar o Robô

```
[09/04/2026 22:14:30] Sincronizando com servidor Binance...
⚠ AVISO: Relógio do PC está 1.2s adiantado
[09/04/2026 22:14:31] ✓ Mercados carregados (Exchange pronta)
[09/04/2026 22:14:31] ========== INICIANDO ROBÔ ==========
```

### 2️⃣ Se Houver Desincronização

```
[09/04/2026 22:15:10] AVISO: Erro de timestamp ao obter BTC, 
                              resincronizando... (tentativa 1/3)
[09/04/2026 22:15:11] ✓ Timestamp resincronizado
[09/04/2026 22:15:11] Preço BTC: 45000.00 (sucesso!)
```

### 3️⃣ Sem Erros

```
[09/04/2026 22:16:00] ========== FASE DE CONSTRUÇÃO ==========
[09/04/2026 22:16:01] Saldo USDT: 1500.00
[09/04/2026 22:16:02] ✓ Ordem executada: 0.01 BTC em 45000.00
```

---

## 🔧 Se Ainda Tiver Problemas

### Opção 1: Sincronizar Relógio Windows (RECOMENDADO)

**Windows 10/11:**

1. Abra **Configurações** (Win + I)
2. Vá para **Hora e idioma** → **Data e hora**
3. Ative **Definir a hora automaticamente**
4. Ative **Definir o fuso horário automaticamente**
5. Aguarde sincronização (pode levar alguns segundos)

**Via Terminal (Admin):**
```powershell
w32tm /resync /force
```

### Opção 2: Aumentar recvWindow (Fallback)

Se não conseguir sincronizar, edit `configuracoes_balanceamento.json`:

```json
{
  "api_key": "...",
  "recvWindow": 15000,  ← Aumentar para 15 segundos
  "portfolio": [...]
}
```

Depois, reiniciar robô.

### Opção 3: Contactar Suporte

Se os erros persistirem:
1. Abra um terminal
2. Execute: `w32tm /query /status`
3. Copie a saída
4. Contacte o suporte com essa informação

---

## 📈 Mudanças Técnicas

### Arquivo: `robo_balanceamento.py`

#### Nova Função de Sincronização
```python
def sincronizar_timestamp_binance():
    """Sincroniza o timestamp com o servidor da Binance"""
    # Detecta desincronizações
    # Aplica correção se necessário
    # Retorna offset de tempo
```

#### Opções CCXT Atualizadas
```python
exchange = ccxt.binance({
    'options': {
        'recvWindow': 10000,      # Janela de 10 segundos
        'timeOffset': time_offset,  # Offset automático
    }
})
```

#### Retry Automático em Funções
```python
def obter_preco_atual(symbol):
    # Máximo 3 tentativas
    # Resincroniza se -1021
    # Aguarda 1s entre tentativas
```

```python
def obter_saldo(ativo):
    # Máximo 3 tentativas
    # Resincroniza se -1021
    # Aguarda 1s entre tentativas
```

---

## ✨ Benefícios

| Aspecto | Antes | Depois |
|--------|-------|--------|
| **Erro -1021** | ❌ Falha imediata | ✅ Retry automático |
| **Sincronização** | ❌ Manual | ✅ Automática |
| **Mensagens** | ❌ Confusas | ✅ Claras |
| **Recuperação** | ❌ Reiniciar | ✅ Automática |

---

## 🎯 Recomendações

### Antes de Usar o Robô

1. ✅ **Sincronize seu relógio** (Windows Update automático)
2. ✅ **Teste a conexão**: Inicie o robô em testnet
3. ✅ **Verifique a mensagem** ao iniciar (rápido significa OK)

### Uso Regular

1. ✅ Deixe seu PC **conectado à internet** (NTP automático)
2. ✅ Use **Windows Update automático** ativado
3. ✅ Se vir aviso, aguarde a resincronização automática

---

## 📊 Exemplo de Execução Bem-Sucedida

```
PS D:\xampp\htdocs\projetos\balanceamento\robobalanceamento> python robo_balanceamento.py

[09/04/2026 22:30:00] Sincronizando com servidor Binance...
[09/04/2026 22:30:01] ✓ Timestamp sincronizado (offset: 0ms)
Modo Testnet: DESATIVADO
Compra Imediata: ATIVADA (tolerância 10%)
✓ Mercados carregados (Exchange pronta)

[09/04/2026 22:30:02] ========== INICIANDO ROBÔ ==========
[09/04/2026 22:30:02] Portfólio: BTC, ETH, HBAR, SOL, LINK, XRP
[09/04/2026 22:30:02] Capital: R$ 1500.00
[09/04/2026 22:30:03] Saldo USDT: 1500.00

[09/04/2026 22:30:04] ========== FASE DE CONSTRUÇÃO ==========
[09/04/2026 22:30:05] BTC: Preço 45000.00 ✓
[09/04/2026 22:30:06] ✓ Ordem executada: 0.01 BTC
[09/04/2026 22:30:07] ETH: Preço 2640.00 ✓
...
```

---

## 🆘 Troubleshooting

### Problema: Ainda vejo erro -1021

**Solução:**
```powershell
# Terminal Admin
w32tm /resync /force
# Aguarde 5 segundos
# Reinicie robô
```

### Problema: Erro após resincronização

**Solução:**
1. Aguarde 30 segundos de sincronização NTP
2. Verifique internet (Ctrl+R, `ping google.com`)
3. Reinicie robô

### Problema: Muitos "AVISO: Erro de timestamp"

**Solução:**
1. Seu relógio pode estar com drift
2. Configure sincronização NTP no Windows
3. Ou aumente `recvWindow` para 15000

---

## 📞 Resumo Rápido

| Situação | Ação |
|----------|------|
| Vê "Timestamp sincronizado" | ✅ Tudo OK |
| Vê aviso de desincronização | ℹ️ Normal, reajusta automaticamente |
| Recebe erro -1021 | ⚠️ Retry automático, aguarde |
| Erro persiste | 🔧 Execute `w32tm /resync /force` |

---

**Versão**: 2.0 (com sincronização automática)  
**Data**: 9 de Abril de 2026  
**Status**: ✅ Pronto para produção
