Не регистрируется заявка в RealTimeEmulationTrader
Atom Ответить
20.09.2012


S# 4.1.4
Не регистрируется заявка в RealTimeEmulationTrader<QuikTrader>.
Что делал:
Я взял пример SampleSMA, поменял
Код
_trader = new QuikTrader(Path.Text);

на
Код
_trader = new RealTimeEmulationTrader<QuikTrader>(new QuikTrader(Path.Text));


Поменял инструмент на RIZ2.

Verifier говорит, что у Квика все хорошо.

Лог:

и далее количество заявок продолжает нарастать.

Я что-то делаю не так?
Если да, то что, куда смотреть ?



Спасибо:




59 Ответов
< 1 2 3  >
Дюшес

Фотография
Программист
Дата: 27.10.2012
Ответить


Понял, в понедельник сделаю.
Спасибо:

Дюшес

Фотография
Программист
Дата: 27.10.2012
Ответить


Debug лог трейдера
Спасибо:

tony_inv

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


Была ли эта проблема решена?
Спасибо:

pyhta4og

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


Дюшес Перейти
Debug лог трейдера


Судя по логу у вас все стаканы и сделки из шлюза приходят с Time = 0. и LastChangeTime = 0.

Какой шлюз используется, квик?
Спасибо:

Дюшес

Фотография
Программист
Дата: 07.11.2012
Ответить


Использую AlfaTrader. На квике пробовал, но эмулятор тоже не работает. Сделать для него debug log?
Спасибо:

pyhta4og

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


Дюшес Перейти
Использую AlfaTrader. На квике пробовал, но эмулятор тоже не работает. Сделать для него debug log?

Да, сделайте это.

И еще, попробуйте залогировать в своей стратегии стаканы и трейды чтобы убедиться что в поле MarketDepth.LastChangeTime и Trade.Time не нулевые значения.

По вашим логам выходит что приходит в эмулятор нулевое время для стаканов и сделок из AlfaTrader и поэтому сообщения тупо буферизируются и не исполняются.

Соответственно надо понять, ошибка в AlfaTrader или в эмуляторе.



Спасибо:

Дюшес

Фотография
Программист
Дата: 09.11.2012
Ответить


pyhta4og Перейти

И еще, попробуйте залогировать в своей стратегии стаканы и трейды чтобы убедиться что в поле MarketDepth.LastChangeTime и Trade.Time не нулевые значения.

В AlfaTrader поле Trade.Time изменяется согласно времени сделок, а MarketDepth.LastChangeTime имеет всегда нулевые значения.

В QuikTrader значения в этих полях не нулевые и изменяются. Отправляю 2 ордера: лимитный и маркет, на покупку RIZ2. После этого проверяю сделки и ордера в trader и то же самое в strategy. Получаю такой вывод:

trader.mytrade=09.11.2012 18:32:12 1 140610 1 от заявки 1830657/1 Покупка Цена=141000 Объем=1 Сост=Active Бал=1
trader.order=1830657 Limit 141000 Active
trader.order=1830658 Market 0 Active

strategy.mytade="" - сделки нет
strategy.order=1830657 Limit 141000 Done
strategy.order=1830658 Market 0 Active

Т.е. в стратегии лимитный ордер исполняется, а в трейдере он значится как активный.
В трейдере совершена сделка, а в стратегии ее нет.

Лог для квика:
Спасибо:

pyhta4og

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


Дюшес Перейти
pyhta4og Перейти

И еще, попробуйте залогировать в своей стратегии стаканы и трейды чтобы убедиться что в поле MarketDepth.LastChangeTime и Trade.Time не нулевые значения.

В AlfaTrader поле Trade.Time изменяется согласно времени сделок, а MarketDepth.LastChangeTime имеет всегда нулевые значения.

В QuikTrader значения в этих полях не нулевые и изменяются. Отправляю 2 ордера: лимитный и маркет, на покупку RIZ2. После этого проверяю сделки и ордера в trader и то же самое в strategy. Получаю такой вывод:

