Esempio n. 1
0
            public CandleMessageBuildableStorage(IStorageRegistry registry, Security security, TimeSpan timeFrame, IMarketDataDrive drive, StorageFormats format)
            {
                if (registry == null)
                {
                    throw new ArgumentNullException(nameof(registry));
                }

                _getStorage = tf => registry.GetCandleMessageStorage(typeof(TimeFrameCandleMessage), security, tf, drive, format);
                _original   = _getStorage(timeFrame);

                _compressor = new BiggerTimeFrameCandleCompressor(new MarketDataMessage
                {
                    SecurityId  = security.ToSecurityId(),
                    DataType    = MarketDataTypes.CandleTimeFrame,
                    Arg         = timeFrame,
                    IsSubscribe = true,
                });
            }
Esempio n. 2
0
            public CandleMessageBuildableStorage(IStorageRegistry registry, SecurityId securityId, TimeSpan timeFrame, IMarketDataDrive drive, StorageFormats format)
            {
                if (registry == null)
                {
                    throw new ArgumentNullException(nameof(registry));
                }

                _getStorage = tf => registry.GetCandleMessageStorage(typeof(TimeFrameCandleMessage), securityId, tf, drive, format);
                _original   = _getStorage(timeFrame);

                _timeFrame = timeFrame;

                _compressors = GetSmallerTimeFrames().ToDictionary(tf => tf, tf => new BiggerTimeFrameCandleCompressor(new MarketDataMessage
                {
                    SecurityId  = securityId,
                    DataType    = MarketDataTypes.CandleTimeFrame,
                    Arg         = timeFrame,
                    IsSubscribe = true,
                }, new TimeFrameCandleBuilder(registry.ExchangeInfoProvider)));
            }
Esempio n. 3
0
        private void Process(IStorageRegistry storageRegistry, Security security, StorageFormats format, IMarketDataDrive drive)
        {
            this.GuiSync(() =>
            {
                _visibleEntries.Clear();

                Columns.RemoveRange(_candleColumns.Values);
                _candleColumns.Values.ForEach(c => FormatRules.Remove(c));
                _candleColumns.Clear();
            });

            if (security == null)
            {
                return;
            }

            var dict = new Dictionary <DateTime, MarketDataEntry>();

            drive = drive ?? storageRegistry.DefaultDrive;

            var candles = new Dictionary <string, Tuple <Type, object> >();

            lock (_syncObject)
            {
                if (_isChanged)
                {
                    return;
                }
            }

            foreach (var tuple in drive.GetCandleTypes(security.ToSecurityId(), format))
            {
                foreach (var arg in tuple.Item2)
                {
                    var key = tuple.Item1.Name.Replace("CandleMessage", string.Empty) + " " + arg;
                    candles.Add(key, Tuple.Create(tuple.Item1, arg));
                }
            }

            var candleNames = candles.Keys.ToArray();

            if (candleNames.Length > 0)
            {
                this.GuiSync(() =>
                {
                    foreach (var candleName in candleNames)
                    {
                        var column = new DataGridTextColumn
                        {
                            Header  = candleName,
                            Binding = new Binding
                            {
                                Path      = new PropertyPath("Candles[{0}]".Put(candleName)),
                                Converter = new BoolToCheckMarkConverter()
                            }
                        };
                        //var cbElement = new FrameworkElementFactory(typeof(CheckBox));

                        //var column = new DataGridTemplateColumn
                        //{
                        //	Header = candle,
                        //	CellStyle = new Style(),
                        //	//SortMemberPath = "Candles[{0}]".Put(key)
                        //	CellTemplate = new DataTemplate(typeof(CheckBox))
                        //	{
                        //		VisualTree = cbElement,
                        //	}
                        //};

                        //var bind = new Binding { Path = new PropertyPath("Candles[{0}]".Put(candle)) };

                        //cbElement.SetBinding(ToggleButton.IsCheckedProperty, bind);
                        //cbElement.SetValue(IsHitTestVisibleProperty, false);
                        //cbElement.SetValue(HorizontalAlignmentProperty, HorizontalAlignment.Center);

                        Columns.Add(column);
                        _candleColumns.Add(candleName, column);

                        //ApplyFormatRules(column);
                    }

                    //ApplyFormatRules();
                });
            }

            Add(dict, storageRegistry.GetTickMessageStorage(security, drive, format).Dates, candleNames, e => e.IsTick         = true);
            Add(dict, storageRegistry.GetQuoteMessageStorage(security, drive, format).Dates, candleNames, e => e.IsDepth       = true);
            Add(dict, storageRegistry.GetLevel1MessageStorage(security, drive, format).Dates, candleNames, e => e.IsLevel1     = true);
            Add(dict, storageRegistry.GetOrderLogMessageStorage(security, drive, format).Dates, candleNames, e => e.IsOrderLog = true);

            foreach (var c in candleNames)
            {
                var candleName = c;

                lock (_syncObject)
                {
                    if (_isChanged)
                    {
                        return;
                    }
                }

                var tuple = candles[candleName];
                Add(dict, storageRegistry.GetCandleMessageStorage(tuple.Item1, security, tuple.Item2, drive, format).Dates, candleNames, e => e.Candles[candleName] = true);
            }

            if (dict.Count > 0)
            {
                // add gaps by working days
                var emptyDays = dict.Keys.Min().Range(dict.Keys.Max(), TimeSpan.FromDays(1))
                                .Where(d => !dict.ContainsKey(d) /* && security.Board.WorkingTime.IsTradeDate(d, true)*/)
                                .OrderBy()
                                .ToList();

                foreach (var monthGroup in emptyDays.ToArray().GroupBy(d => new DateTime(d.Year, d.Month, 1)))
                {
                    var firstDay = monthGroup.First();
                    var lastDay  = monthGroup.Last();

                    // whole month do not have any values
                    if (firstDay.Day == 1 && lastDay.Day == monthGroup.Key.DaysInMonth())
                    {
                        emptyDays.RemoveRange(monthGroup);
                    }
                }

                Add(dict, emptyDays, candleNames, e => { });
            }

            lock (_syncObject)
            {
                if (_isChanged)
                {
                    return;
                }
            }

            this.GuiSync(RefreshSort);
        }
