← Back

Вопрос по справочнику инструментов

Доброго времени суток.

Возник такой вопрос по инструментам. По подписке на событие NewSecurities, получаем весь справочник инструментов.

  1. Можно ли как то фильтровать то, что мы хотим получить?
  2. Можно ли как то закэшировать или сохранить на диск все иструменты, что бы потом не тянуть опять с сервера весь справочник.

В S# есть хранилеще, но там вроде можно хранить только исторические данные и сделки.

У кого есть соображения? Спасибо.

Comments (22)

Login or Create account, Log in or register to leave a comment

tmt
tmt
// название инструмента
const string secCode = "RIH2";

trader.NewSecurities += securities =>
{
  _instrument = securities.FirstOrDefault(sec => sec.Code == secCode && sec.Type == SecurityTypes.Future); 
  // sec.Code - название инструмента, а sec.Type - тип (фьючерс, опцион, бумага, индекс)
};
kydna
kydna Author

tmt: ...

Странно. Вставил код в проект. При компиляции выдает ошибку:

'System.Collections.Generic.IEnumerable<StockSharp.BusinessEntities.Security>' does not contain a definition for 'FirstOrDefault' and no extension method 'FirstOrDefault' accepting a first argument of type 'System.Collections.Generic.IEnumerable<StockSharp.BusinessEntities.Security>' could be found (are you missing a using directive or an assembly reference?)

Я что то не подключил?

tmt
tmt

да, чтот не подключил.. Скинь проект свой в личку или сюда, тогда может помогу, а то мне тяжело (я тоже новичек)

а вообще попробуй вот это

    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Linq;
    using System.Net;
    using System.Threading;
    using System.Windows;
    using Ecng.Collections;
    using Ecng.Common;
    using Ecng.Xaml;
    using StockSharp.Algo;
    using StockSharp.Algo.Strategies;
    using StockSharp.BusinessEntities;
    using StockSharp.Smart;

и ссылки вот эти (что не достает, попробуй вставить, как и с using) Думаю поможет

dvoris
dvoris
  1. Можно ли как то закэшировать или сохранить на диск все иструменты, что бы потом не тянуть опять с сервера весь справочник.

Спрашивал об этом, наверное, ещё с год назад. По-прежнему, актуально. Попытка запустить экспорт даже на 3 ГГц Pentium (Prescott) вешает приложение намертво на несколько минут. Чего уж говорить о попытке запуска на VDS (там вообще нереально получить справочник, по-моему). С этим надо что-то делать. Было бы хорошо иметь локальную базу (справочник) с возможностью переносить между компами.

У меня большая просьба к разработчикам - по возможности заняться этой проблемой 😟

Alexander
Alexander

Посмотрел у себя на Core2Duo 2.13 ГГц. На боевом сервере через смартком всё загрузилось очень шустро.

На SampleSmart у вас проблема наблюдается?

dvoris
dvoris

Да, на любом примере под SmartTrader. Сейчас заметил, на PIII 3 Ггц, 2Гб SampleSmart висел 3 минуты http://shot.qip.ru/004n3f-301rAPJ/

Саш, мы это обсуждали, давно ещё. Отсутствие такой простой и логически необходимой вещи, как локальная база справочников неоправданно сужает применение S# (когда нужно хоститься, например.. ну не заказывать же многоядерный ~3 Ггц сервер для простой задачи, молчу про VDS. Да, на i3 всё нормально, но тоже подвисает секунды 3. С базой этого можно было бы избежать). Самому реализовать сериализацию Securities у меня знаний не хватает, сорри :( Проблема со справочниками лично для меня - краеугольный камень.

Mikhail Sukhov
Mikhail Sukhov

dvoris: Да, на i3 всё нормально, но тоже подвисает секунды 3. С базой этого можно было бы избежать

Ты предлагаешь оптимизировать эти 3 секунды?😳 С учетом того, что справочник загружается один раз при старте робота?

Alexander
Alexander
  1. Security - сериализуемый объект.
  2. В S# реализовано API для сохранения любых данных.

