← Zurück

Не удается получить в программе SampleConsole.exe портфель

Не удается получить в программе SampleConsole.exe портфель. При подключении к запущенному Квику проходит успешно подключение к программе, запрашивается номер счета. Затем рапортует о том что найден инструмент LKOH... И заканчивается на ожидании поиска Портфеля. Было бы интересно узнать, что программа имеет ввиду под портфелем, поскольку настройки в Квике загружены из файла info_micex.wnd . Вроде все должно быть что нужно.

War dieses Thema hilfreich?

Thema teilen

Kommentare (21)

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

Mikhail Sukhov
Mikhail Sukhov

В примере ищется инструмент и портфель. Если не находится инструмент Лукойл - значит он отсутствует в таблице Инструменты.

watashi
watashi

Доброго времени суток, уважаемые коллеги!

У меня аналогичная проблема.

SampleConsole.exe версии 3.0.19 инструмент Лукойл находит и останавливается в ожидании портфеля. S# 3.0.19. Quik 5.18.

SampleConsole.exe версии 2.6.2 на том же квике работает нормально.

Для обоих версий S# загружаю в квик соответствующие *.wnd и проверяю соответствующими версиями verifier'ов.

На что обратить внимание?

Спасибо.

Mikhail Sukhov
Mikhail Sukhov

NewSecurities вызывается?

watashi
watashi

Mikhail Sukhov: NewSecurities вызывается?

Эээ... не знаю. Я просто запускаю sampleconsole.exe из папки EXE архива S#. )))

surkov66
surkov66

изначально в примере

trader.Terminal.StartDde(trader.SecuritiesTable, trader.MyTradesTable, trader.EquityPositionsTable);

исправил на trader.Terminal.StartDde(trader.SecuritiesTable, trader.MyTradesTable, trader.EquityPortfoliosTable);

портфель появился

watashi
watashi

surkov66: изначально в примере

trader.Terminal.StartDde(trader.SecuritiesTable, trader.MyTradesTable, trader.EquityPositionsTable);

исправил на trader.Terminal.StartDde(trader.SecuritiesTable, trader.MyTradesTable, trader.EquityPortfoliosTable);

портфель появился

