Level1Change в API 4.2.1
Atom
21.11.2013
vk37


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


Теги:


Спасибо:


vk37

Фотография
Дата: 21.11.2013
Ответить


Работаю над закачкой маркет данных (свой аналог Гидры). Плаза коннектор. Попробовал перевести закачку 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]'."}

Спасибо:

Mikhail Sukhov

Фотография
Дата: 21.11.2013
Ответить


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

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

Спасибо:

vk37

Фотография
Дата: 21.11.2013
Ответить


Михаил Сухов: Так не получиться. Под месседжи будет свой формат, отдельный. Будет основан на протоколе 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);
                }
            }
Или есть способ проще?
Спасибо:

vk37

Фотография
Дата: 27.11.2013
Ответить


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

Спасибо:

vk37

Фотография
Дата: 27.11.2013
Ответить


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

Спасибо:

Mikhail Sukhov

Фотография
Дата: 28.11.2013
Ответить


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

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

Спасибо:

vk37

Фотография
Дата: 28.11.2013
Ответить


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


Спасибо:

Mikhail Sukhov

Фотография
Дата: 28.11.2013
Ответить


vk37:

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


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

vk37

Фотография
Дата: 29.11.2013
Ответить


Михаил Сухов: Я выбираю "Помощь зала" )) Ну в общем, этот код возвращает большое количество 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;
        }
    }
Спасибо:

vk37

Фотография
Дата: 29.11.2013
Ответить


vk37:

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

Спасибо:


Добавить файлы через драг-н-дроп, , или вставить из буфера обмена.

loading
clippy