1.Я не совсем понимаю что у вас за логи. Нет временной метки и не понятно когда вам приходили эти события. Лучше бы использовать единый файл лога и для трейдера и для стратегий - получится смесь всех логов но там виден порядок хотя бы.
Цитата:

trader.mytrade=09.11.2012 18:32:12 1 140610 1 от заявки 1830657/1 Покупка Цена=141000 Объем=1 Сост=Active Бал=1
trader.order=1830657 Limit 141000 Active
trader.order=1830658 Market 0 Active

strategy.mytade="" - сделки нет
strategy.order=1830657 Limit 141000 Done
strategy.order=1830658 Market 0 Active

Т.е. в стратегии лимитный ордер исполняется, а в трейдере он значится как активный.
В трейдере совершена сделка, а в стратегии ее нет.

Лог для квика:

2. непонятно в каком трейдере (quik или эмулейшн) и как (и в какой момент) в трейдере вы смотрите активность ордера (т.е. в каком обработчике)

3. То что вам не пришла сделка - приведите код правила как вы на нее подписываетесь, возможно вы неправильно подписались.

4. По логам эмулятора.

Вот эти две следующие строки лога означают что MyTrade и изменение стейта ордера 183067 на Done c Balance=0 доставлены клиенту (стратегии). Это я сужу по пометке CL: которая означает что был Raise событий клиенту. Соответственно в этих логах я проблемы не вижу.

