certain timeframe bars are not loading up to the current index
Created at 29 Jan 2021, 16:32
certain timeframe bars are not loading up to the current index
29 Jan 2021, 16:32
This program overlays an alternative timeframe bars source onto the chart, the problem is only a certain number of selected timeframes are working correctly i.e, are being drawn up to the last index in the series like this : (chart timeframe = 1h , alternate timeframe = 6h)
But say for (chart timeframe = 1h, alternate timeframe = 4h) it shows up like this:
only when I manually zoom out the chart and more bar history is loaded, the drawings are correct like this :
why is this occurring ?
here's my code:
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 TimeFrame_Candles : Indicator
{
[Parameter("Time Frame", DefaultValue = "TimeFrame.Hour")]
public TimeFrame time_frame { get; set; }
Bars bars_source;
int last_index;
DateTime open_time;
DateTime close_time;
double open;
double close;
double high;
double low;
string color;
int type;
protected override void Initialize()
{
bars_source = MarketData.GetBars(time_frame, SymbolName);
last_index = 0;
}
public override void Calculate(int index)
{
if (index > last_index)
{
var x = bars_source.OpenTimes.GetIndexByTime(bars_source[last_index].OpenTime);
bool index_in_range = indexinrange(x);
if (index_in_range && x != -1)
on_candle_close(x);
else
return;
last_index = index;
}
}
private void on_candle_close(int x)
{
open_time = bars_source[x].OpenTime;
close_time = bars_source[x + 1].OpenTime;
open = bars_source[x].Open;
close = bars_source[x].Close;
high = bars_source[x].High;
low = bars_source[x].Low;
type = close > open ? 1 : close < open ? 0 : 2;
color = type == 1 ? "Green" : type == 0 ? "Red" : "DimGray";
var rect = Chart.DrawRectangle("draw_no" + x.ToString(), open_time, open, close_time, close, color, 3);
rect.IsFilled = false;
Chart.DrawText("text" + x.ToString(), x.ToString(), bars_source[x].OpenTime, bars_source[x].Close, "Black");
}
private bool indexinrange(int index)
{
var last_index = bars_source.Count - 1;
if (index < last_index)
return true;
else if (index >= last_index)
return false;
return false;
}
}
}
thank you
PanagiotisCharalampous
01 Feb 2021, 07:52
Hi hrivven,
Which broker do you use? I tried to reproduce this but the indicator works fine on any timeframe I tried.
Best Regards,
Panagiotis
Join us on Telegram
@PanagiotisCharalampous