CY
ATR Multi TimeFrame Issue
22 Jan 2019, 04:38
Good Evening, I was trying to create a multi timeframe atr but i encountered some difficulties:
using System;
using cAlgo.API;
using cAlgo.API.Internals;
using cAlgo.API.Indicators;
using cAlgo.Indicators;
namespace cAlgo
{
[Indicator(IsOverlay = false, TimeZone = TimeZones.UTC, AccessRights = AccessRights.None)]
public class ATRMTF : Indicator
{
[Parameter()]
public int per { get; set; }
[Parameter()]
public TimeFrame tf { get; set; }
[Output("Main")]
public IndicatorDataSeries Result { get; set; }
public MarketSeries series;
public IndicatorDataSeries tr, ema;
protected override void Initialize()
{
tr = CreateDataSeries();
ema = Indicators.ExponentialMovingAverage(tr, per);
series = MarketData.GetSeries(tf);
}
public override void Calculate(int index)
{
var index1 = series.OpenTime.GetIndexByExactTime(MarketSeries.OpenTime[index]);
tr[index1] = series.High[index1] - series.Low[index1];
Result[index] = ema.Result[index1];
}
}
}
i tought this was the right piece of code to do it, but when i change timeframe it only produces nan values.
is there a way to do it? i would really appreciate it since a lot of my algos use mtf ATR and I'm in a little bit of trouble with this.
Thanks in advance

PanagiotisCharalampous
22 Jan 2019, 10:17
Hi cysecsbin.01,
Here it is
using System; using cAlgo.API; using cAlgo.API.Internals; using cAlgo.API.Indicators; using cAlgo.Indicators; namespace cAlgo { [Indicator(IsOverlay = false, TimeZone = TimeZones.UTC, AccessRights = AccessRights.None)] public class ATRMTF : Indicator { [Parameter()] public int per { get; set; } [Parameter()] public TimeFrame tf { get; set; } [Output("Main")] public IndicatorDataSeries Result { get; set; } AverageTrueRange atr; MarketSeries series; protected override void Initialize() { series = MarketData.GetSeries(tf); atr = Indicators.AverageTrueRange(series, per, MovingAverageType.Exponential); } public override void Calculate(int index) { var index1 = series.OpenTime.GetIndexByExactTime(MarketSeries.OpenTime[index]); if (Result[index - 1] != atr.Result[index1]) Result[index] = atr.Result[index1]; } } }Best Regards,
Panagiotis
@PanagiotisCharalampous