StockSharp
43 строки · 1.4 Кб
1namespace StockSharp.Algo.Analytics
2{
3/// <summary>
4/// The analytic script, calculating distribution of the volume by price levels.
5/// </summary>
6public class PriceVolumeScript : 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// script can process only 1 instrument
17var security = securities.First();
18
19// get candle storage
20var candleStorage = storage.GetTimeFrameCandleMessageStorage(security, timeFrame, drive, format);
21
22// get available dates for the specified period
23var dates = candleStorage.GetDates(from, to).ToArray();
24
25if (dates.Length == 0)
26{
27logs.AddWarningLog("no data");
28return Task.CompletedTask;
29}
30
31// grouping candles by middle price
32var rows = candleStorage.Load(from, to)
33.GroupBy(c => c.LowPrice + c.GetLength() / 2)
34.ToDictionary(g => g.Key, g => g.Sum(c => c.TotalVolume));
35
36// draw on chart
37panel.CreateChart<decimal, decimal>()
38.Append(security.ToStringId(), rows.Keys, rows.Values, ChartIndicatorDrawStyles.Histogram);
39
40return Task.CompletedTask;
41}
42}
43}