Esempio n. 4
0
		private void Process(IStorageRegistry storageRegistry, Security security, StorageFormats format, IMarketDataDrive drive)
		{
			this.GuiSync(() =>
			{
				_visibleEntries.Clear();
			
				Columns.RemoveRange(_candleColumns.Values);
				_candleColumns.Values.ForEach(c => FormatRules.Remove(c));
				_candleColumns.Clear();
			});

			if (security == null)
				return;

			var dict = new Dictionary<DateTime, MarketDataEntry>();

			drive = drive ?? storageRegistry.DefaultDrive;

			var candles = new Dictionary<string, DataType>();

			lock (_syncObject)
			{
				if (_isChanged)
					return;
			}

			foreach (var tuple in drive.GetAvailableDataTypes(security.ToSecurityId(), format))
			{
				if (tuple.MessageType.IsCandleMessage())
					continue;

				var key = tuple.MessageType.Name.Replace("CandleMessage", string.Empty) + " " + tuple.Arg;
				candles.Add(key, tuple.Clone());
			}

			var candleNames = candles.Keys.ToArray();

			if (candleNames.Length > 0)
			{
				this.GuiSync(() =>
				{
					foreach (var candleName in candleNames)
					{
						var column = new DataGridTextColumn
						{
							Header = candleName,
							Binding = new Binding
							{
								Path = new PropertyPath("Candles[{0}]".Put(candleName)),
								Converter = new BoolToCheckMarkConverter()
							}
						};
						//var cbElement = new FrameworkElementFactory(typeof(CheckBox));

						//var column = new DataGridTemplateColumn
						//{
						//	Header = candle,
						//	CellStyle = new Style(),
						//	//SortMemberPath = "Candles[{0}]".Put(key)
						//	CellTemplate = new DataTemplate(typeof(CheckBox))
						//	{
						//		VisualTree = cbElement,
						//	}
						//};

						//var bind = new Binding { Path = new PropertyPath("Candles[{0}]".Put(candle)) };
						
						//cbElement.SetBinding(ToggleButton.IsCheckedProperty, bind);
						//cbElement.SetValue(IsHitTestVisibleProperty, false);
						//cbElement.SetValue(HorizontalAlignmentProperty, HorizontalAlignment.Center);

						Columns.Add(column);
						_candleColumns.Add(candleName, column);

						//ApplyFormatRules(column);
					}

					//ApplyFormatRules();
				});
			}

			Add(dict, storageRegistry.GetTickMessageStorage(security, drive, format).Dates, candleNames, e => e.IsTick = true);
			Add(dict, storageRegistry.GetQuoteMessageStorage(security, drive, format).Dates, candleNames, e => e.IsDepth = true);
			Add(dict, storageRegistry.GetLevel1MessageStorage(security, drive, format).Dates, candleNames, e => e.IsLevel1 = true);
			Add(dict, storageRegistry.GetOrderLogMessageStorage(security, drive, format).Dates, candleNames, e => e.IsOrderLog = true);

			foreach (var c in candleNames)
			{
				var candleName = c;

				lock (_syncObject)
				{
					if (_isChanged)
						return;
				}

				var tuple = candles[candleName];
				Add(dict, storageRegistry.GetCandleMessageStorage(tuple.MessageType, security, tuple.Arg, drive, format).Dates, candleNames, e => e.Candles[candleName] = true);
			}

			if (dict.Count > 0)
			{
				// add gaps by working days
				var emptyDays = dict.Keys.Min().Range(dict.Keys.Max(), TimeSpan.FromDays(1))
					.Where(d => !dict.ContainsKey(d)/* && security.Board.WorkingTime.IsTradeDate(d, true)*/)
					.OrderBy()
					.ToList();

				foreach (var monthGroup in emptyDays.ToArray().GroupBy(d => new DateTime(d.Year, d.Month, 1)))
				{
					var firstDay = monthGroup.First();
					var lastDay = monthGroup.Last();

					// whole month do not have any values
					if (firstDay.Day == 1 && lastDay.Day == monthGroup.Key.DaysInMonth())
						emptyDays.RemoveRange(monthGroup);
				}

				Add(dict, emptyDays, candleNames, e => { });
			}

			lock (_syncObject)
			{
				if (_isChanged)
					return;
			}

			this.GuiSync(RefreshSort);
		}