Исправил. Не помогло. (((

watashi
watashi

Заработало на демо-счете QUIK-Junior 5.21. 🤨

Mikhail Sukhov
Mikhail Sukhov

watashi: Заработало на демо-счете QUIK-Junior 5.21. 🤨

Бывает такое, когда нет ни одной позы.

watashi
watashi

Mikhail Sukhov:

watashi: Заработало на демо-счете QUIK-Junior 5.21. 🤨

Бывает такое, когда нет ни одной позы.

На боевом квике не работает. Поза по инструменту есть. 🤨

watashi
watashi

watashi: На боевом квике не работает. Поза по инструменту есть. 🤨

Портфель появляется, если открыть позу руками (или просто выставить заявку) в момент ожидания портфеля.

Oldman
Oldman

Добрый день всем, подскажите куда смотреть. QUIK 5.23.0.119 (под УБ) Stock# 3.2.10 Опыта в программировании 0 Разбираю SampleConsole пример, не запускается торговый алгоритм из примера. В коде заменил только Лукойл, на местный инструмент ALMK

  • проверял настройки Verifier'ом - без ошибок (так как готовые .wnd файлы не подходят для УБ)

Результат работы консольного приложения:

Экспорт по dde Инструмент, Мои сделки, Позиции по бумагам, Стакана - запускается.

Пробовал заменить строчку, как указывали выше на

trader.Terminal.StartDde(trader.SecuritiesTable, trader.MyTradesTable, trader.EquityPortfoliosTable); - не помогло. Поставил запуск dde обеих таблиц trader.StartExport(trader.SecuritiesTable, trader.MyTradesTable, trader.EquityPortfoliosTable, trader.EquityPositionsTable); В терминале пробовал покупать-продавать инструмент, чтобы в консоли сделка прошла - не появились сделки.

Я так подозреваю, что в событие trader.NewPortfolios += portfolios => у меня не полностью отработало (хотя ошибок компилятор не выдавал), а именно не выдало сообщение "Портфель {0} появился." Также не отработало trader.NewMyTrades += myTrades => поскольку не появляются сделки.

Посоветуйте пожалуйста, в какую сторону курить мануал, дабы довести пример до рабочего состояния? :)

Church
Church

Подозреваю, что вы что-то не то пишете в качестве портфеля (у меня на демо он = логину). Попробуйте вывести список trader.Portfolios.

Alexander
Alexander

ProcessDataError что-нибудь выводит?

Oldman
Oldman

Church: Подозреваю, что вы что-то не то пишете в качестве портфеля (у меня на демо он = логину). Попробуйте вывести список trader.Portfolios.

У меня логин = Код клиента А номер счета, судя по мануалам = Счет депо (пробую робота для спот площадки)

Alexander: ProcessDataError что-нибудь выводит?

Пробую разобраться как это событие подключить в пример.

Вариант #1, в начало кода добавил

// создаем шлюз к Quik-у using (var trader = new QuikTrader(quikPath)) { // необходимо раскомментировать, если идет работа с РТС Стандарт //trader.FormatTransaction += builder => builder.RemoveInstruction(TransactionBuilder.ExecutionCondition);

//события ошибок trader.ProcessDataError += error => Console.WriteLine(error); { Console.WriteLine("Errors:"); }; Сообщение Errors: выводится, но ошибок нету.

Вариант #2 из примера SampleFewQuiks

//события ошибок trader.ProcessDataError += OnError;

в конец кода: private static void OnError(Exception error) { Console.WriteLine(error); } Ошибок при компилировании нету, но и результата нет.

Alexander
Alexander

Покажите таблицу портфелей для ммвб. И что выводит Trader.Portfolios?

Oldman
Oldman

Alexander: Покажите таблицу портфелей для ммвб. И что выводит Trader.Portfolios? я на УБ работаю, а не ММВБ (но с точки зрения Квика наверное разницы нет, так как это клон ММВБ)

Таблицы пустые, но опций чтобы создать портфель не нашел, при этом торговать можно нормально.

Событие trader.NewPortfolios += portfolios => ничего не выводит (нету сообщения о том, что Портфель {0} появился.)

{ if (_portfolio == null) { // находим ALMK и присваиваем ее переменной ALMK _portfolio = portfolios.FirstOrDefault(p => p.Name == account); Console.WriteLine("Test 0");

    if (_portfolio != null)
    {
     Console.WriteLine("Портфель {0} появился.", account);

      // если инструмент и стакан уже появились,
      // то извещаем об этом основной поток для выставления заявки
        if (_ALMK != null && _depth != null)
          waitHandle.Set();
          Console.WriteLine("Test 1");
    }
  }
 Console.WriteLine("Test 2");

}; В результате вывод: Test 0 Test 2

Alexander
Alexander

Вы меня не поняли. Выведите portfolios.

раз Test0 выводит - значит какие-то портфели приходят. вы просто не тот портфель ищите. посмотрите какие приходят - распечатаейте все portfolios - Name в частности. И посмотрите на account - он небось ни с одним Name не совпадает.

И покажите скриншот таблицы с порфтелями в квике, а не настройки для портфелей qpile :)

Oldman
Oldman
Oldman

Портфель:

С выводом portfolios заминка, точнее заминка с основами программирования :) Нашел ваш пример (кусок кода), в другой теме для такого вывода.


    trader.NewPortfolios += portfolios =>
                        
                        {
                            var portfolioString = "";
                             foreach (var portfolio in portfolios)
                                 {
                                  portfolioString += portfolio.Name + " : " + portfolio.Exchange + " : " + portfolio.BeginAmount + " : " +
                                  portfolio.CurrentAmount + " : " + portfolio.Commission + " : " + portfolio.Leverage + 
                                  Environment.NewLine;
                                  portfolioString +=
                                  };
                              
                            if (_portfolio == null)
                            {
                                // находим ALMK и присваиваем ее переменной ALMK
                                _portfolio = portfolios.FirstOrDefault(p => p.Name == account);

                                if (_portfolio != null)
                                {
                                    Console.WriteLine("Портфель {0} появился.", account);

                                    // если инструмент и стакан уже появились,
                                    // то извещаем об этом основной поток для выставления заявки
                                    if (_ALMK != null && _depth != null)
                                        waitHandle.Set();
                                }
                            }
                                                       
                        };

