AHS Trading Bot

Paper mode · BTC/USD · 4h timeframe
Última actualización:
Equity total
cash + posición MTM
PnL realizado
desde inicio ($100)
Win rate
trades cerrados
Drawdown actual
max histórico:
Régimen
EMA50 vs EMA200
BTC/USD (Kraken)
bid · ask

🟢 Estado en vivo

Posición abierta

Última señal procesada

Estado workflows

📊 Precio, Z-Score y RSI — últimas 50 señales

Triángulos rojos = donde el bot abrió un trade. Las zonas sombreadas en RSI/Z-Score marcan los umbrales de la estrategia AHS.

💼 Historial de trades

#Apertura (UTC)Régimen EntradaSalidaSize $ SLTP1Razón salida PnL $PnL %Dur (h)Estado

📡 Señales recientes (últimas 30)

Fecha (UTC)RégimenTipo PrecioZ-ScoreRSI EMA50EMA200ATRTrade?

🎯 Estrategia AHS — cómo funciona

AHS es una estrategia mean-reversion con filtro de régimen: opera reversiones en mercado alcista y queda en standby en bajistas. Cada vela cerrada de 4 horas el bot evalúa si hay condiciones para abrir, y revisa si las posiciones abiertas deben cerrarse por TP1, TP2 o Stop Loss.

1. Filtro de régimen

2. Condiciones de entrada BUY (todas deben cumplirse)

3. Sizing y gestión de riesgo

4. Salidas (Take Profit doble)

5. Parámetros activos actualmente

⚙️ Arquitectura de workflows

El sistema corre 2 workflows productivos en n8n + 1 readonly para este dashboard:

Trading Bot — flujo de 21 nodos

┌───────────────┐   GET 200 velas 4h
│ Cron 4h       ├─▶ Kraken OHLCV ─▶ Calcular Indicadores ─▶ Evaluar Señal
└───────────────┘   (XBTUSD 240m)   (EMA50/200, RSI, ATR, Z-Score)   │
                                                                      ▼
                                                            ┌───── ¿Señal BUY? ─────┐
                                                            ▼ TRUE                  ▼ FALSE
                                                  GET Wallet                INSERT signal
                                                  Calcular Sizing           (NO_SIGNAL/STANDBY)
                                                  INSERT signal BUY                 │
                                                  INSERT trade abierto              ▼
                                                  UPDATE wallet (reserva) ─▶ GET posiciones abiertas
                                                  Telegram: nueva pos              │
                                                            └────────────┬─────────┘
                                                                         ▼
                                                              Revisar vs precio actual
                                                                         │
                                                              ¿Cierre? (SL / TP1 / TP2)
                                                                         │
                                                                         ▼ si cierre
                                                              UPDATE trade · UPDATE wallet
                                                              Telegram: cierre

Daily Analysis (Gemini/Claude) — fallando

Workflow secundario que cada día a las 09:00 UTC envía un resumen AI al Telegram. Lleva 5 días con error en el Code node Construir Contexto AI: referencia a GET Métricas Hoy en una rama que aún no ejecutó. No afecta al trading; sólo se pierde el reporte diario.

🗄️ Schema de la base de datos

4 tablas en PostgreSQL trading_bot dentro del contenedor postgres-t8sw4kggs0gg8cc840k8gk0g.

trades

  • id, created_at, pair, mode
  • regime, entry_price, exit_price
  • position_size_usd, stop_loss, tp1
  • tp1_hit, tp1_hit_at, tp1_exit_price
  • tp1_size_usd, remaining_size_usd
  • trailing_stop, exit_reason
  • pnl_usd, pnl_pct, trade_duration_hours
  • z_score_entry, rsi_entry, atr_entry
  • ema50_entry, ema200_entry
  • status (open/partial/closed)

signals

  • id, detected_at, pair
  • price, z_score, rsi, atr
  • ema50, ema200, regime
  • signal_type (BUY / STANDBY / NO_SIGNAL)
  • trade_opened (bool)
  • trade_id (FK → trades)

paper_wallet

  • id, updated_at
  • balance_usd, initial_balance
  • total_trades, winning_trades, losing_trades
  • total_pnl_usd, peak_balance
  • max_drawdown_pct, current_drawdown_pct

strategy_params

  • id, updated_at
  • z_score_threshold, rsi_threshold
  • atr_sl_multiplier, atr_tp1_multiplier
  • ema_short, ema_long
  • risk_per_trade_pct, tp1_close_pct
  • change_reason, approved_by

✅ Pruebas de funcionamiento — cómo verificarlo tú mismo

1. Datos en vivo desde n8n

El dashboard llama al webhook GET https://n8n.gusmes.com/webhook/trading-bot/data. Puedes pegar esa URL en otra pestaña y ver el JSON crudo.

Última carga:

2. Conexión real a PostgreSQL

Comando que reproduce los mismos números desde el VPS:

docker exec postgres-t8sw4kggs0gg8cc840k8gk0g \
  psql -U postgres -d trading_bot \
  -c "SELECT balance_usd, total_trades, winning_trades, total_pnl_usd FROM paper_wallet;"

3. Workflow Trading Bot ejecutándose cada 4h

Las últimas ejecuciones exitosas del bot principal (link al log de cada una):

Próximo disparo del cron:

4. Precio actual de Kraken (fuente de datos del bot)

El bot lee la misma URL pública sin autenticación:

curl -s "https://api.kraken.com/0/public/Ticker?pair=XBTUSD" | jq '.result'

5. Auditoría de movimientos en wallet (cada trade dejó huella)

docker exec postgres-t8sw4kggs0gg8cc840k8gk0g \
  psql -U postgres -d trading_bot \
  -c "SELECT id, entry_price, exit_price, position_size_usd, exit_reason, pnl_usd, status FROM trades ORDER BY id;"

6. Verificar que es 100% read-only

El workflow del dashboard sólo ejecuta SELECT y un json_build_object. No tiene INSERT, UPDATE, DELETE. Inspecciona el código en n8n.gusmes.com/workflow/PAvKiTp0DivnsZyv.