- Прежде всего, хочу предупредить, что пользователи 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. Скажите пожалуйста, а вы исходники самой библиотеки не выкладываете, случайно, чтобы, если что, самому покопаться можно было?
Comentários (19)
Entrar ou Criar conta, Faça login ou cadastre-se para deixar um comentário
Отвечаю на 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, которым огромное нескончаемое спасибо, всё, и не только это, заработало
И надеюсь моя чёрная полоса в программировании торговых роботов на этом закончилась