← Zurück

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);

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

War dieses Thema hilfreich?

Thema teilen

Kommentare (13)

Anmelden oder Konto erstellen, Melden Sie sich an oder registrieren Sie sich, um einen Kommentar zu hinterlassen

Support
Support

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

Simen
Simen Autor

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

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

Support
Support

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

Simen
Simen Autor

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

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 Autor

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

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 Autor

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

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

Simen
Simen Autor

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

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 Autor

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