StockSharp
46 строк · 1.6 Кб
1namespace StockSharp.Algo.Analytics
2{
3/// <summary>
4/// The analytic script, shows chart drawing possibilities.
5/// </summary>
6public class ChartDrawScript : 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
16var lineChart = panel.CreateChart<DateTimeOffset, decimal>();
17var histogramChart = panel.CreateChart<DateTimeOffset, decimal>();
18
19foreach (var security in securities)
20{
21// stop calculation if user cancel script execution
22if (cancellationToken.IsCancellationRequested)
23break;
24
25var candlesSeries = new Dictionary<DateTimeOffset, decimal>();
26var volsSeries = new Dictionary<DateTimeOffset, decimal>();
27
28// get candle storage
29var candleStorage = storage.GetTimeFrameCandleMessageStorage(security, timeFrame, drive, format);
30
31foreach (var candle in candleStorage.Load(from, to))
32{
33// fill series
34candlesSeries[candle.OpenTime] = candle.ClosePrice;
35volsSeries[candle.OpenTime] = candle.TotalVolume;
36}
37
38// draw series on chart as line and histogram
39lineChart.Append($"{security} (close)", candlesSeries.Keys, candlesSeries.Values, ChartIndicatorDrawStyles.DashedLine);
40histogramChart.Append($"{security} (vol)", volsSeries.Keys, volsSeries.Values, ChartIndicatorDrawStyles.Histogram);
41}
42
43return Task.CompletedTask;
44}
45}
46}