I am trying to use this feature to create Heikin-Ashi indicator with custom timeframe as below. The value of haClose in the HeikinAshiClose series looks correct but I am always getting NaN for haOpen. I am not sure if something like below is supported?
using System;
using cAlgo.API;
using cAlgo.API.Internals;
using cAlgo.API.Indicators;
namespace cAlgo
{
[Indicator(IsOverlay = true, TimeZone = TimeZones.UTC, AccessRights = AccessRights.None)]
public class TFHeikinAshiIndicator : Indicator
{
[Parameter("Heikin-Ashi Timeframe")]
public TimeFrame HeikinAshiTimeframe { get; set; }
[Output("Open", Color = Colors.DarkSlateBlue)]
public IndicatorDataSeries HeikinAshiOpen { get; set; }
[Output("Close", Color = Colors.SlateBlue)]
public IndicatorDataSeries HeikinAshiClose { get; set; }
private MarketSeries heikinAshiSeries;
protected override void Initialize()
{
heikinAshiSeries = MarketData.GetSeries(HeikinAshiTimeframe);
}
public override void Calculate(int index)
{
int heikinAshiSeriesIndex = GetIndexByDate(heikinAshiSeries, MarketSeries.OpenTime[index]);
double open = heikinAshiSeries.Open[heikinAshiSeriesIndex];
double high = heikinAshiSeries.High[heikinAshiSeriesIndex];
double low = heikinAshiSeries.Low[heikinAshiSeriesIndex];
double close = heikinAshiSeries.Close[heikinAshiSeriesIndex];
double haClose = (open + high + low + close) / 4;
double haOpen;
if (heikinAshiSeriesIndex != -1)
haOpen = (HeikinAshiOpen[heikinAshiSeriesIndex - 1] + HeikinAshiClose[heikinAshiSeriesIndex - 1]) / 2;
else
haOpen = (open + close) / 2;
ChartObjects.DrawText("ha", string.Format("heikinAshiSeriesIndex={0} haOpen={1}, haClose={2}", heikinAshiSeriesIndex, haOpen, haClose), StaticPosition.TopLeft, Colors.Red);
HeikinAshiOpen[heikinAshiSeriesIndex] = haOpen;
HeikinAshiClose[heikinAshiSeriesIndex] = haClose;
}
private int GetIndexByDate(MarketSeries series, DateTime time)
{
for (int i = series.Close.Count - 1; i > 0; i--)
{
if (time == series.OpenTime[i])
return i;
}
return -1;
}
}
}
zofoyobis
11 Nov 2014, 07:04
I am trying to use this feature to create Heikin-Ashi indicator with custom timeframe as below. The value of haClose in the HeikinAshiClose series looks correct but I am always getting NaN for haOpen. I am not sure if something like below is supported?
using System; using cAlgo.API; using cAlgo.API.Internals; using cAlgo.API.Indicators; namespace cAlgo { [Indicator(IsOverlay = true, TimeZone = TimeZones.UTC, AccessRights = AccessRights.None)] public class TFHeikinAshiIndicator : Indicator { [Parameter("Heikin-Ashi Timeframe")] public TimeFrame HeikinAshiTimeframe { get; set; } [Output("Open", Color = Colors.DarkSlateBlue)] public IndicatorDataSeries HeikinAshiOpen { get; set; } [Output("Close", Color = Colors.SlateBlue)] public IndicatorDataSeries HeikinAshiClose { get; set; } private MarketSeries heikinAshiSeries; protected override void Initialize() { heikinAshiSeries = MarketData.GetSeries(HeikinAshiTimeframe); } public override void Calculate(int index) { int heikinAshiSeriesIndex = GetIndexByDate(heikinAshiSeries, MarketSeries.OpenTime[index]); double open = heikinAshiSeries.Open[heikinAshiSeriesIndex]; double high = heikinAshiSeries.High[heikinAshiSeriesIndex]; double low = heikinAshiSeries.Low[heikinAshiSeriesIndex]; double close = heikinAshiSeries.Close[heikinAshiSeriesIndex]; double haClose = (open + high + low + close) / 4; double haOpen; if (heikinAshiSeriesIndex != -1) haOpen = (HeikinAshiOpen[heikinAshiSeriesIndex - 1] + HeikinAshiClose[heikinAshiSeriesIndex - 1]) / 2; else haOpen = (open + close) / 2; ChartObjects.DrawText("ha", string.Format("heikinAshiSeriesIndex={0} haOpen={1}, haClose={2}", heikinAshiSeriesIndex, haOpen, haClose), StaticPosition.TopLeft, Colors.Red); HeikinAshiOpen[heikinAshiSeriesIndex] = haOpen; HeikinAshiClose[heikinAshiSeriesIndex] = haClose; } private int GetIndexByDate(MarketSeries series, DateTime time) { for (int i = series.Close.Count - 1; i > 0; i--) { if (time == series.OpenTime[i]) return i; } return -1; } } }@zofoyobis