StockSharp
50 строк · 1.7 Кб
1namespace StockSharp.Algo.Analytics
2{
3/// <summary>
4/// The analytic script, using indicator ROC.
5/// </summary>
6public class IndicatorScript : IAnalyticsScript
7{
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
16// creating 2 panes for candles and indicator series
17var candleChart = panel.CreateChart<DateTimeOffset, decimal>();
18var indicatorChart = panel.CreateChart<DateTimeOffset, decimal>();
19
20foreach (var security in securities)
21{
22// stop calculation if user cancel script execution
23if (cancellationToken.IsCancellationRequested)
24break;
25
26var candlesSeries = new Dictionary<DateTimeOffset, decimal>();
27var indicatorSeries = new Dictionary<DateTimeOffset, decimal>();
28
29// creating ROC
30var roc = new RateOfChange();
31
32// get candle storage
33var candleStorage = storage.GetTimeFrameCandleMessageStorage(security, timeFrame, drive, format);
34
35foreach (var candle in candleStorage.Load(from, to))
36{
37// fill series
38candlesSeries[candle.OpenTime] = candle.ClosePrice;
39indicatorSeries[candle.OpenTime] = roc.Process(candle).GetValue<decimal>();
40}
41
42// draw series on chart
43candleChart.Append($"{security} (close)", candlesSeries.Keys, candlesSeries.Values);
44indicatorChart.Append($"{security} (ROC)", indicatorSeries.Keys, indicatorSeries.Values);
45}
46
47return Task.CompletedTask;
48}
49}
50}