I'm developping a simple MA crossover indicator.
After few hours asking AI and reading NT8 doc I seeking for help here as Im to the point that my NinjaTrader is broken and my code fine as it is...
I got the Errors as screenshoted : "The name 'Draw' does not exist in the current context. Same for Brushes
Yet i'm using : using NinjaTrader.Gui.Tools;
Thanks for your help.
#region Using declarations
using System;
using System.ComponentModel;
using System.ComponentModel.DataAnnotations;
using NinjaTrader.Cbi;
using NinjaTrader.NinjaScript;
using NinjaTrader.Data;
using NinjaTrader.Gui;
using NinjaTrader.Gui.Tools;
using NinjaTrader.Gui.Chart;
#endregion
namespace NinjaTrader.NinjaScript.Indicators
{
public class MMECroisementLigne : Indicator
{
private EMA emaRapide;
private EMA emaLente;
[NinjaScriptProperty]
[Range(1, int.MaxValue)]
[Display(Name = "Période EMA Rapide", GroupName = "Paramètres", Order = 1)]
public int PeriodeRapide { get; set; } = 50;
[NinjaScriptProperty]
[Range(1, int.MaxValue)]
[Display(Name = "Période EMA Lente", GroupName = "Paramètres", Order = 2)]
public int PeriodeLente { get; set; } = 100;
protected override void OnStateChange()
{
if (State == State.SetDefaults)
{
Description = "Affiche une ligne verticale lors des croisements EMA (sans afficher les EMAs).";
Name = "MMECroisementLigne";
Calculate = Calculate.OnBarClose;
IsOverlay = true;
}
else if (State == State.DataLoaded)
{
emaRapide = EMA(PeriodeRapide);
emaLente = EMA(PeriodeLente);
}
}
protected override void OnBarUpdate()
{
if (CurrentBar < 2)
return;
// Croisement haussier
if (emaRapide[0] > emaLente[0] && emaRapide[1] <= emaLente[1])
{
Draw.Dot(this, "CrossUp" + CurrentBar, 0, Brushes.Lime, DashStyleHelper.Solid, 2);
}
// Croisement baissier
else if (emaRapide[0] < emaLente[0] && emaRapide[1] >= emaLente[1])
{
Draw.Dot(this, "CrossDown" + CurrentBar, 0, Brushes.Red, DashStyleHelper.Solid, 2);
}
}
}
}
#region NinjaScript generated code. Neither change nor remove.
namespace NinjaTrader.NinjaScript.Indicators
{
public partial class Indicator : NinjaTrader.Gui.NinjaScript.IndicatorRenderBase
{
private MMECroisementLigne[] cacheMMECroisementLigne;
public MMECroisementLigne MMECroisementLigne(int periodeRapide, int periodeLente)
{
return MMECroisementLigne(Input, periodeRapide, periodeLente);
}
public MMECroisementLigne MMECroisementLigne(ISeries<double> input, int periodeRapide, int periodeLente)
{
if (cacheMMECroisementLigne != null)
for (int idx = 0; idx < cacheMMECroisementLigne.Length; idx++)
if (cacheMMECroisementLigne[idx] != null && cacheMMECroisementLigne[idx].PeriodeRapide == periodeRapide && cacheMMECroisementLigne[idx].PeriodeLente == periodeLente && cacheMMECroisementLigne[idx].EqualsInput(input))
return cacheMMECroisementLigne[idx];
return CacheIndicator<MMECroisementLigne>(new MMECroisementLigne(){ PeriodeRapide = periodeRapide, PeriodeLente = periodeLente }, input, ref cacheMMECroisementLigne);
}
}
}
namespace NinjaTrader.NinjaScript.MarketAnalyzerColumns
{
public partial class MarketAnalyzerColumn : MarketAnalyzerColumnBase
{
public Indicators.MMECroisementLigne MMECroisementLigne(int periodeRapide, int periodeLente)
{
return indicator.MMECroisementLigne(Input, periodeRapide, periodeLente);
}
public Indicators.MMECroisementLigne MMECroisementLigne(ISeries<double> input , int periodeRapide, int periodeLente)
{
return indicator.MMECroisementLigne(input, periodeRapide, periodeLente);
}
}
}
namespace NinjaTrader.NinjaScript.Strategies
{
public partial class Strategy : NinjaTrader.Gui.NinjaScript.StrategyRenderBase
{
public Indicators.MMECroisementLigne MMECroisementLigne(int periodeRapide, int periodeLente)
{
return indicator.MMECroisementLigne(Input, periodeRapide, periodeLente);
}
public Indicators.MMECroisementLigne MMECroisementLigne(ISeries<double> input , int periodeRapide, int periodeLente)
{
return indicator.MMECroisementLigne(input, periodeRapide, periodeLente);
}
}
}
#endregion

Comment