TL;DR: Plataforma de I+D cuant con tres pilares: inteligencia de mercado (whales + news + sentimiento), backtesting modular (Strategy Pattern) y gestión de riesgo basada en reglas.
API en FastAPI (puerto 8000) + front Vanilla liviano (Vite) / SPA opcional. No promete rentabilidad: está hecha para experimentar, validar y mostrar arquitectura.
- Demostrar arquitectura empresarial en sistemas financieros (asíncrono, desacoplado, testeable).
- Explorar si la fusión de señales heterogéneas (whales + news + cuant) crea edge medible.
- Ofrecer una base sólida para backtesting, simulación y, si se desea, integración live (paper/live).
sources/ # scrapers + conectores (whales, news, exchanges)
├─ whales/ # streams/polling de actividad inusual
├─ news/ # fuentes públicas + clasificador simple
backend/ # FastAPI + servicios (market_data, risk, decision_engine)
├─ web/ # app FastAPI (routers, deps, middlewares)
├─ services/ # estrategias, validadores, riesgo, cache
├─ config/ # loaders y settings (.env / yaml)
└─ tests/ # pytest (mocks, fixtures, métricas)
front-v3-vanilla/ # UI ligera (Vite + JS puro) con tests
front-v2-spa/ # (opcional) SPA (React/Vue) con componentes reutilizables
scripts/ # utilidades (arranque, semillas, verificación)
docker/ # compose para DB/API (opcional)
Backend: FastAPI (async) + WebSockets, adapters (ccxt/binance), Strategy Pattern para estrategias pluggable, riesgos y validadores.
Data: PostgreSQL (histórico/auditoría) + caché en memoria (baja latencia).
Front: Vanilla Vite (rápido, portable), SPA opcional si se requiere estado complejo.
class Strategy:
name: str
params: dict
async def generate_signals(self, market_data):
raise NotImplementedError
class RSICrossoverStrategy(Strategy):
def __init__(self, rsi_low=30, rsi_high=70):
self.name = "RSI_Crossover"
self.params = {"rsi_low": rsi_low, "rsi_high": rsi_high}
async def generate_signals(self, market_data):
# ... calcular RSI y puntos de cruce ...
return [{"side": "buy", "confidence": 0.62}]
# Motor de backtesting desacoplado de la estrategia
engine = BacktestEngine()
results = await engine.run_strategy_backtest(RSICrossoverStrategy(), "BTC/USDT", ...)Ventajas
- Extensibilidad real (agregar estrategias sin tocar el motor).
- Métricas y reporting uniformes entre estrategias.
- Escala a ML, multi-timeframe, optimización de hiperparámetros.
- Mantenible: dominio separado de infraestructura/UI.
Estrategias incluidas / previstas: RSI Crossover (base), MA Cross, Bollinger, ML Predictor, Walk-Forward, multi-asset, etc.
- Fear & Greed (indicador externo o proxy propio).
- Whale Activity Monitor (transferencias grandes / flujos).
- News & Sentiment (API pública + clasificación básica).
- Risk Engine: reglas multi-factor con scoring.
- Backtesting modular (costos, slippage, sizing, métricas: Sharpe, MDD, PF, WinRate).
- Simulación (paper) y monitoreo (dashboard).
- API REST + WebSocket docs en
/docs(OpenAPI/Swagger). - Flags MOCK para correr sin APIs reales.
- Tests (pytest) y UI minimal para demo rápida.
Crea backend/.env (o raíz si tu loader lo permite) con estas claves mínimas:
# ===== DATABASE =====
DATABASE_URL=postgresql://tradingbot:supersecretpassword@localhost:5433/tradingbot_db
# ===== BINANCE =====
BINANCE_API_KEY=
BINANCE_API_SECRET=
BINANCE_TESTNET=0
# ===== NEWS PROVIDER =====
NEWS_API_KEY=
# ===== LLM (DEEPSEEK R1) =====
LLM_PROVIDER=deepseek
DEEPSEEK_API_BASE=https://api.deepseek.com/v1
DEEPSEEK_API_KEY=
DEEPSEEK_MODEL=deepseek-reasoner
# ===== APP MODES =====
APP_ENV=production # si no es 'production', el sistema puede activar MOCKs
MOCK_BINANCE=0
MOCK_NEWS=0
MOCK_KB=0Para el front Vanilla (front-v3-vanilla/.env):
VITE_API_BASE_URL=http://127.0.0.1:8000/apiAsegurate de ejecutar
load_dotenv()antes de leer variables.
Usa start_platform.bat (incluido) para levantar todo:
- Verifica Python y dependencias.
- Activa
venvy instalarequirements.txtsi falta. - Levanta FastAPI en http://127.0.0.1:8000.
- (Opcional) abre el front Vanilla si detecta Vite.
Backend
cd backend
python -m venv venv
# Windows: .\venv\Scripts\activate
# Linux/Mac: source venv/bin/activate
pip install -r requirements.txt
uvicorn web.main:app --host 127.0.0.1 --port 8000 --reload # o app.main:app según tu móduloFront Vanilla (recomendado para demo)
cd front-v3-vanilla
npm install
cp .env.example .env # o crea .env con VITE_API_BASE_URL
npm run dev # Vite en http://localhost:5173| Endpoint | Método | Descripción |
|---|---|---|
/api/market-intelligence |
GET | Inteligencia de mercado (FGI, whales, sentimiento) |
/api/backtest |
POST | Ejecuta backtest con payload de estrategia |
/api/news |
GET | Noticias categorizadas |
/api/whale-alerts |
GET | Últimas detecciones de ballenas |
/health |
GET | Estado del sistema |
/docs |
GET | Swagger/OpenAPI |
/trading_platform/
├── backend/
│ ├── web/ # routers, deps, middlewares
│ ├── services/ # estrategias, motor, riesgo
│ ├── config/ # settings y loaders
│ ├── tests/ # pytest
│ └── main.py (opcional) # si usas app.main:app
├── front-v3-vanilla/ # Vite + JS
├── scripts/
│ ├── start_platform.bat
│ └── verify_platform.py # (opcional)
├── docker/
│ └── docker-compose.yml
└── README.md
cd backend
pytest -qFront: unit tests a helpers (Vitest/Jest) y pruebas manuales sobre datos reales/simulados.
docker/docker-compose.yml típico para DB + API:
services:
db:
image: postgres:16
environment:
POSTGRES_USER: tradingbot
POSTGRES_PASSWORD: supersecretpassword
POSTGRES_DB: tradingbot_db
ports: ["5433:5432"]
volumes:
- pgdata:/var/lib/postgresql/data
api:
build: ./backend
env_file: ./backend/.env
ports: ["8000:8000"]
depends_on: [db]
volumes:
pgdata: {}- Proyecto educativo/I+D. No es consejo financiero. Preferir paper trading.
- Nunca comitees secretos; usa
.envy.gitignore. - Respeta términos de servicio y rate‑limits de cada API.
- El scraping debe cumplir políticas de cada sitio.
MIT. Ver LICENSE.
Autor: Juan Pablo Amorosi — GitHub: https://github.com/johnitto9 — LinkedIn: https://www.linkedin.com/in/juan-pablo-amorosi-8b5894193/