Trading algorítmico para .NET e Python✦86+ conectores · bolsas · corretoras · cripto✦S#.Designer · backtest · otimizar · ao vivo✦Uma comunidade de 31,461+ traders e desenvolvedores✦Trading algorítmico para .NET e Python✦86+ conectores · bolsas · corretoras · cripto✦S#.Designer · backtest · otimizar · ao vivo✦Uma comunidade de 31,461+ traders e desenvolvedores✦
Работаю над закачкой маркет данных (свой аналог Гидры). Плаза коннектор. Попробовал перевести закачку SecurityChanges на Level1Change. Получаю данные так: ```csharp
readonly HashSet<Level1Fields> _level1Fields = new HashSet<Level1Fields>(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]'."}
Михаил Сухов:
Так не получиться. Под месседжи будет свой формат, отдельный. Будет основан на протоколе 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);
}
}
Михаил Сухов:
Так не получиться. Под месседжи будет свой формат, отдельный. Будет основан на протоколе FAST. А SC - это комбинация L1 и L1Msg.SC.Time брать из L1Msg.LocalTimeStamp?
Михаил Сухов:
Так не получиться. Под месседжи будет свой формат, отдельный. Будет основан на протоколе FAST. А SC - это комбинация L1 и L1Msg.SC.Time брать из L1Msg.LocalTimeStamp?Ответ: http://stocksharp.com/posts/m/28536/
Михаил Сухов:
Я выбираю "Помощь зала" )) Ну в общем, этот код возвращает большое количество Level1ChangeMessage у которого в коллекции Changes отсутствуют элементы.```csharp
readonly HashSet<Level1Fields> _level1Fields = new HashSet<Level1Fields>(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;
}
}
Utilizamos cookies para garantir a melhor experiência em nosso site. Ao continuar a usar nosso site, você concorda com o uso de cookies.
Comentários (10)
Entrar ou Criar conta, Faça login ou cadastre-se para deixar um comentário
Работаю над закачкой маркет данных (свой аналог Гидры). Плаза коннектор. Попробовал перевести закачку SecurityChanges на Level1Change. Получаю данные так: ```csharp readonly HashSet<Level1Fields> _level1Fields = new HashSet<Level1Fields>(new[] { Level1Fields.AsksCount, Level1Fields.AsksVolume, Level1Fields.BidsCount, Level1Fields.BidsVolume, Level1Fields.HistoricalVolatility, Level1Fields.ImpliedVolatility, Level1Fields.MarginBuy, Level1Fields.MarginSell, Level1Fields.StepPrice, Level1Fields.PriceStep, Level1Fields.OpenInterest, });
Сохраняю данные так:csharp var level1ChangeMessagesBySecurity = from c in level1ChangeMessagesFromQueue group c by c.SecurityId into g select g;При сохранении получаю ошибку: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]'."}Так не получиться. Под месседжи будет свой формат, отдельный. Будет основан на протоколе FAST. А SC - это комбинация L1 и L1Msg.
Кстати при вызове security.GetNewChanges приходит огромное количество Level1ChangeMessage с отсутствующими изменениями.
Не совсем понял фразы. Огромное количество отсутствующих изменений? Это как? :-)