Forex_Strategy_Builder.Scanner.RepairIntrabarData C# (CSharp) Метод

RepairIntrabarData() приватный Метод

Repairs the intrabar data.
private RepairIntrabarData ( ) : void
Результат void
        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;
        }