Página 1 de 1
Mogalef Bands para NT8
Publicado: 03 Ago 2024 01:20
por Fercho
Que tal X, adjunto mi versión para NT8, vaya banda de Mogalef que hemos armado en el foro
NT8 > New > NinjaScript Editor > New Indicator > Next > Name: "MogalefBands" > Generate
Ctrl+E en el archivo de texto adjunto, Ctrl+A y luego Ctrl+V en NT8, y luego F5 para compilar.
Saludos!
Re: Mogalef Bands para NT8
Publicado: 05 Ago 2024 09:55
por X-Trader
Mil gracias por el aporte Fercho!!!
Saludos,
X-Trader
Re: Mogalef Bands para NT8
Publicado: 05 May 2025 12:23
por zapatapriscotrading
hola buenos días, cordial saludo, de antemano gracias por tu aporte. sin embargo, he seguido los pasos que has puesto pero me sale error. te dejo una imagen adjunta, muchas gracias.
Re: Mogalef Bands para NT8
Publicado: 05 May 2025 16:03
por Fercho
Que tal zapata,
Aprovecho tu pregunta para adjuntar una nueva versión del código, mejor optimizada en rendimiento y visualización.
Recuerda primero crear un nuevo indicador en NinjaTrader8 con el nombre exacto: MogalefBands y le das directo a "generate", luego sólo copiar (el código que presento abajo), pegar en la ventana del nuevo indicador que has creado en NT8 (recuerda antes de seleccionar todo con un control+A), le das a la tecla F5 para compilar, et voilà...
Código: Seleccionar todo
#region Using declarations
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.ComponentModel.DataAnnotations;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Input;
using System.Windows.Media;
using System.Xml.Serialization;
using NinjaTrader.Cbi;
using NinjaTrader.Gui;
using NinjaTrader.Gui.Chart;
using NinjaTrader.Gui.SuperDom;
using NinjaTrader.Gui.Tools;
using NinjaTrader.Data;
using NinjaTrader.NinjaScript;
using NinjaTrader.Core.FloatingPoint;
using NinjaTrader.NinjaScript.DrawingTools;
#endregion
namespace NinjaTrader.NinjaScript.Indicators
{
/// <summary>
/// The Mogalef Bands indicator is a technical analysis tool used to identify potential
/// price reversals and trends in financial markets.
/// The bands expand and contract based on market volatility, providing visual cues for traders.
/// </summary>
public class MogalefBands : Indicator
{
private Series<double> cp;
private LinReg lrg;
private StdDev dev;
protected override void OnStateChange()
{
if (State == State.SetDefaults)
{
Description = @"Mogalef Bands indicator @byFercho v.may25";
Name = "MogalefBands";
Calculate = Calculate.OnEachTick;
IsOverlay = true;
IsSuspendedWhileInactive = true;
ScaleJustification = NinjaTrader.Gui.Chart.ScaleJustification.Right;
BarsRequiredToPlot = 1;
Period = 3;
NumDev = 7;
AddPlot(Brushes.Blue, "Highest band");
AddPlot(Brushes.DodgerBlue, "Higher band");
AddPlot(Brushes.White, "Median line");
AddPlot(Brushes.IndianRed, "Lower band");
AddPlot(Brushes.Red, "Lowest band");
}
else if (State == State.DataLoaded)
{
cp = new Series<double>(this);
lrg = LinReg(cp, Period);
dev = StdDev(lrg , NumDev);
}
}
protected override void OnBarUpdate()
{
cp[0] = (Open[0] + Typical[0] + Close[0])/3;
if (CurrentBar < NumDev - 1)
return;
double lr = lrg[0], dv, lrx;
if (lr > BandLowest[1] && lr < BandHighest[1])
{
lrx = lrg[1];
dv = dev[1];
}
else
{
lrx = lr;
dv = dev[0];
}
BandHighest[0] = lrx + 2*dv;
BandHigher[0] = lrx + dv;
BandLower[0] = lrx - dv;
BandLowest[0] = lrx - 2*dv;
Median[0] = (BandHighest[0] + BandLowest[0])/2;
}
public override string FormatPriceMarker(double price)
{
return price.ToString("N3");
}
#region Properties
[Browsable(false)]
[XmlIgnore()]
public Series<double> BandHighest
{
get { return Values[0]; }
}
[Browsable(false)]
[XmlIgnore()]
public Series<double> BandHigher
{
get { return Values[1]; }
}
[Browsable(false)]
[XmlIgnore()]
public Series<double> Median
{
get { return Values[2]; }
}
[Browsable(false)]
[XmlIgnore()]
public Series<double> BandLower
{
get { return Values[3]; }
}
[Browsable(false)]
[XmlIgnore()]
public Series<double> BandLowest
{
get { return Values[4]; }
}
[Range(2, int.MaxValue), NinjaScriptProperty]
[Display(ResourceType = typeof(Custom.Resource), Name = "LinReg Period", GroupName = "NinjaScriptParameters", Order = 0)]
public int Period
{ get; set; }
[Range(1, int.MaxValue), NinjaScriptProperty]
[Display(ResourceType = typeof(Custom.Resource), Name = "NumDev Period", GroupName = "NinjaScriptParameters", Order = 1)]
public int NumDev
{ get; set; }
#endregion
}
}
Re: Mogalef Bands para NT8
Publicado: 05 May 2025 18:57
por X-Trader
Mil gracias por tu aporte, Fercho!
Saludos,
X-Trader
Re: Mogalef Bands para NT8
Publicado: 05 May 2025 19:48
por Fercho
de nada X, le he dado una vuelta más de tuerca con ayuda de ChatGPT para optimizar el formuleo (algo que la IA sí lo hace de maravilla), ya lo he cargado en la sección de código anterior...
Saludos!
Re: Mogalef Bands para NT8
Publicado: 09 Jun 2025 13:44
por trader-algoritmico
Buenas Fercho, podéis simplemente cambiar el archivo de txt a cs y meterlo en custom -> indicators
Un saludo!
Re: Mogalef Bands para NT8
Publicado: 13 Jun 2025 18:01
por Fercho
Hola Trader-Algorítmico:
mira, si lo que necesitas es organizar el indicador dentro de una carpeta diferente a la de "Indicators" puedes:
1) Cambiar la línea de código por "namespace NinjaTrader.NinjaScript.Indicators.CustomIndicators" o el nombre que quieras, luego cambias la extensión del archivo de TXT a CS.
2) Abres NinjaScript Editor (corrobora que el indicador Mogalef no esté abierto para edición) y creas una carpeta con el nombre "Custom Indicator"... con el botón izq. del mouse lo seleccionas de la lista de indicadores, y lo arrastras hacia tu carpeta nueva.
Saludos !