Пример источника Moving Average
using System; using System.Collections.Generic; using System.ComponentModel; using System.Runtime.Serialization; using TigerTrade.Chart.Indicators.Common; using TigerTrade.Chart.Indicators.Enums; using TigerTrade.Chart.Indicators.Sources; namespace TigerTrade.Chart.Indicators.Custom.Sources { [DataContract(Name = "MASourceDemo", Namespace = "http://schemas.datacontract.org/2004/07/TigerTrade.Chart.Indicators.Custom.Sources")] [IndicatorSource("MADemo", Type = typeof(MASourceDemo))] public sealed class MASourceDemo : IndicatorSourceBase { private int _period; [DataMember(Name = "Period")] [Category("Параметры"), DisplayName("Период")] public int Period { get => _period; set { value = Math.Max(1, value); if (value == _period) { return; } _period = value; OnPropertyChanged(); } } private IndicatorMaType _maType; [DataMember(Name = "MaType")] [Category("Параметры"), DisplayName("Тип MA")] public IndicatorMaType MaType { get => _maType; set { if (value == _maType) { return; } _maType = value; OnPropertyChanged(); } } private IndicatorSourceBase _source; [DataMember(Name = "Source")] [Category("Параметры"), DisplayName("Источник")] public IndicatorSourceBase Source { get => _source ?? (_source = new StockSource()); set { if (value == _source) { return; } _source = value; OnPropertyChanged(); } } public MASourceDemo() { Period = 14; MaType = IndicatorMaType.EMA; SelectedSeries = "MA"; } public override IEnumerable<string> GetSeriesList() { return new List<string> { "MA" }; } public override double[] GetSeries(IndicatorsHelper helper) { var source = _source.GetSeries(helper); return source == null ? null : helper.MovingAverage(_maType, source, _period); } public override void CopySettings(IndicatorSourceBase source) { if (!(source is MASourceDemo s)) { return; } SelectedSeries = s.SelectedSeries; Period = s.Period; MaType = s.MaType; Source = s.Source.CloneSource(); } public override string ToString() { return $"{MaType}({Source}, {Period})"; } } }