Level1Change в API 4.2.1

Level1Change в API 4.2.1
Atom
11/21/2013
vk37


Не совсем понятно в API 4.2.1: Level1Change заменит SecurityChange?


Tags:


Thanks:


vk37

Avatar
Date: 11/21/2013
Reply


Работаю над закачкой маркет данных (свой аналог Гидры). Плаза коннектор. Попробовал перевести закачку SecurityChanges на Level1Change. Получаю данные так: ```csharp readonly HashSet _level1Fields = new HashSet(new[] { Level1Fields.AsksCount, Level1Fields.AsksVolume, Level1Fields.BidsCount, Level1Fields.BidsVolume, Level1Fields.HistoricalVolatility, Level1Fields.ImpliedVolatility, Level1Fields.MarginBuy, Level1Fields.MarginSell, Level1Fields.StepPrice, Level1Fields.PriceStep, Level1Fields.OpenInterest, });

    private void OnSecuritiesChanged(IEnumerable<Security> securities)
    {
        foreach (var security in securities)
        {
            var changeMessage = security.GetNewChanges(_level1Fields);
            _saveManager.Level1ChangeMessages.Enqueue(changeMessage);
        }
    }

Сохраняю данные так: csharp var level1ChangeMessagesBySecurity = from c in level1ChangeMessagesFromQueue group c by c.SecurityId into g select g;

            foreach (var level1ChangeMessageBySecurity in level1ChangeMessagesBySecurity)
            {
                var level1ChangeStorage = _storageRegistry.GetLevel1ChangeStorage(new Security() { Id = level1ChangeMessageBySecurity.Key.Native.ToString()}, _defaultDrive);
                try
                {
                    level1ChangeStorage.Save(level1ChangeMessageBySecurity);
                }
                catch (Exception e)
                {
                    Log.Error("Ошибка при сохранении изменений инструментов", e);
                }
            }

При сохранении получаю ошибку: plain {"Unable to cast object of type 'Grouping[StockSharp.Messages.SecurityId,StockSharp.Messages.Level1ChangeMessage]' to type 'System.Collections.Generic.IEnumerable`1[StockSharp.Algo.Storages.SecurityChange]'."}

Thanks:

Mikhail Sukhov

Avatar
Date: 11/21/2013
Reply


vk37: Работаю над закачкой маркет данных (свой аналог Гидры). Плаза коннектор. Попробовал перевести закачку SecurityChanges на Level1Change.

Так не получиться. Под месседжи будет свой формат, отдельный. Будет основан на протоколе FAST. А SC - это комбинация L1 и L1Msg.

Thanks:

vk37

Avatar
Date: 11/21/2013
Reply


Михаил Сухов: Так не получиться. Под месседжи будет свой формат, отдельный. Будет основан на протоколе FAST. А SC - это комбинация L1 и L1Msg.Тогда получается как-то так:```csharp var messagesBySecurity = from c in messagesFromQueue group c by c.SecurityId into g select g;

            foreach (var messageBySecurity in messagesBySecurity)
            {
                var security = new Security() {Id = messageBySecurity.Key.Native.ToString()};
                var securityChangeStorage = _storageRegistry.GetSecurityChangeStorage(security, _defaultDrive);

                try
                {
                    var securityChanges = new List<SecurityChange>();

                    foreach (var message in messageBySecurity)
                        foreach (var change in message.Changes)
                            securityChanges.Add(new SecurityChange(security, message.LocalTimeStamp, change.Type, change.Value));

                    securityChangeStorage.Save(securityChanges);
                }
                catch (Exception e)
                {
                    Log.Error("Ошибка при сохранении изменений инструментов", e);
                }
            }
Или есть способ проще?
Thanks:

vk37

Avatar
Date: 11/27/2013
Reply


Михаил Сухов: Так не получиться. Под месседжи будет свой формат, отдельный. Будет основан на протоколе FAST. А SC - это комбинация L1 и L1Msg.SC.Time брать из L1Msg.LocalTimeStamp?

Thanks:

vk37

Avatar
Date: 11/27/2013
Reply


Кстати при вызове security.GetNewChanges приходит огромное количество Level1ChangeMessage с отсутствующими изменениями.

Thanks:

Mikhail Sukhov

Avatar
Date: 11/28/2013
Reply


vk37: Кстати при вызове security.GetNewChanges приходит огромное количество Level1ChangeMessage с отсутствующими изменениями.

Не совсем понял фразы. Огромное количество отсутствующих изменений? Это как? :-)

Thanks:

vk37

Avatar
Date: 11/28/2013
Reply


Михаил Сухов: Не совсем понял фразы. Огромное количество отсутствующих изменений? Это как? :-)```csharp !changeMessage.Changes.Any()


Thanks:

Mikhail Sukhov

Avatar
Date: 11/28/2013
Reply


vk37:

Михаил Сухов: Не совсем понял фразы. Огромное количество отсутствующих изменений? Это как? :-)```csharp !changeMessage.Changes.Any()


Я выбираю "Помощь зала"
Thanks:

vk37

Avatar
Date: 11/29/2013
Reply


Михаил Сухов: Я выбираю "Помощь зала" )) Ну в общем, этот код возвращает большое количество Level1ChangeMessage у которого в коллекции Changes отсутствуют элементы.```csharp readonly HashSet _level1Fields = new HashSet(new[] { Level1Fields.AsksCount, Level1Fields.AsksVolume, Level1Fields.BidsCount, Level1Fields.BidsVolume, Level1Fields.HistoricalVolatility, Level1Fields.ImpliedVolatility, Level1Fields.MarginBuy, Level1Fields.MarginSell, Level1Fields.StepPrice, Level1Fields.PriceStep, Level1Fields.OpenInterest, });

    private void OnSecuritiesChanged(IEnumerable<Security> securities)
    {
        foreach (var security in securities)
        {
            var changeMessage = security.GetNewChanges(_level1Fields);

            if (!changeMessage.Changes.Any())
                continue;
        }
    }
Thanks:

vk37

Avatar
Date: 11/29/2013
Reply


vk37:

Михаил Сухов: Так не получиться. Под месседжи будет свой формат, отдельный. Будет основан на протоколе FAST. А SC - это комбинация L1 и L1Msg.SC.Time брать из L1Msg.LocalTimeStamp?Ответ: http://stocksharp.com/posts/m/28536/

Thanks:


Attach files by dragging & dropping, , or pasting from the clipboard.

loading
clippy