23 nuevas estrategias verificadas esta semana8 licencias institucionales disponiblesCertificación Nivel 5 auditada · disponibleComisión del creador del 82% por venta12,400 traders activos en 94 países23 nuevas estrategias verificadas esta semana8 licencias institucionales disponiblesCertificación Nivel 5 auditada · disponibleComisión del creador del 82% por venta12,400 traders activos en 94 países
HerramientaC#NT8Futuros

Risk Guard para NinjaTrader

Lo escribí porque perder una evaluación de fondeo por seguir operando tras tres pérdidas seguidas es el error más caro y más evitable que existe. Vigila el PnL realizado más el flotante cada segundo; al tocar el tope cancela las órdenes vivas, aplana las posiciones y bloquea la cuenta. El bloqueo solo se levanta recargando el add-on, a propósito: si se pudiera desactivar con un clic, no serviría de nada.

Qué vas a aprender

  • Cómo leer PnL realizado y flotante de una cuenta en NinjaScript
  • Cancelar órdenes y aplanar posiciones de forma segura
  • Por qué un bloqueo fácil de desactivar no protege de nada

Un vistazo al código

Un fragmento representativo, para que puedas juzgar el oficio sin descargar nada.

RiskGuard.csC#
1// El PnL de la cuenta = realizado del día + flotante de lo abierto.
2// Mirar solo el realizado es el fallo clásico: te deja seguir
3// hundiéndote mientras la posición abierta sangra.
4private bool TryGetAccountPnL(Account acc, out double total)
5{
6 total = 0;
7 try
8 {
9 double realized = acc.Get(AccountItem.RealizedProfitLoss, Currency.UsDollar);
10 double unrealized = 0;
11
12 foreach (Position pos in acc.Positions.ToList())
13 {
14 if (pos == null || pos.MarketPosition == MarketPosition.Flat) continue;
15
16 double price = GetMarketPrice(pos.Instrument);
17 // Sin precio fiable NO contamos esa posición: es preferible
18 // un tope que no salta a uno que salta por un dato basura.
19 if (price <= 0) continue;
20
21 unrealized += pos.GetUnrealizedProfitLoss(PerformanceUnit.Currency, price);
22 }
23
24 total = realized + unrealized;
25 return true;
26 }
27 catch (Exception ex)
28 {
29 Print("No pude leer el PnL de " + acc.Name + ": " + ex.Message);
30 return false;
31 }
32}

Contenido

RiskGuard.cs412 líneas
README.md88 líneas

Qué puedes hacer con esto

Licencia MIT

Haz lo que quieras, incluso vender lo que construyas encima. Solo tienes que conservar el aviso de autoría.

Uso comercial
Permitido
Citar al autor
Obligatorio
Publicar tus cambios
No obligatorio