Algorithmischer Handel für .NET und Python✦86+ Konnektoren · Börsen · Broker · Krypto✦S#.Designer · Backtest · optimieren · live gehen✦Eine Community von 31,461+ Tradern und Entwicklern✦Algorithmischer Handel für .NET und Python✦86+ Konnektoren · Börsen · Broker · Krypto✦S#.Designer · Backtest · optimieren · live gehen✦Eine Community von 31,461+ Tradern und Entwicklern✦
Работаю над закачкой маркет данных (свой аналог Гидры). Плаза коннектор. Попробовал перевести закачку 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;
}
}
Wir verwenden Cookies, um die beste Erfahrung auf unserer Website zu gewährleisten. Durch die weitere Nutzung unserer Seite stimmen Sie der Verwendung von Cookies zu.
Kommentare (10)
Anmelden oder Konto erstellen, Melden Sie sich an oder registrieren Sie sich, um einen Kommentar zu hinterlassen
Работаю над закачкой маркет данных (свой аналог Гидры). Плаза коннектор. Попробовал перевести закачку 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 с отсутствующими изменениями.
Не совсем понял фразы. Огромное количество отсутствующих изменений? Это как? :-)