- Прежде всего, хочу предупредить, что пользователи maratrus и maratrus суть один и тот же пользователь. К сожалению, я не смог восстановить пароль для пользователя maratrus, а именно, я правильно ответил на кодовый вопрос, получил уведомление о том, что пароль был выслан на почту. Однако, на почту не пришло никакого письма.
Прошу прощения за очередной вопрос, но это мои первые шаги со Stock# и мне необходимо познать философию проекта, а с кодом я как-нибудь разберусь. Хотел бы высказать несколько замечаний по первому примеру SampleConsole (далее везде рассматривается бумага лукойл, как и в исходных кодах):
1.
Console.Write("Введите номер счета, через который будет выставлена заявка: ");
Спрашивается про "Номер счета", но, насколько я понимаю, введенное имя сравнивается с "Кодом клиента"
trader.NewPortfolios += portfolios =>
{
...
_portfolio = portfolios.FirstOrDefault(p => p.Name == account);
...
}
Это сильно путает, особенно новичков :) Более того в документации этим отличиям уделено много внимания.
- Мне кажется, не совсем верным использовать следующую строчку кода:
trader.StartExport(trader.SecuritiesTable, trader.MyTradesTable, trader.EquityPositionsTable);
так как портфель, насколько я разобрался, берется из таблицы "Портфель по бумагам", а потому было бы честно запускать экспорт по DDE "Портфеля по бумагам" явным образом, так как он может быть не запущен (как было у меня :) - приходилось ждать бескончено долго)
- Столкнулся с такой проблемой, если открыть стакан по бумаге до запуска программы, то получаю бесконечное ожидание.
Запущенный Quik найден по пути C:\Program Files\QUIK-Junior\info.exe Введите номер счета, через который будет выставлена заявка: XXXXX Производим подключение... Подключение было произведено успешно. Дожидаемся появления в программе инструмента Лукойл и портфеля XXXXX... Портфель XXXXX появился. Инструмент Лукойл появился.
- Возникает также еще одна проблема
Запущенный Quik найден по пути C:\Program Files\QUIK-Junior\info.exe Введите номер счета, через который будет выставлена заявка: XXXXX Производим подключение... Подключение было произведено успешно. Дожидаемся появления в программе инструмента Лукойл и портфеля XXXXX... Портфель XXXXX появился. Инструмент Лукойл появился. Первоначальное значение середины спреда 0 Стакан Лукойла появился. System.ArgumentException: Цена лимитной заявки не может быть равной 0. Parameter name: order at StockSharp.Algo.TraderHelper.#=q96rsnhjjy1zjoKjqFURaiX6A72SdCnGGNnBMxj3B$p Y=(Order #=qFaKmqMcqubJuY_CXJvzyIg==) at StockSharp.Algo.TraderHelper.#=q93NW1Wf7B0m0TPobghg_hA==(Order #=q$BFO$oQm fSsKbAkA6sfDuw==) at StockSharp.Algo.BaseTrader.RegisterOrder(Order order) at SampleConsole.Program.Main() in C:\Documents and Settings\user\My Document s\Downloads\Stock#\Samples\Quik\SampleConsole\Program.cs:line 167 Press any key to continue . . .
Причина ее кроется в race condition, как мне кажется. Мы подписываемся на событие появления инструментов:
trader.NewSecurities += securities =>
{
...
if (_portfolio != null)
waitHandle.Set();
...
};
Поэтому в тот момент, когда мы подсчитываем первоначальное значение середины спрэда
var firstMid = _lkoh.BestPair.SpreadPrice / 2;
ни одно событие по обновлению стакана могло не придти.
На самом деле, мне наиболее интересна причина проблемы 3 :)
P.S. Скажите пожалуйста, а вы исходники самой библиотеки не выкладываете, случайно, чтобы, если что, самому покопаться можно было?
Kommentare (19)
Anmelden oder Konto erstellen, Melden Sie sich an oder registrieren Sie sich, um einen Kommentar zu hinterlassen
Отвечаю на 3 пункт. Если стакан был открыт до запуска программы, то необходимо убедиться, что настройки экспорта по DDE соответсвуют тем, которые приведены в документации. Иначе, по умолчанию, может быть неверно указаны имя DDE сервера, рабочая книга и лист. Продолжаю наблюдения ...
1,2,4 - сами подправите? исходники доступны на codeplex 3 - да, стакан был открыт
Я был бы безумно рад это сделать, но, к сожалению, не знаю как это делается через codeplex. У вас не найдется ссылки на небольшой пошаговый howto?
Правильно ли я понимаю:
Да, и как под windows патчи делать? Или я могу Linux diff патчи использовать?
Регистрируетесь на codeplex, подключаетесь к проекту, скидывайте нам свой ник или пишите здесь. мы добавляем вас к проекту. скачиваете исходники через, к примеру, тфс. изменяете там, проверяете компиляцию и исправление ошибки, делаете чек ин.
Так, зарегистрировался. Ник - maratrus. Я вообще-то почти всегда в Linux сижу, поэтому про тфс чуть-чуть поподробней, если можно :)
Это тфс? http://msdn.microsoft.com/en-us/vstudio/ff637362 Здоровая и платная :(
А как вы работаете с квиком и Stock# под линуксом? :) там патч можно прислать, да. P.S. добавил к проекту
С квиком раньше под wine дело имел :) Теперь и виндовая машина у меня есть, уж больно Stock# много вкусностей обещает :) Но я так и непонял, как мне патчи в правильном формате делать?
либо попробуйте патч сделать и залить в codeplex, либо - просто прикрепите тут к сообщению новому и отпишитесь. мы подхватим и положим через TFS.
Краткий комментарий к патчу:
Программа просит ввеси "Номер счета", но оперирует с "Кодом клиента". Вывод программы исправлен, чтобы не вводить пользователя в замешательство.
В процессе обработки события "появления инструмента" нельзя будить ожидающий тред, так как для рассматриваемой стратегии необходимо быть увереным, что лучший bid и ask также проинициализированны.
Необходимо включить DDE экспорт для всех таблиц, с которыми имеет дело программа.
Отредактировал ваши изменения чуток по пункту 2) и положил. Спасибо.
У меня та же самая проблема на коде \StockSharp_4.1.5_Sources\Samples\Quik\SampleConsole
После входа в
следующая линия кода
При этом я пытался скачать пример из CodePlex и там нет исправлений из патча. Исправляю вручную в соответствии с вложенным файлом патча, но
Хотя я и добавил ссылку на StockSharp.Smart.dll и
Что делать?
Патч был внесёт год назад, как я и писал. Сейчас код уже другой, но замечаний, которые исправлял патч, нет.
Читать документацию. Сейчас метод другой.
Вопрос же не по патчу, а про то, что пример не работает. Входит в бесконечный цикл (ожидания - чего именно? и зачем?) на строчке // дожидаемся появления портфеля и инструмента waitHandle.WaitOne();
и не двигается дальше. Если урать эту строчку, то дальше следуют null exceptions
Удается пройти дальше, если в КВИКе в "Обработка внешних транзакций" остановить "("Прекратить обработку") и возобновить "Начать обработку".
Но это не очень удобно. И не совсем очевидно - как же исправить код, чтобы исправить это
Что именно выводится в консоль? ProcessDataError выдает что-нибудь? Таблицы в квике настроены корректно? В таблицах есть все необходимые данные (тот же лукойл в таблице инструментов)?
Проблема связана с использованием учебного доступа BCS (и это была не единственная проблема).
Как только перешёл по совету esper на использование тестового сервера QUIK, которым огромное нескончаемое спасибо, всё, и не только это, заработало
И надеюсь моя чёрная полоса в программировании торговых роботов на этом закончилась