C#- Double Exponential Moving Average (DEMA) TO Triple Exponential Moving Average (TEMA)

C#- Double Exponential Moving Average (DEMA) TO Triple Exponential Moving Average (TEMA)

Die Lösung für C# – Double Exponential Moving Average (DEMA) TO Triple Exponential Moving Average (TEMA)
ist unten angegeben:

Bitte können Sie alle bei der Konvertierung des folgenden DEMA-Codes in TEMA helfen:
Unten sind die Daten von der Binance-API:

DATEN:https://fapi.binance.com/fapi/v1/klines?symbol=BTCUSDT&interval=1m

AUF dieser URL haben wir die Formel für TEAM:https://www.investopedia.com/terms/t/triple-exponential-moving-average.asp

using System.Collections.Generic
using System.Linq;

    namespace Indicator
    {
        /// <summary>
        /// Double Exponential Moving Average (DEMA)
        /// </summary>
        public class DEMA : IndicatorCalculatorBase<SingleDoubleSerie>
        {
            protected override List<Ohlc> OhlcList { get; set; }
            protected int Period { get; set; }
            protected ColumnType ColumnType { get; set; } = ColumnType.Close;
    
            public DEMA(int period, ColumnType columnType = ColumnType.Close)
            {
                this.Period = period;
                this.ColumnType = columnType;
            }
    
            /// <summary>
            /// DEMA = 2 * EMA - EMA of EMA
            /// </summary>
            /// <see cref="http://forex-indicators.net/trend-indicators/dema"/>
            /// <returns></returns>
            public override SingleDoubleSerie Calculate()
            {
                SingleDoubleSerie demaSerie = new SingleDoubleSerie();
                EMA ema = new EMA(Period, false, ColumnType);
                ema.Load(OhlcList);
                List<double?> emaValues = ema.Calculate().Values;
    
                // assign EMA values to column
                for (int i = 0; i < OhlcList.Count; i++)
                {
                    switch (ColumnType)
                    {
                        case ColumnType.Close:
                            OhlcList[i].Close = emaValues[i] ?? 0.0;
                            break;
                        default:
                            break;
                    }
                }
    
                ema.Load(OhlcList.Skip(Period - 1).ToList());
                // EMA(EMA(value))
                List<double?> emaEmaValues = ema.Calculate().Values;
                for (int i = 0; i < Period - 1; i++)
                {
                    emaEmaValues.Insert(0, null);
                }    
    
                // Calculate DEMA
                for (int i = 0; i < OhlcList.Count; i++) 
                {
                    if (i >= 2 * Period - 2)
                    {
                        var dema = 2 * emaValues[i] - emaEmaValues[i];
                        demaSerie.Values.Add(dema);
                    }
                    else
                    {
                        demaSerie.Values.Add(null);
                    }
                }
    
                return demaSerie;
            }
        }
    }

Danke