Я пытался создать индикатор ниндзя-трейдера на основе канала Дончиана, но он показывает более 30 ошибок. Значение не в контексте. так что лучше писать код в VS studion, а не в редакторе сценариев ninjatrader.
вот код-
#region Using declarations
using System;
using System.ComponentModel;
using System.ComponentModel.DataAnnotations;
using NinjaTrader.Data;
using NinjaTrader.NinjaScript;
using NinjaTrader.Gui.Tools;
#endregion
// Namespace for the custom indicator
namespace MyCustomIndicator
{
///
/// Donchian Channels with Offset. This version uses the highest high and the lowest low over a period of time, with an optional offset.
///
public class DonchianChannelsWithOffset : Indicator
{
private MAX max; // To calculate the highest high
private MIN min; // To calculate the lowest low
[Range(-100, 100), NinjaScriptProperty]
[Display(Name="Offset", Order=1, GroupName="Parameters")]
public int Offset { get; set; } // Offset for shifting the channels
protected override void OnStateChange()
{
// State.SetDefaults handles the initialization of the indicator's default settings.
if (State == State.SetDefaults)
{
Description = "Donchian Channels with Offset";
Name = "Donchian Channels with Offset";
IsOverlay = true;
IsSuspendedWhileInactive = true;
Period = 20; // Default lookback period of 20
AddPlot(Brushes.Goldenrod, "Mean"); // Midline plot
AddPlot(Brushes.DodgerBlue, "Upper"); // Upper plot
AddPlot(Brushes.DodgerBlue, "Lower"); // Lower plot
}
else if (State == State.DataLoaded)
{
// Once data is loaded, initialize the MAX and MIN indicators
max = MAX(High, Period);
min = MIN(Low, Period);
}
}
protected override void OnBarUpdate()
{
// Ensure enough bars have loaded
if (CurrentBar < Period)
return;
// Calculate the upper, lower, and midline
double upperVal = max[0];
double lowerVal = min[0];
double midlineVal = (upperVal + lowerVal) / 2;
// Apply the offset, shifting the values by 'Offset' bars
if (Offset != 0)
{
int shiftedBar = Math.Max(0, CurrentBar - Offset);
Values[1][0] = max[shiftedBar]; // Upper channel
Values[2][0] = min[shiftedBar]; // Lower channel
Values[0][0] = (Values[1][0] + Values[2][0]) / 2; // Mean (midline)
}
else
{
Values[1][0] = upperVal; // Upper channel
Values[2][0] = lowerVal; // Lower channel
Values[0][0] = midlineVal; // Mean (midline)
}
}
#region Properties
[Browsable(false)]
[XmlIgnore()]
public Series Upper
{
get { return Values[1]; }
}
[Browsable(false)]
[XmlIgnore()]
public Series Lower
{
get { return Values[2]; }
}
[Browsable(false)]
[XmlIgnore()]
public Series Mean
{
get { return Values[0]; }
}
[Range(1, int.MaxValue), NinjaScriptProperty]
[Display(Name="Period", Order=2, GroupName="Parameters")]
public int Period { get; set; }
#endregion
}
}
#region NinjaScript generated code. Neither change nor remove.
namespace MyCustomIndicator
{
public partial class Indicator : NinjaTrader.Gui.NinjaScript.IndicatorRenderBase
{
private DonchianChannelsWithOffset[] cacheDonchianChannelsWithOffset;
public DonchianChannelsWithOffset DonchianChannelsWithOffset(int period, int offset)
{
return DonchianChannelsWithOffset(Input, period, offset);
}
public DonchianChannelsWithOffset DonchianChannelsWithOffset(ISeries input, int period, int offset)
{
if (cacheDonchianChannelsWithOffset != null)
for (int idx = 0; idx < cacheDonchianChannelsWithOffset.Length; idx++)
if (cacheDonchianChannelsWithOffset[idx] != null &&
cacheDonchianChannelsWithOffset[idx].Period == period && cacheDonchianChannelsWithOffset[idx].Offset
== offset && cacheDonchianChannelsWithOffset[idx].EqualsInput(input))
return cacheDonchianChannelsWithOffset[idx];
return CacheIndicator(new DonchianChannelsWithOffset() { Period =
period, Offset = offset }, input, ref cacheDonchianChannelsWithOffset);
}
}
}
#endregion
Так почему он показывает, что код, а также показывает, что пространство имен недействительно?
Мне нужен кто-то, кто сможет исправить этот код от ошибок, чтобы я мог запустить этот код и посмотрите, как он работает.
Я пытался создать индикатор ниндзя-трейдера на основе канала Дончиана, но он показывает более 30 ошибок. Значение не в контексте. так что лучше писать код в VS studion, а не в редакторе сценариев ninjatrader. вот код- [code]#region Using declarations using System; using System.ComponentModel; using System.ComponentModel.DataAnnotations; using NinjaTrader.Data; using NinjaTrader.NinjaScript; using NinjaTrader.Gui.Tools; #endregion
// Namespace for the custom indicator namespace MyCustomIndicator { /// /// Donchian Channels with Offset. This version uses the highest high and the lowest low over a period of time, with an optional offset. /// public class DonchianChannelsWithOffset : Indicator { private MAX max; // To calculate the highest high private MIN min; // To calculate the lowest low
[Range(-100, 100), NinjaScriptProperty] [Display(Name="Offset", Order=1, GroupName="Parameters")] public int Offset { get; set; } // Offset for shifting the channels
protected override void OnStateChange() { // State.SetDefaults handles the initialization of the indicator's default settings. if (State == State.SetDefaults) { Description = "Donchian Channels with Offset"; Name = "Donchian Channels with Offset"; IsOverlay = true; IsSuspendedWhileInactive = true; Period = 20; // Default lookback period of 20
AddPlot(Brushes.Goldenrod, "Mean"); // Midline plot AddPlot(Brushes.DodgerBlue, "Upper"); // Upper plot AddPlot(Brushes.DodgerBlue, "Lower"); // Lower plot } else if (State == State.DataLoaded) { // Once data is loaded, initialize the MAX and MIN indicators max = MAX(High, Period); min = MIN(Low, Period); } }
protected override void OnBarUpdate() { // Ensure enough bars have loaded if (CurrentBar < Period) return;
// Apply the offset, shifting the values by 'Offset' bars if (Offset != 0) { int shiftedBar = Math.Max(0, CurrentBar - Offset); Values[1][0] = max[shiftedBar]; // Upper channel Values[2][0] = min[shiftedBar]; // Lower channel Values[0][0] = (Values[1][0] + Values[2][0]) / 2; // Mean (midline) } else { Values[1][0] = upperVal; // Upper channel Values[2][0] = lowerVal; // Lower channel Values[0][0] = midlineVal; // Mean (midline) } }
#region Properties
[Browsable(false)] [XmlIgnore()] public Series Upper { get { return Values[1]; } }
[Browsable(false)] [XmlIgnore()] public Series Lower { get { return Values[2]; } }
[Browsable(false)] [XmlIgnore()] public Series Mean { get { return Values[0]; } }
[Range(1, int.MaxValue), NinjaScriptProperty] [Display(Name="Period", Order=2, GroupName="Parameters")] public int Period { get; set; }
#endregion } }
#region NinjaScript generated code. Neither change nor remove.
namespace MyCustomIndicator { public partial class Indicator : NinjaTrader.Gui.NinjaScript.IndicatorRenderBase { private DonchianChannelsWithOffset[] cacheDonchianChannelsWithOffset; public DonchianChannelsWithOffset DonchianChannelsWithOffset(int period, int offset) { return DonchianChannelsWithOffset(Input, period, offset); }
public DonchianChannelsWithOffset DonchianChannelsWithOffset(ISeries input, int period, int offset) { if (cacheDonchianChannelsWithOffset != null) for (int idx = 0; idx < cacheDonchianChannelsWithOffset.Length; idx++) if (cacheDonchianChannelsWithOffset[idx] != null && cacheDonchianChannelsWithOffset[idx].Period == period && cacheDonchianChannelsWithOffset[idx].Offset == offset && cacheDonchianChannelsWithOffset[idx].EqualsInput(input)) return cacheDonchianChannelsWithOffset[idx]; return CacheIndicator(new DonchianChannelsWithOffset() { Period = period, Offset = offset }, input, ref cacheDonchianChannelsWithOffset); } } }
#endregion [/code] Так почему он показывает, что код, а также показывает, что пространство имен недействительно? Мне нужен кто-то, кто сможет исправить этот код от ошибок, чтобы я мог запустить этот код и посмотрите, как он работает.
Я пытался создать индикаторного трейдера Ninja на основе канала Donchian, но это показывает, что более 30 ошибок значения не в контексте. Так что лучше кодировать в VS Studion, а не в редакторе сценариев Ninjatrader.
Вот код-
#region Using...
У меня возникла проблема с моим пользовательским индикатором NinjaTrader (MBoxSniperV4) в анализаторе рынка. Предполагается, что индикатор отображает расчетные значения, но вместо этого в столбце Market Analyser отображается «нет данных».
Вот что я...
на этой странице: есть формула для расчета EMA в торговом представлении:
pine_ema(src, length) =>
alpha = 2 / (length + 1)
sum = 0.0
sum := na(sum ) ?
src:
alpha * src + (1 - alpha) * nz(sum )
на этой странице: есть формула для расчета EMA в торговом представлении:
pine_ema(src, length) =>
alpha = 2 / (length + 1)
sum = 0.0
sum := na(sum ) ?
src:
alpha * src + (1 - alpha) * nz(sum )
Я адаптировал его под NT8:
private double CustomEMA(int...
на этой странице: есть формула для расчета EMA в торговом представлении:
pine_ema(src, length) =>
alpha = 2 / (length + 1)
sum = 0.0
sum := na(sum ) ?
src:
alpha * src + (1 - alpha) * nz(sum )
Я адаптировал его под NT8:
private double CustomEMA(int...