← Назад

API 4.2.2.24 поиск инструмента

В версии 4.2.2.24 следующий код не приводит к поиску инструмента, котировки не идут if (security == null) { var criteria = new Security ; MainWindow.Instance._trader.LookupSecurities(criteria); }

Но есть один момент, если после поиска инструмента открыть компонент SecurityPicker, как в примере SampleBlackwood, то поиск срабатывает, если его не открывать то котировки получить невозможно.

В версии 4.1.19 было все нормально, такой проблемы не было. Но новая лицензия созданная в ЛК не работает со старой версией Blackwood, поэтому на старой версии тоже остаться не получается. Как можно решить проблему?

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

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

Mikhail Sukhov
Mikhail Sukhov

Ramil:

В SampleBlackwood воспроизводится?

Ramil
Ramil Автор

В SampleBlackwood тоже самое если не открывать окно с компонентом SecurityPicker, а просто вставить код в главную форму после коннекта. Мне кажется что в SecurityPicker что-то нужное в коде компонента, после чего тикер появляется в списке trader.securities. Но пока его не откроешь код не срабатывает

Mikhail Sukhov
Mikhail Sukhov

Ramil: В SampleBlackwood тоже самое если не открывать окно с компонентом SecurityPicker, а просто вставить код в главную форму после коннекта. Мне кажется что в SecurityPicker что-то нужное в коде компонента, после чего тикер появляется в списке trader.securities. Но пока его не откроешь код не срабатывает

Не понял о каком коде идет речь.

Ramil
Ramil Автор

Код в первом сообщении. Он не работает if (security == null) { var criteria = new Security ; MainWindow.Instance._trader.LookupSecurities(criteria); }

Mikhail Sukhov
Mikhail Sukhov

Ramil: Код в первом сообщении. Он не работает if (security == null) { var criteria = new Security ; MainWindow.Instance._trader.LookupSecurities(criteria); }

В SampleBlackwood такой код есть и он работает.

Ramil
Ramil Автор

В версии 4.1.9 все работает, но на ней остаться проблематично, так как новые зарегистрированные у вас лицензии в версии 4.1.9 выдают ошибку System.InvalidOperationException: Лицензия не поддерживает BlackwoodTrade

Ramil
Ramil Автор

Он работает только если открыть окно "Инструменты", а если его не открывать, а вставить в главную форму на любую кнопку и нажать ее после соединения, тогда он не работает! Также если я удалю из формы компонент SecurityPicker, который по идее только выводит список securities, то также поиск не работает!

Mikhail Sukhov
Mikhail Sukhov

Ramil: Он работает только если открыть окно "Инструменты", а если его не открывать, а вставить в главную форму на любую кнопку и нажать ее после соединения, тогда он не работает! Также если я удалю из формы компонент SecurityPicker, который по идее только выводит список securities, то также поиск не работает!

Думаю, вы ошибаетесь.

Ramil
Ramil Автор

Выше, это то что касается именно того как в примере SampleBlackwood получить такую же проблему как у меня. Код у меня 100% одинаковый в версии 4.1.9 в которой все котировки приходили и поиск инструментов срабатывал и в версии 4.2.2.24. В данном случае я оказываюсь именно заложником лицензии и не могу остаться на рабочей версии 4.1.9, в связи с тем что у вас какие-то изменения в лицензировании. Я готов оплатить час консультации если это мой косяк, но повторю код 100% одинаковый и в версии 4.1.9 он работает, а в 4.2.2.24 нет

Ramil
Ramil Автор

Я это проверил не один раз. Все как написано выше

Mikhail Sukhov
Mikhail Sukhov

Ramil: Я это проверил не один раз. Все как написано выше

Вы можете сказать, как это воспроизвести?

Ramil
Ramil Автор

Также в версии 4.1.9 даже если котировки по инструменту не идут то поиск сработает и он будет найден среди trader.securities, в версии 4.2.2.24 в примере SampleBlackwood в этом случае инструмент не будет найден после поиска.

Ramil
Ramil Автор

Как вариант заменить ShowSecuritiesClick() на приведенный ниже код в SampleBlackwood, где ищется инструмент "BK", при втором нажатии должно зайти если инструмент найден. Но в общем иногда это работает и в примере, иногда не работает, и как я понял не работает именно тогда когда котировки не идут в данный момент (акция неликвид. и т.п.), так например я запускаю за час где-то до открытия бирже (16-17 мск) или перед закрытием (23 и позже мск), в версии 4.1.9 инструмент будет найден в любое время если установилось соединение, а в 4.2.2.24 он оказывается найден только иногда.

private void ShowSecuritiesClick(object sender, RoutedEventArgs e) { Security security = null; foreach (Security s in Trader.Securities) if (s.Code == "BK" && (s.ExchangeBoard == ExchangeBoard.Nyse || s.ExchangeBoard == ExchangeBoard.Nasdaq || s.ExchangeBoard == ExchangeBoard.Amex)) { security = s; break; }

        if (security == null)
        {
            var criteria = new Security
            {
                Currency = CurrencyTypes.USD,
                Code = "BK",
            };
            MainWindow.Instance.Trader.LookupSecurities(criteria);

            MessageBox.Show("Тикер не найден. Попробуйте запустить снова");
            return;
        } 
        ShowOrHide(_securitiesWindow);
}
Mikhail Sukhov
Mikhail Sukhov

Вообщем как-то все неоднозначно. Нужен отзыв еще одного пользователя. Пока на 99% уверен, что бага не в коннекторе.

Ramil
Ramil Автор

Вот именно, что и работает неоднозначно. Ну и где мне искать этого пользователя? Отзовитесь пожалуйста кто сталкивался. Как мне тогда можно сделать чтобы новая лицензия работала с версией 4.1.9, там проблемы нет?

Ramil
Ramil Автор

Проблема немного прояснилась, но неясно как ее решить. Поиск инструментов сразу после коннекта foreach (StrategyRecord st in Strategies.Items) FindSecurity(st.Security); приводит к тому что после этого ни один инструмент найден не будет. Если убрать поиск оттуда и выполнить его через примерно 3сек (обязательно нужно выждать иначе не работает, что-то происходит за это время!), то поиск выполняется и часть инструментов находит, если после этого подождать минут 10, то будут найдены все инструменты. Повторюсь что в версии 4.1.9 у меня поиск был именно в событии _trader.Connected, и все инструменты находились сразу без каких то задержек!

    private void FindSecurity(string code)
    {
        Security security = null;
        foreach (Security s in _trader.Securities) if (s.Code == code) security = s;
        if (security == null)
        {
            var criteria = new Security
            {
                Currency = CurrencyTypes.USD,
                Code = code,
            };
            _trader.LookupSecurities(criteria);
        } 
    }
            _trader.Connected += () =>
            {
                _isConnected = true;
                _trader.StartExport();
                this.GuiAsync(() => 
                    {
                        ChangeConnectStatus(true);
                        //ищем заданные инструменты
                        foreach (StrategyRecord st in Strategies.Items) FindSecurity(st.Security);
                    });
            };
Ramil
Ramil Автор

Также в версии 4.2.2.24 в случае коннекта к примеру за 4 часа до сессии информация по портфелям не приходит! в старых версиях также было все в порядке и информация о портфелях приходила при коннекте в любое время(если был коннект). Это вы можно легко увидеть запустив пример SampleBlackwood.

Mikhail Sukhov