상속: Indicator
예제 #1
0
 public override void Calculate(int index)
 {
     if (this.style == IndicatorStyle.QuantStudio)
     {
         double mdm = 0.0;
         double tr  = 0.0;
         if (index >= this.length)
         {
             if (index == this.length)
             {
                 for (int i = index; i >= index - this.length + 1; i--)
                 {
                     tr  += TR.Value(this.input, i);
                     mdm += MDM.Value(this.input, i);
                 }
             }
             else
             {
                 mdm = this.mdmTS[index - 1] - MDM.Value(this.input, index - this.length) +
                       MDM.Value(this.input, index);
                 tr = this.trTS[index - 1] - TR.Value(this.input, index - this.length) +
                      TR.Value(this.input, index);
             }
             if (tr != 0.0)
             {
                 double value = mdm / tr * 100.0;
                 if (!double.IsNaN(value))
                 {
                     Add(this.input.GetDateTime(index), value);
                 }
             }
         }
         this.mdmTS.Add(this.input.GetDateTime(index), mdm);
         this.trTS.Add(this.input.GetDateTime(index), tr);
     }
     else
     {
         double mdm = 0.0;
         double tr  = 0.0;
         if (index >= this.length)
         {
             if (index == this.length)
             {
                 for (var j = index; j >= index - this.length + 1; j--)
                 {
                     tr  += TR.Value(this.input, j);
                     mdm += MDM.Value(this.input, j);
                 }
             }
             else
             {
                 mdm = this.mdmTS[index - 1] - this.mdmTS[index - 1] / this.length + MDM.Value(this.input, index);
                 tr  = this.trTS[index - 1] - this.trTS[index - 1] / this.length + TR.Value(this.input, index);
             }
             if (tr != 0.0)
             {
                 double value = mdm / tr * 100.0;
                 if (!double.IsNaN(value))
                 {
                     Add(this.input.GetDateTime(index), value);
                 }
             }
         }
         this.mdmTS.Add(this.input.GetDateTime(index), mdm);
         this.trTS.Add(this.input.GetDateTime(index), tr);
     }
 }
예제 #2
0
파일: ATR.cs 프로젝트: vcoda/fastquant.dll
 public override void Calculate(int index)
 {
     if (index >= this.length)
     {
         int    num = -1 * this.length;
         double value;
         if (this.style == IndicatorStyle.QuantStudio)
         {
             if (index == this.length)
             {
                 var sum = 0d;
                 for (var i = index; i > index - this.length; i--)
                 {
                     sum += TR.Value(this.input, i);
                 }
                 value = sum / this.length;
             }
             else
             {
                 value = (this[index - 1 + num] * this.length + TR.Value(this.input, index) - TR.Value(this.input, index - this.length)) / this.length;
             }
         }
         else if (index == this.length)
         {
             var sum = 0d;
             for (var j = index; j > index - this.length; j--)
             {
                 sum += TR.Value(this.input, j);
             }
             value = sum / this.length;
         }
         else
         {
             value = (base[this.input.GetDateTime(index - 1)] * this.length + TR.Value(this.input, index) - TR.Value(this.input, index - this.length)) / this.length;
         }
         Add(this.input.GetDateTime(index), value);
     }
 }
예제 #3
0
 public static double Value(ISeries input, int index, int length)
 {
     return(index < length
         ? double.NaN
         : SMA.Value(input, index, length, BarData.Typical) - Enumerable.Range(index - length + 1, length).Reverse().Sum(i => TR.Value(input, i)) / length);
 }