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


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

Теги:


Спасибо:




21 Ответов
Mikhail Sukhov

Фотография
Автор статей Программист Трейдер
Дата: 09.08.2010
Ответить


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

Спасибо:

watashi

Фотография
Дата: 25.03.2011
Ответить


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

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

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

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

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

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

Спасибо.
Спасибо:

Mikhail Sukhov

Фотография
Автор статей Программист Трейдер
Дата: 25.03.2011
Ответить


NewSecurities вызывается?
Спасибо:

watashi

Фотография
Дата: 25.03.2011
Ответить


Mikhail Sukhov Перейти
NewSecurities вызывается?


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

surkov66

Фотография
Дата: 25.03.2011
Ответить


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

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



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

портфель появился
Спасибо:

watashi

Фотография
Дата: 25.03.2011
Ответить


surkov66 Перейти
изначально в примере

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



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

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


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

watashi

Фотография
Дата: 26.03.2011
Ответить


Заработало на демо-счете QUIK-Junior 5.21. Confused
Спасибо:

Mikhail Sukhov

Фотография
Автор статей Программист Трейдер
Дата: 26.03.2011
Ответить


watashi Перейти
Заработало на демо-счете QUIK-Junior 5.21. Confused


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

watashi

Фотография
Дата: 28.03.2011
Ответить


Mikhail Sukhov Перейти
watashi Перейти
Заработало на демо-счете QUIK-Junior 5.21. Confused


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


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

watashi

Фотография
Дата: 28.03.2011
Ответить


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


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

Oldman

Фотография
Дата: 12.09.2011
Ответить


Добрый день всем, подскажите куда смотреть.
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

Фотография
Дата: 12.09.2011
Ответить


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

Alexander

Фотография
Дата: 12.09.2011
Ответить


ProcessDataError что-нибудь выводит?
Спасибо:

Oldman

Фотография
Дата: 13.09.2011
Ответить


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

Фотография
Дата: 13.09.2011
Ответить


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

Oldman

Фотография
Дата: 13.09.2011
Ответить


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

я на УБ работаю, а не ММВБ (но с точки зрения Квика наверное разницы нет, так как это клон ММВБ)

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


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

Alexander

Фотография
Дата: 13.09.2011
Ответить


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

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

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

Oldman

Фотография
Дата: 14.09.2011
Ответить


Портфель:


С выводом 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

Фотография
Дата: 14.09.2011
Ответить


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

Фотография
Дата: 14.09.2011
Ответить


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

:)

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

Фотография
Дата: 14.09.2011
Ответить


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 смотрите.
Спасибо: Oldman


Добавить файлы через драг-н-дроп, , или вставить из буфера обмена.

loading
clippy