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
PlantillaC#NT8Futuros

Plantilla de rango de apertura

Es la base desde la que construí MNQ Opening Drive, sin el filtro que la hace rentable. Te ahorra la parte aburrida —husos horarios, cálculo del rango, gestión del ciclo de vida de las órdenes— para que dediques el tiempo a lo único que importa: tu criterio de entrada.

No conectes esto a una cuenta con dinero

Está incompleto a propósito: le falta gestión de riesgo, control de errores y filtros, porque su objetivo es que entiendas un concepto aislado. Si lo ejecutas tal cual en real, perderás dinero — y no será culpa del concepto.

Qué vas a aprender

  • Definir una ventana de sesión sin que el huso horario del bróker la rompa
  • Calcular el rango de apertura y armar un bracket con stop estructural
  • Separar la lógica de señal de la de ejecución para poder probarla aparte

Un vistazo al código

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

OpeningRangeTemplate.csC#
1// La sesión se define en hora del INSTRUMENTO, no en la del PC.
2// Es el error que más veces he visto: funciona en backtest y falla
3// en vivo porque el bróker publica en otro huso.
4private bool EnVentanaApertura()
5{
6 var horaBar = Times[0][0].TimeOfDay;
7 return horaBar >= InicioSesion && horaBar < InicioSesion.Add(DuracionRango);
8}
9
10protected override void OnBarUpdate()
11{
12 if (CurrentBar < BarsRequiredToTrade) return;
13
14 if (EnVentanaApertura())
15 {
16 rangoAlto = Math.Max(rangoAlto, High[0]);
17 rangoBajo = Math.Min(rangoBajo, Low[0]);
18 return; // durante el rango solo se observa
19 }
20
21 // ─── Aquí va TU criterio ───────────────────────────────
22 // La plantilla rompe por precio a secas, que es justo lo que NO
23 // funciona sin filtro. Sustitúyelo por el tuyo.
24 if (Close[0] > rangoAlto && Position.MarketPosition == MarketPosition.Flat)
25 EntrarLargo();
26}

Contenido

OpeningRangeTemplate.cs286 líneas
README.md124 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