void RefineData()
{
// Fill In data gaps
if (Configs.FillInDataGaps)
{
for (int bar = 1; bar < Bars; bar++)
{
aBar[bar].Open = aBar[bar - 1].Close;
if (aBar[bar].Open > aBar[bar].High || aBar[bar].Close > aBar[bar].High)
aBar[bar].High = aBar[bar].Open > aBar[bar].Close ? aBar[bar].Open : aBar[bar].Close;
if (aBar[bar].Open < aBar[bar].Low || aBar[bar].Close < aBar[bar].Low)
aBar[bar].Low = aBar[bar].Open < aBar[bar].Close ? aBar[bar].Open : aBar[bar].Close;
}
}
// Cuts off the bad data
if (Configs.CutBadData)
{
int maxConsecutiveBars = 0;
int maxConsecutiveBar = 0;
int consecutiveBars = 0;
int lastBar = 0;
for (int bar = 0; bar < Bars; bar++)
{
if (Math.Abs(aBar[bar].Open - aBar[bar].Close) < Data.InstrProperties.Point / 2)
{
if (lastBar == bar - 1 || lastBar == 0)
{
consecutiveBars++;
lastBar = bar;
if (consecutiveBars > maxConsecutiveBars)
{
maxConsecutiveBars = consecutiveBars;
maxConsecutiveBar = bar;
}
}
}
else
{
consecutiveBars = 0;
}
}
if (maxConsecutiveBars < 10)
maxConsecutiveBar = 0;
int firstBar = Math.Max(maxConsecutiveBar, 1);
for (int bar = firstBar; bar < Bars; bar++)
if ((Time(bar) - Time(bar - 1)).Days > 5 && period < 10080)
firstBar = bar;
if (firstBar == 1)
firstBar = 0;
if (firstBar > 0)
{
Bar[] aBarCopy = new Bar[bars];
aBar.CopyTo(aBarCopy, 0);
aBar = new Bar[bars - firstBar];
for (int bar = firstBar; bar < bars; bar++)
aBar[bar - firstBar] = aBarCopy[bar];
bars = bars - firstBar;
isCut = true;
}
}
return;
}