Вставленный код не компилируется - ошибка в 13ой строке Invalid expression term '}' Изучаю гугл, на предмет того чем структура не подошла.

Alexander
Alexander

Oldman: Портфель:

С выводом portfolios заминка, точнее заминка с основами программирования :) Нашел ваш пример (кусок кода), в другой теме для такого вывода.

trader.NewPortfolios += portfolios =>
                    
                    {
                        var portfolioString = "";
                         foreach (var portfolio in portfolios)
                             {
                              portfolioString += portfolio.Name + " : " + portfolio.Exchange + " : " + portfolio.BeginAmount + " : " +
                              portfolio.CurrentAmount + " : " + portfolio.Commission + " : " + portfolio.Leverage + 
                              Environment.NewLine;
                              portfolioString +=
                              };
                          
                        if (_portfolio == null)
                        {
                            // находим ALMK и присваиваем ее переменной ALMK
                            _portfolio = portfolios.FirstOrDefault(p => p.Name == account);

                            if (_portfolio != null)
                            {
                                Console.WriteLine("Портфель {0} появился.", account);

                                // если инструмент и стакан уже появились,
                                // то извещаем об этом основной поток для выставления заявки
                                if (_ALMK != null && _depth != null)
                                    waitHandle.Set();
                            }
                        }
                                                   
                    };
> 
> 
> Вставленный код не компилируется - ошибка в 13ой строке Invalid expression term '}'
> Изучаю гугл, на предмет того чем структура {} не подошла.



то что замазано - одинаково? а то непонятно.
да и смысл замазывать? :))

на 13 строчке того кода что вы вставили никакого "}" нет.


В вашем коде:
_portfolio = portfolios.FirstOrDefault(p => p.Name == account);


ещё раз задам вопрос, т.к. он остался без ответа. чему здесь равен account?


ЗюЫю В вашем коде "portfolioString +=" - лишнее. Как раз из-за этого ошибка. После цикла сделайте вывод portfolioString в тот же самый MessageBox и скопируйте его содержание.
Oldman
Oldman

Да, на скриншотах значение Код Клиента одинаковое. (привычка затирать персонифицированные данные уже не помню откуда началась у меня) :)

Alexander: В вашем коде: _portfolio = portfolios.FirstOrDefault(p => p.Name == account); ещё раз задам вопрос, т.к. он остался без ответа. чему здесь равен account?

В начале кода я прописал: var account = "test0";

Alexander: ЗюЫю В вашем коде "portfolioString +=" - лишнее. Как раз из-за этого ошибка. После цикла сделайте вывод portfolioString в тот же самый MessageBox и скопируйте его содержание.

О :) Огромное спасибо, заработало :)

invst1408 : : 0 RUB : 0 RUB : 0 : 0

Получается что, портфель определился верно, но не задетектилась Биржа (portfolio.Exchange)?

Alexander
Alexander

Oldman: Да, на скриншотах значение Код Клиента одинаковое. (привычка затирать персонифицированные данные уже не помню откуда началась у меня) :)

Alexander: В вашем коде: _portfolio = portfolios.FirstOrDefault(p => p.Name == account); ещё раз задам вопрос, т.к. он остался без ответа. чему здесь равен account?

В начале кода я прописал: var account = "test0";

Alexander: ЗюЫю В вашем коде "portfolioString +=" - лишнее. Как раз из-за этого ошибка. После цикла сделайте вывод portfolioString в тот же самый MessageBox и скопируйте его содержание.

О :) Огромное спасибо, заработало :)

invst1408 : : 0 RUB : 0 RUB : 0 : 0

Получается что, портфель определился верно, но не задетектилась Биржа (portfolio.Exchange)?

Так ищите не по test0, а по invst1408. в NewPortfolios наверное не идентифицировалась биржа. в ChangesPortfolios смотрите.