← Zurück

SampleConsole Problems

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

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

1.


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

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


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

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

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

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

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

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

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

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

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

War dieses Thema hilfreich?

Thema teilen

Kommentare (19)

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

_maratrus_
_maratrus_ Autor

Отвечаю на 3 пункт. Если стакан был открыт до запуска программы, то необходимо убедиться, что настройки экспорта по DDE соответсвуют тем, которые приведены в документации. Иначе, по умолчанию, может быть неверно указаны имя DDE сервера, рабочая книга и лист. Продолжаю наблюдения ...

Alexander
Alexander

1,2,4 - сами подправите? исходники доступны на codeplex 3 - да, стакан был открыт

_maratrus_
_maratrus_ Autor

Alexander: 1,2,4 - сами подправите? исходники доступны на codeplex 3 - да, стакан был открыт

Я был бы безумно рад это сделать, но, к сожалению, не знаю как это делается через codeplex. У вас не найдется ссылки на небольшой пошаговый howto?

Правильно ли я понимаю:

  1. Зарегистрироваться на codeplex
  2. Сделать upload патча?
_maratrus_
_maratrus_ Autor

maratrus:

Alexander: 1,2,4 - сами подправите? исходники доступны на codeplex 3 - да, стакан был открыт

Я был бы безумно рад это сделать, но, к сожалению, не знаю как это делается через codeplex. У вас не найдется ссылки на небольшой пошаговый howto?

Правильно ли я понимаю:

  1. Зарегистрироваться на codeplex
  2. Сделать upload патча?

Да, и как под windows патчи делать? Или я могу Linux diff патчи использовать?

Alexander
Alexander

maratrus:

Alexander: 1,2,4 - сами подправите? исходники доступны на codeplex 3 - да, стакан был открыт

Я был бы безумно рад это сделать, но, к сожалению, не знаю как это делается через codeplex. У вас не найдется ссылки на небольшой пошаговый howto?

Правильно ли я понимаю:

  1. Зарегистрироваться на codeplex
  2. Сделать upload патча?

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

_maratrus_
_maratrus_ Autor

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

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

_maratrus_
_maratrus_ Autor

maratrus:

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

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

Это тфс? http://msdn.microsoft.com/en-us/vstudio/ff637362 Здоровая и платная :(

Alexander
Alexander

maratrus:

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

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

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

_maratrus_
_maratrus_ Autor

Alexander:

maratrus:

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

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

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

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

Alexander
Alexander

maratrus:

Alexander:

maratrus:

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

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

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

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

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

_maratrus_
_maratrus_ Autor

Alexander:

maratrus:

Alexander:

maratrus:

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

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

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

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

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

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

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

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

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

Alexander
Alexander

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

Геннадий Ванин (Gennady Vanin)
  1. Столкнулся с такой проблемой, если открыть стакан по бумаге до запуска программы, то получаю бесконечное ожидание.

Запущенный 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
Alexander

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

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

Alexander
Alexander

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

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

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

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

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

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

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

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

esper
esper

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

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

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

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

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