Esempio n. 5
0
		private void Process(IStorageRegistry storageRegistry, Security security, StorageFormats format, IMarketDataDrive drive)
		{
			this.GuiSync(() =>
			{
				_visibleEntries.Clear();
			
				Columns.RemoveRange(_candleColumns.Values);
				_candleColumns.Values.ForEach(c => FormatRules.Remove(c));
				_candleColumns.Clear();
			});

			if (security == null)
				return;

			var dict = new Dictionary<DateTime, MarketDataEntry>();

			drive = drive ?? storageRegistry.DefaultDrive;

			var candles = new Dictionary<string, Tuple<Type, object>>();

			lock (_syncObject)
			{
				if (_isChanged)
					return;
			}

			foreach (var tuple in drive.GetCandleTypes(security.ToSecurityId(), format))
			{
				foreach (var arg in tuple.Item2)
				{
					var key = tuple.Item1.Name.Replace("CandleMessage", string.Empty) + " " + arg;
					candles.Add(key, Tuple.Create(tuple.Item1, arg));
				}
			}

			var candleNames = candles.Keys.ToArray();

			if (candleNames.Length > 0)
			{
				this.GuiSync(() =>
				{
					foreach (var candleName in candleNames)
					{
						var column = new DataGridTextColumn
						{
							Header = candleName,
							Binding = new Binding
							{
								Path = new PropertyPath("Candles[{0}]".Put(candleName)),
								Converter = new BoolToCheckMarkConverter()
							}
						};
						//var cbElement = new FrameworkElementFactory(typeof(CheckBox));

						//var column = new DataGridTemplateColumn
						//{
						//	Header = candle,
						//	CellStyle = new Style(),
						//	//SortMemberPath = "Candles[{0}]".Put(key)
						//	CellTemplate = new DataTemplate(typeof(CheckBox))
						//	{
						//		VisualTree = cbElement,
						//	}
						//};

						//var bind = new Binding { Path = new PropertyPath("Candles[{0}]".Put(candle)) };
						
						//cbElement.SetBinding(ToggleButton.IsCheckedProperty, bind);
						//cbElement.SetValue(IsHitTestVisibleProperty, false);
						//cbElement.SetValue(HorizontalAlignmentProperty, HorizontalAlignment.Center);

						Columns.Add(column);
						_candleColumns.Add(candleName, column);

						//ApplyFormatRules(column);
					}

					//ApplyFormatRules();
				});
			}

			Add(dict, storageRegistry.GetTickMessageStorage(security, drive, format), candleNames, e => e.IsTick = true);
			Add(dict, storageRegistry.GetQuoteMessageStorage(security, drive, format), candleNames, e => e.IsDepth = true);
			Add(dict, storageRegistry.GetLevel1MessageStorage(security, drive, format), candleNames, e => e.IsLevel1 = true);
			Add(dict, storageRegistry.GetOrderLogMessageStorage(security, drive, format), candleNames, e => e.IsOrderLog = true);

			foreach (var c in candleNames)
			{
				var candleName = c;

				lock (_syncObject)
				{
					if (_isChanged)
						return;
				}

				var tuple = candles[candleName];
				Add(dict, storageRegistry.GetCandleMessageStorage(tuple.Item1, security, tuple.Item2, drive, format), candleNames, e => e.Candles[candleName] = true);
			}

			if (dict.Count > 0)
			{
				// добавляем рабочие дни, которые отсутствуют в данных
				var emptyDays = dict.Keys.Min().Range(dict.Keys.Max(), TimeSpan.FromDays(1))
					.Where(d => security.Board.WorkingTime.IsTradeDate(d, true) && !dict.ContainsKey(d));

				foreach (var batch in emptyDays.Batch(10))
				{
					lock (_syncObject)
					{
						if (_isChanged)
							return;
					}

					TryAddEntries(dict, batch, candleNames, e => { });
				}
			}

			lock (_syncObject)
			{
				if (_isChanged)
					return;
			}

			this.GuiSync(RefreshSort);
		}