void RepairIntrabarData()
{
for (int bar = 0; bar < Data.Bars; bar++)
{
if (Data.IntraBarsPeriods[bar] != Data.Period)
{ // We have intrabar data here
// Repair the Opening prices
double price = Data.Open[bar];
int b = 0;
Data.IntraBarData[bar][b].Open = Data.Open[bar];
if (price > Data.IntraBarData[bar][b].High &&
price > Data.IntraBarData[bar][b].Low)
{ // Adjust the High price
Data.IntraBarData[bar][b].High = price;
}
else if (price < Data.IntraBarData[bar][b].High &&
price < Data.IntraBarData[bar][b].Low)
{ // Adjust the Low price
Data.IntraBarData[bar][b].Low = price;
}
// Repair the Closing prices
price = Data.Close[bar];
b = Data.IntraBarBars[bar] - 1;
Data.IntraBarData[bar][b].Close = Data.Close[bar];
if (price > Data.IntraBarData[bar][b].High &&
price > Data.IntraBarData[bar][b].Low)
{ // Adjust the High price
Data.IntraBarData[bar][b].High = price;
}
else if (price < Data.IntraBarData[bar][b].High &&
price < Data.IntraBarData[bar][b].Low)
{ // Adjust the Low price
Data.IntraBarData[bar][b].Low = price;
}
int iMinIntrabar = -1; // Contains the min price
int iMaxIntrabar = -1; // Contains the max price
double dMinPrice = double.MaxValue;
double dMaxPrice = double.MinValue;
for (b = 0; b < Data.IntraBarBars[bar]; b++)
{ // Find min and max
if (Data.IntraBarData[bar][b].Low < dMinPrice)
{ // Min found
dMinPrice = Data.IntraBarData[bar][b].Low;
iMinIntrabar = b;
}
if (Data.IntraBarData[bar][b].High > dMaxPrice)
{ // Max found
dMaxPrice = Data.IntraBarData[bar][b].High;
iMaxIntrabar = b;
}
if (b > 0)
{ // Repair the Opening prices
price = Data.IntraBarData[bar][b - 1].Close;
Data.IntraBarData[bar][b].Open = price;
if (price > Data.IntraBarData[bar][b].High &&
price > Data.IntraBarData[bar][b].Low)
{ // Adjust the High price
Data.IntraBarData[bar][b].High = price;
}
else if (price < Data.IntraBarData[bar][b].High &&
price < Data.IntraBarData[bar][b].Low)
{ // Adjust the Low price
Data.IntraBarData[bar][b].Low = price;
}
}
}
if (dMinPrice > Data.Low[bar]) // Repair the Bottom
Data.IntraBarData[bar][iMinIntrabar].Low = Data.Low[bar];
if (dMaxPrice < Data.High[bar]) // Repair the Top
Data.IntraBarData[bar][iMaxIntrabar].High = Data.High[bar];
}
}
return;
}