# Motor1

Motor1 es un analizador de tokens de Solana con un monedero de **paper trading**. No firma transacciones, no almacena claves privadas y no mueve fondos reales.

## Estado de seguridad

El esquema crea el monedero y la estrategia desactivados (`enabled = 0`). Deben validarse con datos controlados antes de habilitarlos. Las claves y contraseñas se suministran exclusivamente mediante variables de entorno.

## Componentes

- `src/analyzer.ts`: agrega operaciones en ventanas de 5 y 10 segundos.
- `src/strategy.ts`: aplica reglas de entrada, stop loss, trailing y graduación.
- `src/virtual-wallet.ts`: registra compras y ventas virtuales mediante transacciones MySQL.
- `src/providers/`: adaptadores para fuentes externas.
- `src/historical/`: snapshots idempotentes de DEXScreener, cola adaptativa y backtest por horizontes.
- `web/`: panel PHP de solo lectura.
- `database/`: esquema nuevo y migración opcional desde `bot3`.
- `deploy/`: unidad systemd y política de logs.

## Instalación local

Requisitos: Node.js 22 o posterior, PHP 8.2 o posterior y MySQL 8.

```bash
cp .env.example .env
npm install
npm run check
npm run build
```

No se debe servir `.env` desde el directorio público. En el servidor, el servicio utiliza `/etc/motor1/motor1.env` y Apache debe apuntar exclusivamente a `/var/www/html/motor1/web`.

## Base de datos

1. Crear una copia de seguridad de `bot3`.
2. Ejecutar `database/schema.sql` con un usuario administrador.
3. Crear un usuario de aplicación limitado a `motor1`.
4. Probar el motor con ambos indicadores `enabled` a cero.
5. Revisar `database/migrate-from-bot3.sql` antes de migrar el histórico cerrado.

Las cinco posiciones abiertas de `bot3` no se migran automáticamente.

## Histórico autorizado

El proveedor gratuito de DEXScreener está limitado internamente a 240 solicitudes por minuto y no requiere credenciales ni dependencias adicionales. El planificador es una API programática desactivada: el arranque principal no lo instancia ni lo inicia y el histórico no consume PumpPortal. `database/schema.sql` solo define las tablas; este cambio no ejecuta migraciones ni activa MySQL, servicios o procesos.

Los snapshots conservan ausencias como `NULL`, son idempotentes por par y fecha de observación, e incluyen el desglose JSON del score. Los backtests evalúan 5m, 15m, 1h, 6h y 24h usando únicamente snapshots cuya fecha no supera el corte declarado por la ejecución.

## Activación

La activación debe hacerse en dos pasos: primero `strategy_config.enabled`, observar decisiones sin compras y, posteriormente, `wallet_config.enabled`. Antes de ello se deben verificar precios, concentración de holders y calidad de los mensajes del proveedor.
