← Назад

HydraServer - получение списка инструментов

Добрый день!

Не получается получить список инструментов из Гидры через HydraServer. Пример, взятый из официальной документации (http://doc.stocksharp.ru/html/f143c9e7-d5a6-4464-9b01-18117183cc7a.htm) не работает. Вот он:


var storageRegistry = new StorageRegistry();
client.Refresh(storageRegistry.GetSecurityStorage(), new Security(), s => { }, () => false);
var allSecurity = storageRegistry.GetSecurityStorage().Lookup(new Security());

А именно: в примере не совпадает количество параметров, которое реальное требуется в client.Refresh. В примере их 4, а нужно 5.

Пробую свой код, вот такой:


            var imnis = new InMemoryNativeIdStorage(); //не понимаю, что это такое, но переменную данного типа надо передать, чтобы программа скомпилировалась
            var storageRegistry = new StorageRegistry();
            client.Refresh(
                storageRegistry.GetSecurityStorage(),
                imnis,
                new Security(),
                s => { },
                () => false);
            var allSecurity = storageRegistry.GetSecurityStorage().Lookup(new Security());

Этот код тоже не работает - в allSecurity ничего не передается (0 элементов), хотя в client.AvailableSecurities есть элементы, и я могу их получить так var securityIds = new List<SecurityId>(client.AvailableSecurities);

Подскажите пожалуйста, как все-таки получить все инструменты из Гидры? Спасибо!

Комментарии (13)

Вход или Создать аккаунт, Войдите или зарегистрируйтесь, чтобы оставить комментарий

Support
Support

В Гидре при этом что-то пишется в лог? Есть ли ошибки на клиентской стороне?

Simen
Simen Автор

В логе Гидры ошибок нет:

Создание для юзера..., Поиск инструментов, Получение инструментов.

Support
Support

Отслеживайте обработчик s =>

Simen
Simen Автор

Я не понимаю, что это значит и как его отслеживать. Можно работающий пример?

Support
Support
var imnis = new InMemoryNativeIdStorage(); //не понимаю, что это такое, но переменную данного типа надо передать, чтобы программа скомпилировалась
var storageRegistry = new StorageRegistry();
client.Refresh(
storageRegistry.GetSecurityStorage(),
imnis,
new Security(),
s => Console.WriteLine(s.Id),
() => false);
var allSecurity = storageRegistry.GetSecurityStorage().Lookup(new Security());
Simen
Simen Автор

Спасибо, но, к сожалению, все равно не работает. Вот полный код программы:

using System; using StockSharp.BusinessEntities; using Ecng.Common; using StockSharp.Algo.History.Hydra; using StockSharp.Algo.Storages; using System.Security; using StockSharp.Messages; using System.Collections.Generic;

namespace ConsoleWorkWithHydra { class Program { static void Main(string[] args) { //Подключение к Гидре var client = new RemoteStorageClient(new Uri("net.tcp://localhost:8000")) { Credentials = { AutoLogon = true, Email = "hydra_user", Password = "qwerty".To<SecureString>() }, };

        //получение всех инструментов
        var imnis = new InMemoryNativeIdStorage();
        var storageRegistry = new StorageRegistry();
        client.Refresh(
            storageRegistry.GetSecurityStorage(),
            imnis,
            new Security(),
            s => Console.WriteLine(s.Id),
            () => false);
        var allSecurity = storageRegistry.GetSecurityStorage().Lookup(new Security());


        //проверка, что инструменты все-таки есть
        Console.WriteLine("============================");
        var securityIds = new List<SecurityId>(client.AvailableSecurities);
        foreach (var item in securityIds)
        {
            Console.WriteLine(item.SecurityCode + "@" + item.BoardCode);
        }

        Console.ReadKey();

    }
}

}

До черты должен выводиться список всех инструментов, но он пуст. А после черты- проверка, что инструменты все-таки присутствуют в хранилище. У меня результат выглядит как на картинке.

Support
Support

У вас выводится 1 инструмент.

Simen
Simen Автор

Разумеется выводится, я специально сделал этот вывод, чтобы показать, что инструмент существует. НО! Это вывод через переменную типа RemoteStorageClient, которая предназначена только для коннекта и с которой нельзя дальше работать. А вот через переменную типа StorageRegistry ничего не выводится. Хотя именно она предназначена для дальнейшей работы с данными.

Пожалуйста покажите, как мне получить список инструментов через StorageRegistry. Как мне их поместить в переменную allSecurity?

Simen
Simen Автор

Добрый день! Решением моего вопроса кто-нибудь занимается?

Support
Support

Да, занимаемся.

Support
Support

В документации 4 параметра, так как в последнем релизе их 4. Обновите API.

Simen
Иван З.
Иван З.

На версии 4.3.25 у меня все работает как описано в документации. Полный код

using System; using System.Security; using Ecng.Common; using StockSharp.Algo.History.Hydra; using StockSharp.Algo.Storages; using StockSharp.BusinessEntities;

namespace GttSecurity { class Program { static void Main(string[] args) { var storageRegistry = new StorageRegistry(); var client = new RemoteStorageClient(new InMemoryExchangeInfoProvider(), new Uri("net.tcp://localhost:8000")) { Credentials = { AutoLogon = true, Email = "hydra_user", Password = "qwerty".To<SecureString>() }, };

        //Get all Securities
        client.Refresh(storageRegistry.GetSecurityStorage(), new Security(), s => { }, () => false);
        var allSecurity = storageRegistry.GetSecurityStorage().Lookup(new Security());

        foreach (var secc in allSecurity)
        {
            Console.Write(secc + "; ");
        }
        Console.WriteLine();
        Console.ReadLine();
    }
}

}

  1. В первый раз он получает инструменты достаточно долго, если у вас много инструментов то может занять минут 5 или больше. При последующих подключениях практически сразу. Если у вас в гидре периодическипоявляется сообщение

HydraServer 07/31/2017 23:19:34 +10:00 Info Сессия 484f979e-6806-4d6e-84d5-52f1da98ba10. Получение инструментов. Все хорошо, просто подождите еще минут 5, вы на правильном пути.

  1. Возможно у вас старая версия API или Гидры.
  2. Вы не настроили Гидру. В примере документации подключение к локальному юзеру. Как настроить описано тут http://doc.stocksharp.ru/html/7d845e99-6bde-437e-b7f4-059be0438894.htm У меня 4 параметра тоже, от куда вы взяли 5...
Simen
Simen
Simen Автор

Да, спасибо, обновление API помогло. Теперь действительно 4 параметра и пример из справки компилируется и работает!