Sumário > Projeto de Gestão de Criptomoedas
📊 Posições Abertas
1. Estrutura de Dados
1.1 Campos Essenciais
interface OpenPosition {
id: string;
symbol: string; // Par negociado (ex: BTCUSDT)
entry_price: number; // Preço de entrada
current_price: number; // Preço atual (atualizado via WebSocket)
quantity: number; // Quantidade da moeda base
entry_time: Date;
duration_hours: number; // Tempo em aberto
status: 'normal' | 'fora_canal' | 'alerta';
pnl: number; // Profit/Loss não realizado (%)
target_price?: number; // Preço alvo (se status=fora_canal)
}
2. Visualização do Dashboard
2.1 Tabela Dinâmica
| Par | Preço Entrada | Preço Atual | Quant | PnL% | Status | Tempo |
|---|---|---|---|---|---|---|
| BTCUSDT | 102,450.00 | 105,200.00 | 0.5 | +2.68% | normal | 12h |
| ETHUSDT | 1,850.50 | 1,790.30 | 3.2 | -3.25% | fora_canal | 36h |
2.2 Gráfico de Distribuição
# Plotly Express
fig = px.scatter(
df,
x='duration_hours',
y='pnl',
color='status',
hover_data=['symbol', 'entry_price']
)
fig.update_layout(title='Rentabilidade vs. Tempo de Posição')
3. Consultas Prioritárias
3.1 SQL para Posições Críticas
SELECT
symbol,
entry_price,
current_price,
(current_price - entry_price) / entry_price * 100 AS pnl_percent,
EXTRACT(HOUR FROM NOW() - entry_time) AS duration_hours
FROM positions
WHERE status != 'normal'
ORDER BY pnl_percent ASC;
3.2 Cálculo do PnL em Tempo Real
def update_pnl():
for position in open_positions:
ticker = get_current_price(position.symbol)
position.pnl = (ticker - position.entry_price) / position.entry_price * 100
position.status = check_position_status(position) # Verifica canal
4. Alertas Automatizados
4.1 Gatilhos Recomendados
| Condição | Ação |
|---|---|
| PnL < -5% | Notificar + Sugerir revisão |
| Tempo > 72h | Alertar exposição prolongada |
| Preço tocar alvo (fora_canal) | Executar venda automática |
5. Exemplo de JSON para API
{
"positions": [
{
"id": "pos-btc-0425",
"symbol": "BTCUSDT",
"entry_price": 102450.00,
"current_price": 105200.00,
"quantity": 0.5,
"status": "normal",
"pnl": 2.68,
"duration_hours": 12
}
],
"last_updated": "2023-05-15T14:30:00Z"
}
6. Atualização em Tempo Real
6.1 Fluxo WebSocket
sequenceDiagram
participant Binance
participant Sistema
participant Frontend
Binance->>Sistema: Stream de preços (1s)
Sistema->>Sistema: Calcula PnL/status
Sistema->>Frontend: Broadcast via Socket.IO
Frontend->>Frontend: Atualiza tabela/gráficos
7. Próximos Passos
✅ Checklist de Monitoramento
- Atualização de preços a cada 10s (mínimo)
- Validação diária de status das posições
- Backup horário do estado atual
# Simular atualização
python -m simulator positions --interval 10
Este documento fornece visibilidade completa sobre as exposições atuais do sistema, essencial para gestão de risco ativa. Mantenha o histórico de posições fechadas para análise futura!