StockSharp
46 строк · 1.4 Кб
1namespace StockSharp.Algo.Analytics2{
3/// <summary>4/// The analytic script, normalize securities close prices and shows on same chart.5/// </summary>6public class NormalizePriceScript : IAnalyticsScript7{8Task IAnalyticsScript.Run(ILogReceiver logs, IAnalyticsPanel panel, SecurityId[] securities, DateTime from, DateTime to, IStorageRegistry storage, IMarketDataDrive drive, StorageFormats format, TimeSpan timeFrame, CancellationToken cancellationToken)9{10if (securities.Length == 0)11{12logs.AddWarningLog("No instruments.");13return Task.CompletedTask;14}15
16var chart = panel.CreateChart<DateTimeOffset, decimal>();17
18foreach (var security in securities)19{20// stop calculation if user cancel script execution21if (cancellationToken.IsCancellationRequested)22break;23
24var series = new Dictionary<DateTimeOffset, decimal>();25
26// get candle storage27var candleStorage = storage.GetTimeFrameCandleMessageStorage(security, timeFrame, drive, format);28
29decimal? firstClose = null;30
31foreach (var candle in candleStorage.Load(from, to))32{33firstClose ??= candle.ClosePrice;34
35// normalize close prices by dividing on first close36series[candle.OpenTime] = candle.ClosePrice / firstClose.Value;37}38
39// draw series on chart40chart.Append(security.ToStringId(), series.Keys, series.Values);41}42
43return Task.CompletedTask;44}45}46}