StockSharp

Форк
0
/
Chart3DScript.cs 
64 строки · 1.8 Кб
1
namespace StockSharp.Algo.Analytics
2
{
3
	/// <summary>
4
	/// The analytic script, calculating distribution of the biggest volume by hours
5
	/// and shows its in 3D chart.
6
	/// </summary>
7
	public class Chart3DScript : IAnalyticsScript
8
	{
9
		Task IAnalyticsScript.Run(ILogReceiver logs, IAnalyticsPanel panel, SecurityId[] securities, DateTime from, DateTime to, IStorageRegistry storage, IMarketDataDrive drive, StorageFormats format, TimeSpan timeFrame, CancellationToken cancellationToken)
10
		{
11
			if (securities.Length == 0)
12
			{
13
				logs.AddWarningLog("No instruments.");
14
				return Task.CompletedTask;
15
			}
16

17
			var x = new List<string>();
18
			var y = new List<string>();
19

20
			// fill Y labels
21
			for (var h = 0; h < 24; h++)
22
				y.Add(h.ToString());
23

24
			var z = new double[securities.Length, y.Count];
25

26
			for (var i = 0; i < securities.Length; i++)
27
			{
28
				// stop calculation if user cancel script execution
29
				if (cancellationToken.IsCancellationRequested)
30
					break;
31

32
				var security = securities[i];
33

34
				// fill X labels
35
				x.Add(security.ToStringId());
36

37
				// get candle storage
38
				var candleStorage = storage.GetTimeFrameCandleMessageStorage(security, timeFrame, drive, format);
39

40
				// get available dates for the specified period
41
				var dates = candleStorage.GetDates(from, to).ToArray();
42

43
				if (dates.Length == 0)
44
				{
45
					logs.AddWarningLog("no data");
46
					return Task.CompletedTask;
47
				}
48

49
				// grouping candles by opening time (time part only) with 1 hour truncating
50
				var byHours = candleStorage.Load(from, to)
51
					.GroupBy(c => c.OpenTime.TimeOfDay.Truncate(TimeSpan.FromHours(1)))
52
					.ToDictionary(g => g.Key.Hours, g => g.Sum(c => c.TotalVolume));
53

54
				// fill Z values
55
				foreach (var pair in byHours)
56
					z[i, pair.Key] = (double)pair.Value;
57
			}
58

59
			panel.Draw3D(x, y, z, "Instruments", "Hours", "Volume");
60

61
			return Task.CompletedTask;
62
		}
63
	}
64
}

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.