SampleConsole Problems
Atom
15.09.2011


0. Прежде всего, хочу предупредить, что пользователи maratrus и _maratrus_ суть один и тот же пользователь. К сожалению, я не смог восстановить пароль для пользователя maratrus, а именно, я правильно ответил на кодовый вопрос, получил уведомление о том, что пароль был выслан на почту. Однако, на почту не пришло никакого письма.

Прошу прощения за очередной вопрос, но это мои первые шаги со Stock# и мне необходимо познать философию проекта, а с кодом я как-нибудь разберусь.
Хотел бы высказать несколько замечаний по первому примеру SampleConsole (далее везде рассматривается бумага лукойл, как и в исходных кодах):

1.
Код

Console.Write("Введите номер счета, через который будет выставлена заявка: ");

Спрашивается про "Номер счета", но, насколько я понимаю, введенное имя сравнивается с "Кодом клиента"
Код

trader.NewPortfolios += portfolios =>
{
...
    _portfolio = portfolios.FirstOrDefault(p => p.Name == account);
...
}

Это сильно путает, особенно новичков :)
Более того в документации этим отличиям уделено много внимания.

2. Мне кажется, не совсем верным использовать следующую строчку кода:
Код

trader.StartExport(trader.SecuritiesTable, trader.MyTradesTable, trader.EquityPositionsTable);

так как портфель, насколько я разобрался, берется из таблицы "Портфель по бумагам", а потому было
бы честно запускать экспорт по DDE "Портфеля по бумагам" явным образом, так как он может быть
не запущен (как было у меня :) - приходилось ждать бескончено долго)

3. Столкнулся с такой проблемой, если открыть стакан по бумаге до запуска программы, то получаю
бесконечное ожидание.

Цитата:

Запущенный Quik найден по пути C:\Program Files\QUIK-Junior\info.exe
Введите номер счета, через который будет выставлена заявка: XXXXX
Производим подключение...
Подключение было произведено успешно.
Дожидаемся появления в программе инструмента Лукойл и портфеля XXXXX...
Портфель XXXXX появился.
Инструмент Лукойл появился.


4. Возникает также еще одна проблема

Цитата:

Запущенный 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. Скажите пожалуйста, а вы исходники самой библиотеки не выкладываете, случайно, чтобы, если что, самому покопаться можно было?

Теги:


Спасибо:


< 1 2 
_maratrus_

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


Alexander Перейти
_maratrus_ Перейти
Alexander Перейти
_maratrus_ Перейти
Alexander Перейти

Регистрируетесь на codeplex, подключаетесь к проекту, скидывайте нам свой ник или пишите здесь. мы добавляем вас к проекту.
скачиваете исходники через, к примеру, тфс. изменяете там, проверяете компиляцию и исправление ошибки, делаете чек ин.


Так, зарегистрировался. Ник - maratrus.
Я вообще-то почти всегда в Linux сижу, поэтому про тфс чуть-чуть поподробней, если можно :)


А как вы работаете с квиком и Stock# под линуксом? :)
там патч можно прислать, да.
P.S. добавил к проекту


С квиком раньше под wine дело имел :)
Теперь и виндовая машина у меня есть, уж больно Stock# много вкусностей обещает :)
Но я так и непонял, как мне патчи в правильном формате делать?



либо попробуйте патч сделать и залить в codeplex, либо - просто прикрепите тут к сообщению новому и отпишитесь. мы подхватим и положим через TFS.


Краткий комментарий к патчу:

1. Программа просит ввеси "Номер счета", но оперирует с "Кодом клиента".
Вывод программы исправлен, чтобы не вводить пользователя в замешательство.

2. В процессе обработки события "появления инструмента" нельзя
будить ожидающий тред, так как для рассматриваемой стратегии необходимо
быть увереным, что лучший bid и ask также проинициализированны.

3. Необходимо включить DDE экспорт для всех таблиц, с которыми имеет
дело программа.
Спасибо:

Alexander

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


Отредактировал ваши изменения чуток по пункту 2) и положил.
Спасибо.
Спасибо:

Геннадий Ванин (Gennady Vanin)

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


_maratrus_ Перейти

3. Столкнулся с такой проблемой, если открыть стакан по бумаге до запуска программы, то получаю
бесконечное ожидание.

Цитата:

Запущенный Quik найден по пути C:\Program Files\QUIK-Junior\info.exe
Введите номер счета, через который будет выставлена заявка: XXXXX
Производим подключение...
Подключение было произведено успешно.
Дожидаемся появления в программе инструмента Лукойл и портфеля XXXXX...
Портфель XXXXX появился.
Инструмент Лукойл появился.




У меня та же самая проблема на коде \StockSharp_4.1.5_Sources\Samples\Quik\SampleConsole

После входа в
Цитата:
waitHandle.WaitOne();


следующая линия кода
Цитата:
const decimal delta = 0.001m;

никогда не выполняется

При этом я пытался скачать пример из CodePlex и там нет исправлений из патча.
Исправляю вручную в соответствии с вложенным файлом патча, но
Цитата:
// запускаем экспорт стакана
trader.RegisterQuotes(_lkoh);

выдаёт:
Цитата:
Error 1 'StockSharp.Quik.QuikTrader' does not contain a definition for 'RegisterQuotes' and no extension method 'RegisterQuotes' accepting a first argument of type 'StockSharp.Quik.QuikTrader' could be found (are you missing a using directive or an assembly reference?)


Хотя я и добавил ссылку на StockSharp.Smart.dll и
Цитата:
using StockSharp.Smart;


Что делать?
Спасибо:

Alexander

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


Читать документацию. Сейчас метод другой.
Спасибо:

Геннадий Ванин (Gennady Vanin)

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


Alexander Mukhanchikov Перейти
Читать документацию. Сейчас метод другой.

Я делал вначле по документации
После того, как столкнулся с этой проблемой - начал искать по форуму и пробовать другое

Спасибо:

Alexander

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


Геннадий Ванин (Gennady Vanin) Перейти
При этом я пытался скачать пример из CodePlex и там нет исправлений из патча.


Патч был внесёт год назад, как я и писал. Сейчас код уже другой, но замечаний, которые исправлял патч, нет.

Спасибо:

Геннадий Ванин (Gennady Vanin)

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


Вопрос же не по патчу, а про то, что пример не работает.
Входит в бесконечный цикл (ожидания - чего именно? и зачем?) на строчке
// дожидаемся появления портфеля и инструмента
waitHandle.WaitOne();

и не двигается дальше.
Если урать эту строчку, то дальше следуют null exceptions

Удается пройти дальше, если в КВИКе в "Обработка внешних транзакций" остановить "("Прекратить обработку") и возобновить "Начать обработку".

Но это не очень удобно. И не совсем очевидно - как же исправить код, чтобы исправить это
Спасибо:

esper

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


Что именно выводится в консоль? ProcessDataError выдает что-нибудь? Таблицы в квике настроены корректно? В таблицах есть все необходимые данные (тот же лукойл в таблице инструментов)?
Спасибо:

Геннадий Ванин (Gennady Vanin)

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


Проблема связана с использованием учебного доступа BCS (и это была не единственная проблема).

Как только перешёл по совету esper на использование тестового сервера QUIK, которым огромное нескончаемое спасибо, всё, и не только это, заработало

И надеюсь моя чёрная полоса в программировании торговых роботов на этом закончилась
Спасибо:
< 1 2 

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

loading
clippy