Servicio .NET 10 LTS para monitorear mercado cripto, hacer analisis tecnico multi-temporal, revisar noticias/reportes configurables, pedir un resumen opcional a OpenAI, emitir propuestas de entrada/salida y auditar ejecuciones automaticas seguras.
Por defecto ejecuta en modo Paper: simula entradas y salidas y las registra en SQL Server sin mover dinero real. El modo Live existe, pero queda bloqueado hasta configurar llaves de exchange sin retiro, limites y confirmaciones explicitas.
- Consulta velas publicas con proveedores encadenados: Binance, Binance US, Coinbase Exchange, Kraken, Yahoo Finance FX y Alpha Vantage FX opcional.
- Monitorea Crypto y Forex por separado: BTC/ETH/SOL/XRP/ADA y pares como EUR/USD, GBP/USD, USD/JPY, USD/MXN, EUR/MXN, GBP/JPY y EUR/GBP.
- Calcula EMA 9/20/50/200, RSI, MACD, Bollinger Bands, ATR, ADX, VWAP, volumen relativo, soporte y resistencia.
- Evalua coincidencia multi-temporal para LONG o SHORT.
- Lee noticias RSS, reportes macro/regulatorios configurables y clasifica sentimiento basico por palabras clave.
- Usa OpenAI como analista de investigacion opcional para resumir contexto reciente.
- Genera una propuesta con score, zona de entrada, ganancia objetivo, ganancia extra, perdida maxima, razones, riesgos y vigencia.
- Convierte cada propuesta en una instruccion operativa: comprar ahora, vigilar, mantener posicion viva o vender cuando el beneficio neto administrado supere el umbral configurado.
- Remarca solo las oportunidades de alta conviccion: score alto, varias temporalidades, riesgo controlado y poco ruido de riesgos. Ninguna senal se presenta como garantia.
- Calcula cuanto podrias ganar o perder si pusieras el monto configurado en cada oportunidad.
- En modo administrado, lanza alertas de salida cuando el PnL neto despues de comisiones supera el objetivo, por defecto 5%, y el movimiento empieza a perder fuerza o alcanza salida rapida.
- Puede volver al modo clasico de salida por objetivo, stop y vencimiento desactivando
Risk:ManagedProfitExitEnabled. - Evita mandar senales repetidas dentro de una ventana configurable.
- Guarda historial, salidas, salud de fuentes e investigacion en SQL Server local: base
TradingMarket. - Guarda auditoria de ejecucion automatica en
dbo.trade_executions: omitida, bloqueada, simulada, validada o real enviada. - Registra errores y eventos con Serilog en
logs/. - Incluye dashboard web con reportes de trader, fuentes monitoreadas, noticias capturadas, PnL realizado y PnL hipotetico por monto.
Si una fuente falla, el servicio no se apaga: registra el fallo en data_sources y sigue con los demas proveedores disponibles.
El sistema genera y clasifica cada señal con un OriginKind (Propias, Ajenas, Traders), visible en /aprendizaje-ia:
- Propias: el motor principal (
TradingSignalEngine) con analisis tecnico multi-temporal, mas un ciclo de auto-aprendizaje (MarketMonitorWorker.EvaluateLearningAsync) que revisa el historial cerrado por simbolo/lado/horizonte y sube o baja la confianza de señales parecidas segun el resultado real. Evoluciona con cada cierre: entre mas datos reales acumula, mas ajusta el puntaje. - Ajenas: un ensemble independiente (
ExternalAiSignalEngine) de tres estrategias publicas y conocidas -Ichimoku Kinko Hyo, un canal de volatilidad estilo Supertrend, y reversion a la media con Bandas de Bollinger- que corre en paralelo al motor propio y solo publica señal cuando al menos 2 de los 3 modelos coinciden. Esto reproduce el tipo de señal que muchos productos comerciales de "IA de trading" generan, sin necesitar copiar o hacer ingenieria inversa de ningun modelo propietario especifico (no es factible ni verificable hacerlo de forma automatica, y probablemente violaria los terminos de servicio de esos productos). - Traders: sigue posiciones reales, actualmente abiertas, de los traders mejor rankeados por ROI en el leaderboard publico de Binance Futures (
BinanceLeaderboardTraderSignalProvider), usando los mismos endpoints publicos y sin autenticacion que usa el sitio web de Binance. Es un endpoint no documentado/no oficial que puede cambiar sin aviso; si falla, el sistema simplemente sigue sin señales de traders en ese ciclo.
Activa o desactiva cada fuente en configuracion:
TradingMonitor:ExternalAiSignalsEnabled(Ajenas).TraderSignals:Enabled/TraderSignals:BinanceLeaderboardEnabled(Traders).- El aprendizaje Propio siempre esta activo; es parte del ciclo principal del Worker.
/wallet guarda capital y posiciones por mercado (crypto/forex). Cuando AutoTradingEnabled esta activo (global y por simbolo), el Worker ejecuta automaticamente las señales que pasan todos los filtros de riesgo:
- En modo
Paper(por defecto), cada entrada y salida debita/acredita el wallet de forma atomica (IWalletRepository.ApplyFillAsync), asi que el capital disponible refleja posiciones reales simuladas, no un numero estatico editado a mano. - En modo
Live/Testpara cripto,SafeTradeExecutionServicevalida saldo real en Binance antes de comprar, respetaKillSwitchEnabled,MaxOpenPositionsyMaxDailyNotional, y exige la variable de entornoTRADING_MONITOR_LIVE_CONFIRM=I_ACCEPT_LIVE_RISKademas deAllowLiveOrders=trueyUseTestOrderEndpoint=false. - Forex real todavia no tiene un broker conectado (se necesitaria integrar OANDA, Interactive Brokers u otro con sus propias llaves); mientras tanto Forex se mantiene siempre en modo Paper aunque
ExchangeExecution:Modeeste en Live/Test, para no intentar mandar ordenes que ningun bróker real va a recibir.
/aprendizaje-ia: comparativa lado a lado de Propias/Ajenas/Traders con win rate, señales totales, neto realizado, mejor/peor simbolo y "lo que aprendio" cada fuente./reportes?VistaReporte=propio|ia|tradersy/cartera?VistaSimulador=propio|ia|traders: detalle y simulacion de portafolio por fuente (ya existian; ahora "ia" y "traders" tienen datos reales deExternalAiSignalEngineyBinanceLeaderboardTraderSignalProvider).- Email y Telegram (
Notifications:Email,Notifications:Telegram) avisan cada entrada y salida con simbolo, score, precios, ganancia/perdida y motivo; configura los secretos viaPasswordEnvironmentVariable/BotTokenEnvironmentVariable(variables de entorno), igual que Binance/OpenAI.
dotnet run --project src/Trading.Monitor.Workerdotnet run --project src/Trading.Monitor.Web --urls http://localhost:5088Luego abre:
http://localhost:5088
La forma mas comoda de correr todo junto es Docker Compose. Esto levanta:
trading-monitor-web: dashboard web enhttp://localhost:5088.trading-monitor-worker: monitor automatico 24/7.trading-monitor-sqlserver: SQL Server local para SSMS enlocalhost,14333../logs/weby./logs/worker: registros Serilog.
Primero puedes crear tu archivo de variables:
Copy-Item .env.example .envReemplaza SQLSERVER_SA_PASSWORD en .env por una contrasena local fuerte antes de iniciar Compose. La solucion no incorpora una contrasena predeterminada.
Si tu antivirus o proxy inspecciona HTTPS y Docker muestra errores de certificado, copia docker-compose.override.example.yml a docker-compose.override.yml y define LOCAL_CA_CERT_PATH con la ruta a su certificado raiz PEM. El override y el certificado local deben permanecer fuera de Git.
Tu llave real de OpenAI debe vivir en .env.local como OPENAI_API_KEY=.... Ese archivo esta ignorado por Git y Docker Compose lo pasa al contenedor del worker sin copiarlo dentro de la imagen.
Para SSMS con Docker:
Servidor: localhost,14333
Autenticacion: SQL Server Authentication
Usuario: sa
Password: valor de SQLSERVER_SA_PASSWORD
Base: TradingMarket
Para SSMS con tu SQL Server local instalado:
Servidor: localhost
Autenticacion: Windows Authentication
Base: TradingMarket
Si levantas la app con Docker, los datos vivos quedan primero en localhost,14333. Para copiarlos a la base localhost que ya ves con Windows Authentication en SSMS:
.\scripts\Sync-TradingMarketToLocalSql.ps1Ese script crea las tablas faltantes en TradingMarket, limpia la copia local y trae oportunidades, fuentes, eventos, noticias y traders desde la base de Docker.
Luego construye y levanta los servicios:
docker compose up --build -dAbre el dashboard:
http://localhost:5088
Paginas principales:
http://localhost:5088/: resumen ejecutivo.http://localhost:5088/acciones: entradas, salidas, ganancia objetivo, perdida maxima y calculos por monto.http://localhost:5088/acciones?Mercado=forex: operaciones Forex vivas.http://localhost:5088/posiciones?Mercado=forex: seguimiento Forex sin salida fija.http://localhost:5088/api/operaciones-vivas?capital=1000: JSON del tablero vivo.http://localhost:5088/api/grafico-vivo?symbol=BTCUSDT&interval=1m&capital=1000: velas 1m y niveles de entrada, ganancia y perdida maxima.http://localhost:5088/api/grafico-vivo?mercado=forex&symbol=EURUSD&interval=1m&capital=1000: velas Forex y lectura viva.http://localhost:5088/api/exchange/status: estado seguro de integracion con exchange.http://localhost:5088/reportes: reportes por simbolo, dia, win rate y PnL.http://localhost:5088/conexiones: salud de exchanges, noticias, reportes e IA.http://localhost:5088/logs: visor local de logs Serilog.
Ver logs:
docker compose logs -f worker
docker compose logs -f webApagar:
docker compose downReconstruir despues de cambios:
docker compose build --no-cache
docker compose up -dLa base queda en SQL Server:
Database: TradingMarket
SSMS Docker: localhost,14333
SSMS local Windows Auth: localhost
Para una prueba de una sola pasada:
$env:DOTNET_ENVIRONMENT="Development"
dotnet run --project src/Trading.Monitor.WorkerEdita src/Trading.Monitor.Worker/appsettings.json o crea src/Trading.Monitor.Worker/appsettings.Local.json con tus valores privados.
Campos importantes:
TradingMonitor:Symbols: pares a monitorear, por ejemploBTCUSDT,ETHUSDT,EURUSD,USDMXN.TradingMonitor:Intervals: temporalidades a evaluar.TradingMonitor:MinimumScore: puntuacion minima para lanzar alerta.TradingMonitor:EvaluationIntervalSeconds: frecuencia de escaneo.MarketSources:*Enabled: activa o desactiva Binance, Binance US, Coinbase, Kraken, Yahoo Finance FX y Alpha Vantage FX.MarketSources:*BaseUrl: URLs base de cada proveedor de mercado.MarketSources:TimeoutSeconds: limite por solicitud de mercado.Risk:ManagedProfitExitEnabled: mantiene operaciones vivas y cierra por beneficio neto administrado.Risk:ManagedProfitExitPercentAfterCosts: beneficio neto minimo para mandar alerta de venta; por defecto5.Risk:ManagedQuickProfitExitPercentAfterCosts: salida inmediata si el beneficio neto supera este nivel; por defecto8.Risk:ManagedTrailingGivebackPercent: retroceso desde el pico permitido antes de vender; por defecto0.75.Risk:ManagedHardStopExitEnabled: por defectofalse; si se activa, vuelve a cerrar por perdida maxima.Risk:ManagedExpiryExitEnabled: por defectofalse; si se activa, permite cierre por vencimiento.Reporting:DefaultCapital: monto X usado para calcular cuanto pudiste ganar o perder.Reporting:EstimatedFeePercentPerSide: comision estimada por lado.Database:ConnectionString: conexion SQL Server usada por Entity Framework.News:Feeds: fuentes RSS, reportes y recursos a revisar.ALPHA_VANTAGE_API_KEY: opcional para reforzar Forex con Alpha Vantage. Sin llave, Forex sigue funcionando con Yahoo Finance FX.News:FearGreedEnabled: agrega el indice publico Fear & Greed como contexto de sentimiento.News:CryptoPanicEnabled: activa CryptoPanic si configurasCRYPTOPANIC_AUTH_TOKEN.News:CryptoPanicAuthTokenEnvironmentVariable: nombre de la variable que contiene el token de CryptoPanic.OpenAi:Enabled: activa o desactiva el resumen de investigacion con OpenAI.OpenAi:Model: modelo usado para el resumen de investigacion.OpenAi:MinimumNewsItemsToAnalyze: evita llamar IA si hay pocas noticias utiles.OpenAi:MinimumMinutesBetweenCalls: separacion minima entre llamadas para reducir tokens.OpenAi:OnlyAnalyzeWhenNewsChanged: reutiliza cache cuando el paquete de noticias no cambio.Notifications:Email: SMTP para correo.Notifications:Telegram: bot token y chat id.ExchangeExecution:Enabled:truepor defecto para simular/auditar enPaper.ExchangeExecution:Mode:Paperpor defecto.Testvalida contra Binance sin ejecutar.Livesolo debe usarse con llaves sin retiro, limites yAllowLiveOrders=true.ExchangeExecution:MaxCapitalPerTrade: limite por operacion para la fase live.ExchangeExecution:DailyLossLimit: limite diario de perdida.ExchangeExecution:MinimumScoreToExecute: score minimo para convertir una senal en intento automatico.ExchangeExecution:MinimumExpectedNetProfitPercentAfterCosts: ganancia minima despues de comisiones para permitir una entrada.ExchangeExecution:AllowedSymbols: lista blanca de pares que puede intentar ejecutar.ExchangeExecution:AllowShortSelling: por defectofalse; prioriza compra bajo - vende alto.
Tambien puedes usar variables de entorno:
$env:Notifications__Email__Enabled="true"
$env:Notifications__Email__Host="smtp.gmail.com"
$env:Notifications__Email__Port="587"
$env:Notifications__Email__UserName="tu-correo@gmail.com"
$env:Notifications__Email__Password="tu-app-password"
$env:Notifications__Email__From="tu-correo@gmail.com"
$env:Notifications__Email__To="destino@correo.com"dotnet test- WebSocket de Binance y Coinbase para menor latencia.
- Calendario economico y eventos macro con proveedor dedicado.
- Backtesting por estrategia antes de subir el score minimo.
- Filtros por estrategia, sesion, fuente y regimen de mercado.
- Paper trading con estadisticas de acierto, drawdown y profit factor.
- Conectores adicionales para acciones, opciones o futuros.