2012.11.10 00:32:15.296|Debug |RealTimeEmulationTrader`1|CL:MyTrades 18:32:12.578 09.11.2012 18:32:12 1 140610 1 от заявки 1830657/1 Покупка Цена=141000 Объем=1 Сост=Active Бал=1
@21:32:12.578[2

2012.11.10 00:32:15.296|Debug |RealTimeEmulationTrader`1|CL:Changed,T=18:32:12.578,1830657/1 Покупка Цена=141000 Объем=1 Сост=Done Бал=0
@21:32:12.578[1
Спасибо:

Дюшес

Фотография
Программист
Дата: 14.11.2012
Ответить


Цитата:

1.Я не совсем понимаю что у вас за логи. Нет временной метки и не понятно когда вам приходили эти события. Лучше бы использовать единый файл лога и для трейдера и для стратегий - получится смесь всех логов но там виден порядок хотя бы.

Я просто взял пример SampleRealTimeTesting, удалил лишнее и добавил кнопку. Сначала запускаю стратегию, она выставляет заявки, а потом жму на эту кнопку и получаю тот самый вывод, т.е. уже после исполнения ордера и совершения сделки.
Код такой:
Код

private void button1_Click(object sender, RoutedEventArgs e)
{
  _trader.MyTrades.ForEach(t => Debug.WriteLine("trader.mytrade={0}", t));
  _trader.Orders.ForEach(o => Debug.WriteLine("trader.order={0} {1} {2} {3} {4}", o.TransactionId, o.Type, o.Price, o.State, o.Status));

  _strategy.MyTrades.ForEach(t => Debug.WriteLine("strategy.mytrade={0}", t));
  _strategy.Orders.ForEach(o => Debug.WriteLine("strategy.order={0} {1} {2} {3} {4}", o.TransactionId, o.Type, o.Price, o.State, o.Status));
}


Цитата:

2. непонятно в каком трейдере (quik или эмулейшн) и как (и в какой момент) в трейдере вы смотрите активность ордера (т.е. в каком обработчике)

Состояние ордеров вижу в компоненте OrderGrid и через тот же вывод (по кнопке).

Цитата:

3. То что вам не пришла сделка - приведите код правила как вы на нее подписываетесь, возможно вы неправильно подписались.

Сделки смотрю через компонент TradeGrid, потом опять через тот же вывод (по кнопке) и еще ловлю через правило:
Код

this
   .WhenNewMyTrades()
   .Do(mytrades =>
   {
     mytrades.ForEach(mytrade => Debug.WriteLine(mytrade));
   })
   .Apply(this);


Цитата:

4. По логам эмулятора.

Вот эти две следующие строки лога означают что MyTrade и изменение стейта ордера 183067 на Done c Balance=0 доставлены клиенту (стратегии). Это я сужу по пометке CL: которая означает что был Raise событий клиенту. Соответственно в этих логах я проблемы не вижу.

Да, похоже сделка исполняется, но ее можно увидеть только в трейдере. В стратегии она нигде не появляется.
И странное состояние исполненного ордера в трейдере - Active, хотя в стратегии оно - Done.

Данный тестовый проект:
Спасибо:

Alexander

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


Просьба проверить на свежей версии с codeplex и с другим трейдером - не AlfaTrader.
Спасибо:

Дюшес

Фотография
Программист
Дата: 10.01.2013
Ответить


Попробовал на альфе и квике. Заявки выставляются, но не исполняются при наступлении условия лимитированные ордера. Лимитные заявки, отправленные по рынку, исполняются. Debug лог нужен?
Спасибо:

esper

Фотография
Программист
Дата: 10.01.2013
Ответить


Версия какая у вас? Если качали с кодеплекса, то какой номер ревизии?
Спасибо:

Дюшес

Фотография
Программист
Дата: 10.01.2013
Ответить


4.1.7.21978
Спасибо:

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

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


Дюшес Перейти

Данный тестовый проект:
SampleRealTimeTesting.rar (7,147kb)

Пробовал посмотреть невзначай ненароком
И совсем запутался, что же Вы и зачем делаете

У Вас там 3 проекта

В SampleRealTimeTesting.csproj
используется графический интерфейс (WPF .xaml)из SampleRealTimeTesting StockSharp, в котором код соединения SmartCOM аменён на соединение с КВИК

Код
private void ConnectClick(object sender, RoutedEventArgs e)
{
    if (!_isConnected)
    {
        if (_trader == null)
        {
 // создаем шлюз
             _trader = new RealTimeEmulationTrader<QuikTrader>(new QuikTrader());

             Portfolios.Trader = _trader;
             // подписываемся на событие успешного соединения
             _trader.Connected += () =>
             {
           // возводим флаг, что соединение установлено
                 _isConnected = true;

           // разблокируем кнопку Экспорт
                  this.GuiAsync(() => ChangeConnectStatus(true));


но соединение к КВИК нигде ркально не производится (и в принципе не может произвестись ни из GUI? ни из кода), хотя все плюшки для отвода глаз присутствуют

Для этого нужно было бы в коде инициализировать Trader с определением и указанием пути к файлу info.exe, откуда запускается КВИК
  • Trader = new QuikTrader(filePathQu2QUIK);

(что нигде не сделано), имея запущенный КВИК с установленным соединением
(поскольку в коде он тоже нигде не запускается)

Что-то типа

Код
var quikPath = QuikTerminal.GetDefaultPath();

if (quikPath.IsEmpty())
{
    MessageBox.Show("Не найден ни один запущенный Quik");
    return;
}

if (!_isConnected)
{
    if (Path.Text.IsEmpty())
    MessageBox.Show(this, "Путь к Quik не выбран");
}
if (!_isConnected)
{
    if (Trader == null)
    {
         Trader = new QuikTrader(Path.Text);//vgv cuidado

         _isConnected = true; 

В проектах AlfaDirect.csproj и AlfaTest.csproj
я вообще не нашёл ни одного результата поиском по "RealTime" и "Emulation"

Update:
К тому же, в обоих проектах (AlfaDirect.csproj и AlfaTest.csproj) используется GUI и код TestForm:System.Windows.Forms.Form, при том, что туда вставляется (многопоточный и асинхронный) код WPF и StockSharp на WPF
А зачем такие жестокие эксперименты?


Почему бы Вам не взять готовые куски из Samples StockSharp, предвапительно разобрав их работу или хотя бы сверившись с описаниями документации?
Спасибо:

Дюшес

Фотография
Программист
Дата: 11.01.2013
Ответить


А чего просто запустить руками и ввести пароль религия не позволяет? :)
Спасибо:

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

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


Дюшес Перейти
А чего просто запустить руками и ввести пароль религия не позволяет? :)

Я не знаю ни Вашей религии, ни , что она Вам запрещает при использовании C# или S#.
Никаких намёков или поводов переходить на личности и личные убеждения или верования я никогда никому не давал.

В КВИК, если Вы запускаете его руками, то устанавливаете соединение QUIK с сервером, вводя руками логин+пароль или же Вы можете соединить терминал с сервреом из кода.

Но у Вас код не имеет никакой информации, как подсоединться к уже запущенному терминалу КВИК (если он уже запущен и подсоединен к серверу) и не запускает его.
У Вас создаётся шлюз КВИК, который не имееет никакой информации, ни как подсоединится к запущенному терминалу КВИК, никак не определяет и не считывает такую инфу (например, из GUI), ни пытается это сделать, в принципе эту информацию не может никак использовать
У Вас вообще в коде ничего нет, относящееся к терминалу КВИК! только шлюз КВИК в вакууме без какого-либо конкретно используемого терминала

2й и 3й проект вообще непонятно как относятся к RealTimeEmulation
Спасибо:

esper

Фотография
Программист
Дата: 11.01.2013
Ответить


Дюшес Перейти
4.1.7.21978


Дюшес Перейти
Попробовал на альфе и квике. Заявки выставляются, но не исполняются при наступлении условия лимитированные ордера. Лимитные заявки, отправленные по рынку, исполняются. Debug лог нужен?


Сразу не заметил, какую именно заявку вы выставляете? Стоп-заявку, лимитку или маркет?
Спасибо:

esper

Фотография
Программист
Дата: 11.01.2013
Ответить


Геннадий Ванин (Gennady Vanin) Перейти
У Вас создаётся шлюз КВИК, который не имееет никакой информации, ни как подсоединится к запущенному терминалу КВИК, никак не определяет и не считывает такую инфу (например, из GUI), ни пытается это сделать, в принципе эту информацию не может никак использовать


Конструктор
Код
QuikTrader()
равносилен вызову
Код
QuikTrader(QuikTerminal.GetDefaultPath())
и, если запущен только один терминал, то никаких проблем быть не должно.
Спасибо: Геннадий Ванин (Gennady Vanin)

Дюшес

Фотография
Программист
Дата: 11.01.2013
Ответить


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

Никаких намёков или поводов переходить на личности и личные убеждения или верования я никогда никому не давал.

Да я не переходил на личности, я просто пошутил. Если обидел, то прошу прощения.
Спасибо:

Дюшес

Фотография
Программист
Дата: 11.01.2013
Ответить


esper Перейти
Дюшес Перейти
4.1.7.21978


Дюшес Перейти
Попробовал на альфе и квике. Заявки выставляются, но не исполняются при наступлении условия лимитированные ордера. Лимитные заявки, отправленные по рынку, исполняются. Debug лог нужен?


Сразу не заметил, какую именно заявку вы выставляете? Стоп-заявку, лимитку или маркет?


Стоп-заявку не пробовал. Пробовал лимитку - не получилось, маркет - срабатывает, лимитку по маркету (в смысле buy например цена + 100, sell = цена - 100) - тоже срабатывает. Результаты примерно одинаковые на альфе и квике.
Спасибо:

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

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


esper Перейти
Конструктор
Код
QuikTrader()
равносилен вызову
Код
QuikTrader(QuikTerminal.GetDefaultPath())
и, если запущен только один терминал, то никаких проблем быть не должно.


Да, действительно, не посмотрел, как реализован parameterless QuikTrader constructor
Код
public QuikTrader()
      : this(QuikTerminal.GetDefaultPath())
{
}

Очень полезно объяснять - так и сам частенько узнаёшь, что объясняk

Всё-равно, надо было убедиться, что Дюшес не забывает запускать и логинить вручную КВИК, т.к. SampleRealTimeTesting основан на SmartCOM, где терминал запускать не надо
Спасибо:

Alexander

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


Дюшес Перейти
esper Перейти
Дюшес Перейти
4.1.7.21978


Дюшес Перейти
Попробовал на альфе и квике. Заявки выставляются, но не исполняются при наступлении условия лимитированные ордера. Лимитные заявки, отправленные по рынку, исполняются. Debug лог нужен?


Сразу не заметил, какую именно заявку вы выставляете? Стоп-заявку, лимитку или маркет?


Стоп-заявку не пробовал. Пробовал лимитку - не получилось, маркет - срабатывает, лимитку по маркету (в смысле buy например цена + 100, sell = цена - 100) - тоже срабатывает. Результаты примерно одинаковые на альфе и квике.


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

Дюшес

Фотография
Программист
Дата: 16.01.2013
Ответить


Alexander Mukhanchikov Перейти

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


Выставляю лимитную заявку и жду пока цена пройдет выше/ниже нее (ждал пунктов 50). При этом сделка не происходит.
Спасибо:

pyhta4og

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


Дюшес Перейти
Alexander Mukhanchikov Перейти

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


Выставляю лимитную заявку и жду пока цена пройдет выше/ниже нее (ждал пунктов 50). При этом сделка не происходит.





А есть возможность собрать дебаг-лог эмулятора? и указать ID (или хотя бы время с точностью до секунд) заявки которая должна была исполнится но не исполнилась?
Спасибо:

Дюшес

Фотография
Программист
Дата: 21.01.2013
Ответить


pyhta4og Перейти

А есть возможность собрать дебаг-лог эмулятора? и указать ID (или хотя бы время с точностью до секунд) заявки которая должна была исполнится но не исполнилась?


Код

2013/01/21 14:16:57.531|       |MS_RTSI-3.13@FORTS|Регистрация новой Market (0x15BD13E) заявки на Sell с ценой 0 и объемом 1. 
2013/01/21 14:16:57.640|       |MS_RTSI-3.13@FORTS|Регистрация новой Limit (0x2FB4FD4) заявки на Buy с ценой 159800 и объемом 1. 
2013/01/21 14:16:57.671|       |MS_RTSI-3.13@FORTS|Регистрация новой Limit (0x2A9A8D9) заявки на Sell с ценой 159840 и объемом 1. 
2013/01/21 14:16:58.515|Warning|MS_RTSI-3.13@FORTS|Заявка принята биржей. Id: 1 TransId: 51400157 security: RTSI-3.13
2013/01/21 14:16:58.578|       |MS_RTSI-3.13@FORTS|Новая Sell сделка 1 по цене 159810 на 1 заявки 51400157.
2013/01/21 14:16:58.625|       |MS_RTSI-3.13@FORTS|Новая позиция: 12822-001@FORTS-RTSI-3.13@FORTS=-1.
2013/01/21 14:16:58.640|Warning|MS_RTSI-3.13@FORTS|Ордер id: 1 TransId 51400157 исполнен в объеме 1. security: RTSI-3.13
2013/01/21 14:16:58.640|       |MS_RTSI-3.13@FORTS|Заявка 51400157 больше не активна.
2013/01/21 14:16:58.656|Warning|MS_RTSI-3.13@FORTS|Заявка принята биржей. Id: 2 TransId: 51400158 security: RTSI-3.13
2013/01/21 14:16:58.656|Warning|MS_RTSI-3.13@FORTS|Заявка принята биржей. Id: 3 TransId: 51400159 security: RTSI-3.13

2013/01/21 14:17:56.578|Warning|MS_RTSI-3.13@FORTS|ЗАЯВКА 51400158 ДОЛЖНА БЫЛА ИСПОЛНИТЬСЯ!!!


Дебаг лог:
Спасибо:
< 1 2 3  >

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

loading
clippy