Reference custom indicator to my Cbot result NaN
Reference custom indicator to my Cbot result NaN
23 Jan 2015, 19:00
hello my custom indicator is this :
using System; using cAlgo.API; using cAlgo.API.Internals; using cAlgo.API.Indicators; namespace cAlgo { [Indicator()] public class HKA : Indicator { public IndicatorDataSeries _haOpen; public IndicatorDataSeries _haClose; public IndicatorDataSeries resultFA; public int CandleWidth = 5; public string UpColor = "Blue"; public string DownColor = "Red"; public Colors _upColor; public Colors _downColor; private bool _incorrectColors; private Random _random = new Random(); private IndicatorDataSeries resta; protected override void Initialize() { _haOpen = CreateDataSeries(); _haClose = CreateDataSeries(); resta = CreateDataSeries(); resultFA = CreateDataSeries(); if (!Enum.TryParse<Colors>(UpColor, out _upColor) || !Enum.TryParse<Colors>(DownColor, out _downColor)) _incorrectColors = true; } public override void Calculate(int index) { if (_incorrectColors) { var errorColor = _random.Next(2) == 0 ? Colors.Red : Colors.White; ChartObjects.DrawText("Error", "Incorrect colors", StaticPosition.Center, errorColor); return; } var open = MarketSeries.Open[index]; var high = MarketSeries.High[index]; var low = MarketSeries.Low[index]; var close = MarketSeries.Close[index]; var haClose = (open + high + low + close) / 4; double haOpen; if (index > 0) haOpen = (_haOpen[index - 1] + _haClose[index - 1]) / 2; else haOpen = (open + close) / 2; var haHigh = Math.Max(Math.Max(high, haOpen), haClose); var haLow = Math.Min(Math.Min(low, haOpen), haClose); var color = haOpen > haClose ? _downColor : _upColor; if (haOpen > haClose) { resta[index] = 2.01; } else { resta[index] = 1.01; } resultFA[index] = resta[index]; ChartObjects.DrawLine("candle" + index, index, haOpen, index, haClose, color, CandleWidth, LineStyle.Solid); ChartObjects.DrawLine("line" + index, index, haHigh, index, haLow, color, 1, LineStyle.Solid); _haOpen[index] = haOpen; _haClose[index] = haClose; } } }
and when I add this lines to my Cbot only see NaN( I referenced this indicator by ctdn guide section :
protected override void OnTick() { Print(_HKA.resultFA.Last(1)); }
after click to + Manage References and add my custom indicator .... using this lines to code for reference :
public class mycbot : Robot { private HKA _HKA;
protected override void OnStart() { _HKA = Indicators.GetIndicator<HKA>(); }
Replies
AndreaDev
23 Feb 2019, 14:11
RE:
Spotware said:
You need to mark resultFA with OutputAttribute.
I do have the same issue but OutputAttribute didn't help this is my cutomIndicator :
using System; using cAlgo.API; using cAlgo.API.Internals; using cAlgo.API.Indicators; using cAlgo.Indicators; namespace cAlgo { [Indicator(IsOverlay = true, TimeZone = TimeZones.UTC, AccessRights = AccessRights.None)] public class CustomIndicator : Indicator { //--- Public [Parameter(DefaultValue = 1, MinValue = 1)] public int Periods { get; set; } [Parameter("MA Type", DefaultValue = MovingAverageType.Simple)] public MovingAverageType MAType { get; set; } [Output("NewOpen ", Color = Colors.Black)] public IndicatorDataSeries NewOpen { get; set; } //--- Private private MovingAverage maOpen; protected override void Initialize() { NewOpen = CreateDataSeries(); maOpen = Indicators.MovingAverage(MarketSeries.Open, Periods, MAType); } public override void Calculate(int index) { //--- My Calculate Value NewOpen[index] = MarketSeries.Open[index]; } } }
Then I'm trying to retrieve the value inside my CustomcBot(I add the indicator in the manager reference as per guide line) :
using System; using System.Linq; using System.Windows.Forms; using cAlgo.API; using cAlgo.API.Indicators; using cAlgo.API.Internals; using cAlgo.Indicators; namespace cAlgo.Robots { [Robot(TimeZone = TimeZones.UTC, AccessRights = AccessRights.None)] public class CustomcBot : Robot { //--- Public [Parameter(DefaultValue = 1, MinValue = 1)] public int Periods { get; set; } [Parameter("MA Type", DefaultValue = MovingAverageType.Simple)] public MovingAverageType MAType { get; set; } private CustomIndicator cIndicator; protected override void OnStart() { cIndicator = Indicators.GetIndicator<CustomIndicator>( Periods, MAType); } protected override void OnTick() { Print("Open {0}", cIndicator.NewOpen); } protected override void OnStop() { // Put your deinitialization logic here } } }
In the log I keep receiving "Open IndicatorDataSeries (Count: 0, LastValue: NaN)", any idea why this is happening?
I'm on ICMarket cTrader v3.2(last one).
@AndreaDev
... Deleted by UFO ...
PanagiotisCharalampous
27 Feb 2019, 09:32
Hi AndreaDev,
Remove the following line from your indicator and it should work fine
NewOpen = CreateDataSeries();
Best Regards,
Panagiotis
@PanagiotisCharalampous
... Deleted by UFO ...
Spotware
10 Feb 2015, 09:27
You need to mark resultFA with OutputAttribute.
@Spotware