FastQuant.TimeSeries.IndexOf C# (CSharp) Méthode

IndexOf() public méthode

public IndexOf ( System.DateTime dateTime, SearchOption option = SearchOption.ExactFirst ) : int
dateTime System.DateTime
option SearchOption
Résultat int
        public int IndexOf(DateTime dateTime, SearchOption option = SearchOption.ExactFirst)
        {
            int num = (int)this.series.Count - 1;
            if (dateTime == this.GetDateTime(num))
            {
                return num;
            }
            num = 0;
            int num2 = 0;
            int num3 = (int)this.series.Count - 1;
            bool flag = true;
            while (flag)
            {
                if (num3 < num2)
                {
                    return -1;
                }
                num = (num2 + num3) / 2;
                switch (option)
                {
                    case SearchOption.Next:
                        if (this.series[(long)num].DateTime >= dateTime && (num == 0 || this.series[(long)(num - 1)].DateTime < dateTime))
                        {
                            flag = false;
                        }
                        else if (this.series[(long)num].DateTime < dateTime)
                        {
                            num2 = num + 1;
                        }
                        else
                        {
                            num3 = num - 1;
                        }
                        break;
                    case SearchOption.Prev:
                        if (this.series[(long)num].DateTime <= dateTime && ((long)num == this.series.Count - 1L || this.series[(long)(num + 1)].DateTime > dateTime))
                        {
                            flag = false;
                        }
                        else if (this.series[(long)num].DateTime > dateTime)
                        {
                            num3 = num - 1;
                        }
                        else
                        {
                            num2 = num + 1;
                        }
                        break;
                    case SearchOption.ExactFirst:
                        if (this.series[(long)num].DateTime == dateTime)
                        {
                            flag = false;
                        }
                        else if (this.series[(long)num].DateTime > dateTime)
                        {
                            num3 = num - 1;
                        }
                        else if (this.series[(long)num].DateTime < dateTime)
                        {
                            num2 = num + 1;
                        }
                        break;
                }
            }
            return num;
        }

Usage Example

 public Cross Crosses(TimeSeries series, DateTime dateTime)
 {
     var num = IndexOf(dateTime);
     var num2 = series.IndexOf(dateTime);
     if (num <= 0 || num >= this.series.Count)
     {
         return Cross.None;
     }
     if (num2 > 0 && num2 < series.Count)
     {
         DateTime dateTime2 = GetDateTime(num - 1);
         DateTime dateTime3 = series.GetDateTime(num2 - 1);
         if (dateTime2 == dateTime3)
         {
             if (this.GetValue(num - 1) <= series.GetValue(num2 - 1) && this.GetValue(num) > series.GetValue(num2))
             {
                 return Cross.Above;
             }
             if (this.GetValue(num - 1) >= series.GetValue(num2 - 1) && this.GetValue(num) < series.GetValue(num2))
             {
                 return Cross.Below;
             }
         }
         else
         {
             double value;
             double value2;
             if (dateTime2 < dateTime3)
             {
                 DateTime dateTime4 = this.GetDateTime(num - 1);
                 value = this.GetValue(num - 1);
                 if (series.IndexOf(dateTime4, SearchOption.Next) != num2)
                 {
                     value2 = series.GetValue(series.IndexOf(dateTime4, SearchOption.Next));
                 }
                 else
                 {
                     value2 = series.GetValue(series.IndexOf(dateTime4, SearchOption.Prev));
                 }
             }
             else
             {
                 DateTime dateTime5 = series.GetDateTime(num2 - 1);
                 value2 = series.GetValue(num2 - 1);
                 if (this.IndexOf(dateTime5, SearchOption.Prev) != num)
                 {
                     value = this.GetValue(this.IndexOf(dateTime5, SearchOption.Next));
                 }
                 else
                 {
                     value = this.GetValue(this.IndexOf(dateTime5, SearchOption.Prev));
                 }
             }
             if (value <= value2 && this.GetValue(num) > series.GetValue(num2))
             {
                 return Cross.Above;
             }
             if (value >= value2 && this.GetValue(num) < series.GetValue(num2))
             {
                 return Cross.Below;
             }
         }
         return Cross.None;
     }
     return Cross.None;
 }
All Usage Examples Of FastQuant.TimeSeries::IndexOf