Так что если действительно нужно - пользуйтесь.

Alexander
Alexander

И правда общались :) То-то я думаю ник знакомый

dvoris
dvoris

Если бы мог, давно бы сделал. TradingStorage посмотрю. Может поможете с примером? ) А мысль о необходимости встроить кэширование Securities в S# не разделяете?

Alexander
Alexander

dvoris: Если бы мог, давно бы сделал. TradingStorage посмотрю. Может поможете с примером? ) А мысль о необходимости встроить кэширование Securities в S# не разделяете?

Не разделяю. SampleStorage совсем не помог разобраться?

dvoris
dvoris

Не помог. Сам пример понятен. TradingStorage реализует хранение свечек, стаканов, тиков. Как запихнуть туда инструменты? Как-то использовать SecurityList? Как сохранять на диск..

dvoris
dvoris

.. для начала его надо хотя бы загрузить :) На i3 терпимо, но задача запускать приложения на хостингах и VDS, которые вообще не переваривают получение справочника. Да даже PIII 3 Ггц вешает.. я считаю, что не должно быть такого поведения с дефолтными примерами (см.скрин выше). Имхо - с точки зрения здравого смысла нет необходимости каждый раз дергать такой объем данных и конструировать десятки тысяч securities (больша'я часть из которых вообще истекшие). Михаил, хоть ты подскажи, плз, я уже мозг сломал 🤔

Mikhail Sukhov
Mikhail Sukhov

dvoris: Михаил, хоть ты подскажи, плз, я уже мозг сломал 🤔

Надо внутрях СмартКом коннектора менять. Да и в BaseTrader. А сейчас времени нет, Плазой занимаюсь. Можно обменяться тасками.🙄

dvoris
dvoris

0:10:21 Всего инструментов: 21793 0:10:21 Истекших инструментов:16299

😡

В сматркоме тоже, конечно, недостаток, что он только целиком вываливает инструменты. Кстати, а как получают справочник в Плазе?

dvoris
dvoris

Может попробовать переопределить методы в SmartTrade, которые отвечают за добавление новых securities при соответствующем событии от смарткома? Фильтровать по дате экпирации и не добавлять истекших (там, например, опционные серии с 2010 года тянутся..) Уже уменьшим на 75% справочник и работу по созданию securities.

И ещё, может кто-нибудь намекнет, как сделать сериализацию Security ?

Mikhail Sukhov
Mikhail Sukhov

Протухшие инструменты можно как то через СмартТрейд удалить.

dvoris
dvoris

что-то беда у меня с англ.раскладкой.. речь про SmartTrader, конечно 😀

dvoris
dvoris

Ура 😎 Подозреваю, что решение кривое, но оно работает.

  1. Т.к. сериализовать Security у меня так и не получилось, ввёл класс SerializableSecurity. Сохраняю в файл бинарную сериализацию Hashtable из SerializableSecurity-c. Можно сделать полную, либо маленькую базу только из актуальных неистекших инструментов.

  2. Загрузка инструментов в Trader.Securities, насколько понимаю, невозможна снаружи, поэтому унаследовал от SmartTrader свой MySmartTrader, в котором добавил метод AddSecurity(Security s). В методе вызывается BaseTrader.GetSecurity метод, который добавляет инструмент в Securities. Если я неправ, и можно добавить инструменты в Securities более правильно, то прошу поправить.

Mikhail Sukhov
Mikhail Sukhov

dvoris: Если я неправ, и можно добавить инструменты в Securities более правильно, то прошу поправить.

Я бы начал со SmartTrade

dvoris
dvoris

Я бы начал со SmartTrade

Не понял, что мне там надо найти? Настройки->Справочники чисто информативные таблички показывает.

Mikhail Sukhov
Mikhail Sukhov

dvoris:

Я бы начал со SmartTrade

Не понял, что мне там надо найти? Настройки->Справочники чисто информативные таблички показывает.

http://stocksharp.com/posts/m/16398/