Тормоза на Плазе
Atom Ответить
14.09.2011


Поднимаю старую тему, чтобы лишнего не плодить. Библиотека 3.2.11
Два вопроса:
1) Как использовать StrategyLatencyManager? В доках ничего толком не сказано, вроде как все само должно. У стратегии LatencyManager создается автоматически. Но вот массив Orders всегда пуст и самому добавить в него ордеры нельзя. Свойство Latency мэнеджера всегда 0, как и у любой заявки.

2) И без LatencyManager'а видно, что заявки выставляются 5-10 секунд (это через плазу). Как так?


Теги:


Спасибо:




44 Ответов
1 2  >
Alexander

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


FiNick Перейти
Поднимаю старую тему, чтобы лишнего не плодить. Библиотека 3.2.11
Два вопроса:
1) Как использовать StrategyLatencyManager? В доках ничего толком не сказано, вроде как все само должно. У стратегии LatencyManager создается автоматически. Но вот массив Orders всегда пуст и самому добавить в него ордеры нельзя. Свойство Latency мэнеджера всегда 0, как и у любой заявки.

2) И без LatencyManager'а видно, что заявки выставляются 5-10 секунд (это через плазу). Как так?



Какое отношение всё это имеет к тестированию? :)

1) вызывается ли Strategy.OrderChanged?
2) у плазы похоже тормоза в последние пару дней, сам столкнулся. до этого шустро работало.
отсылайте логи в ртс, как они советуют, звоните девочкам по телефону, быстро и толково отвечают.
Спасибо:

FiNick

Фотография
Благотворитель
Дата: 14.09.2011
Ответить


Ну я робота тестирую, потому в тестирование, плюс раз уж тема про это создана=)

1) Вызывается, NewOrders тоже. Поправка: свойство strategy.LatencyManager.Latency после второго-третьего ордера начинает выдавать чиселки (18 секунд задержка, я в шоке), но свойство Latency у ордеров все равно пустое
Автор топика
Спасибо:

Mikhail Sukhov

Фотография
Автор статей Программист Трейдер
Дата: 14.09.2011
Ответить


FiNick Перейти
Ну я робота тестирую, потому в тестирование


Тестирование робота != Тестирование стратегии. Это форум для тестирования стратегий. Перенесу сообщение в Плазу.
Спасибо:

Serg

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


Может немного не в тему но буду благодарен если кто ответит)
Можно ли где-то пощупать плазу2, посмотреть как работает, что-то вроде демодоступа?
Спасибо
Спасибо:

Alexander

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


Serg Перейти
Может немного не в тему но буду благодарен если кто ответит)
Можно ли где-то пощупать плазу2, посмотреть как работает, что-то вроде демодоступа?
Спасибо


скачиваете с codeplex'а, заказываете у ртс демодоступ.
Спасибо:

FiNick

Фотография
Благотворитель
Дата: 14.09.2011
Ответить


Проблема частично решилась: стал регистрировать заявки через strategy.RegisterOrder, а не plaza.RegisterOrder.
В результате, в обработчике NewMyTrades вызываю myTrade.Order.Latency, получаю чиселку.
Но, если так написать:
Код

var order = RegisterOrder();
var lat = order.Latency;

получаю 0.
Такое подозрение, что у неисполненых ордеров Latency 0, что странно, ведь мы измеряем скорость выставления заявки, а не исполнения.
Автор топика
Спасибо:

Alexander

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


FiNick Перейти
Проблема частично решилась: стал регистрировать заявки через strategy.RegisterOrder, а не plaza.RegisterOrder.
В результате, в обработчике NewMyTrades вызываю myTrade.Order.Latency, получаю чиселку.
Но, если так написать:
Код

var order = RegisterOrder();
var lat = order.Latency;

получаю 0.
Такое подозрение, что у неисполненых ордеров Latency 0, что странно, ведь мы измеряем скорость выставления заявки, а не исполнения.



Регистрировать заявку и нужно через strategy.RegisterOrder.
Это делается простым вызовом RegisterOrder внутри стратегии.

по коду
RegisterOrder - это void (!!!) функция. она принимает order в качестве параметра, но ничего не возвращает!
тот код, который вы указали вообще неверен. он не будет компилироваться.
задержку у заявки можно получить только после создания и регистрации.
Спасибо:

FiNick

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


Забыл сказать, в данном случае RegisterOrder это переопределенный метод. Внутри создается ордер, в try конструкции отправляется на биржу, ссылка на ордер возвращается.
Автор топика
Спасибо:

Alexander

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


FiNick Перейти
Забыл сказать, в данном случае RegisterOrder это переопределенный метод. Внутри создается ордер, в try конструкции отправляется на биржу, ссылка на ордер возвращается.


Тогда уж покажите сам метод.
А заявка успевает зарегистрироваться=выставиться на биржу? Наверняка нет, отсюда и 0 latency.
Выведите статус заявки перед получением Latency.
Спасибо:

FiNick

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


Код
Order RegisterOrder(OrderDirections direction, decimal volume, decimal price)
        {
            var order = new Order
            {
                Portfolio = this.Portfolio,
                Price = price,
                Security = this.Security,
                Volume = volume,
                Direction = direction,
            };
                        
            try
            {
                var t1 = DateTime.Now;
                this.RegisterOrder(order);
                var t2 = DateTime.Now;
                this.AddLog(new LogMessage(this,DateTime.Now, ErrorTypes.Warning, String.Format("Register Order: State: {0}   Id: {1}   TrId: {2}   Lat: {3}. Time: {4}   {5}",
                                                                                                order.State,
                                                                                                order.Id,
                                                                                                order.TransactionId,
                                                                                                order.Latency, t1, t2
                                                                                                )));
            }
            catch (Exception e)
            {
                this.AddLog(new LogMessage(this,DateTime.Now, ErrorTypes.Error, "Message: " + e.Message));
            }

            return order;
        }

Вот результат: MS 15.09.2011 14:37:07.750 Внимание Register Order: State: None Id: 0 TrId: 52561517 Lat: 00:00:00. Time: 15.09.2011 14:36:58 15.09.2011 14:37:07
Хорошо, вы правы, видимо спрашивать Latency, имеет смысл только после событий NewOrders или OrdersChanged.
Но кто мне тогда объяснит, чем занимается this.RegisterOrder(order) целых 9 секунд!!
Я думал он дожидается результата выставления заявки.



Автор топика
Спасибо:

Alexander

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


FiNick Перейти
Код
Order RegisterOrder(OrderDirections direction, decimal volume, decimal price)
        {
            var order = new Order
            {
                Portfolio = this.Portfolio,
                Price = price,
                Security = this.Security,
                Volume = volume,
                Direction = direction,
            };
                        
            try
            {
                var t1 = DateTime.Now;
                this.RegisterOrder(order);
                var t2 = DateTime.Now;
                this.AddLog(new LogMessage(this,DateTime.Now, ErrorTypes.Warning, String.Format("Register Order: State: {0}   Id: {1}   TrId: {2}   Lat: {3}. Time: {4}   {5}",
                                                                                                order.State,
                                                                                                order.Id,
                                                                                                order.TransactionId,
                                                                                                order.Latency, t1, t2
                                                                                                )));
            }
            catch (Exception e)
            {
                this.AddLog(new LogMessage(this,DateTime.Now, ErrorTypes.Error, "Message: " + e.Message));
            }

            return order;
        }

Вот результат: MS 15.09.2011 14:37:07.750 Внимание Register Order: State: None Id: 0 TrId: 52561517 Lat: 00:00:00. Time: 15.09.2011 14:36:58 15.09.2011 14:37:07
Хорошо, вы правы, видимо спрашивать Latency, имеет смысл только после событий NewOrders или OrdersChanged.
Но кто мне тогда объяснит, чем занимается this.RegisterOrder(order) целых 9 секунд!!
Я думал он дожидается результата выставления заявки.





У вас 9 секунд проходит от момента вызова функции RegisterOrder до момента выхода из неё?
Скачайте исходный код плазы, посмотрите где возникает эта задержка.
Спасибо:

Mikhail Sukhov

Фотография
Автор статей Программист Трейдер
Дата: 15.09.2011
Ответить


FiNick Перейти
Но кто мне тогда объяснит, чем занимается this.RegisterOrder(order) целых 9 секунд!!


Режим синхронный-асинхронный?
Спасибо:

FiNick

Фотография
Благотворитель
Дата: 16.09.2011
Ответить


Mikhail Sukhov Перейти
FiNick Перейти
Но кто мне тогда объяснит, чем занимается this.RegisterOrder(order) целых 9 секунд!!


Режим синхронный-асинхронный?


1)Вы имеете ввиду, в каком режиме вызываются события типа NewMyTrades, NewOrders, события реагирующие на StrategyRule, и т.п.? Не знаю как это можно посмотреть. Надеюсь что асинхронно) хотя мне давно уже очень интересно, как все это исполняется. Например, если пришли друг за другом два события NewMyTrades, а обработчик первого события еще не закончил работу, запустится ли параллельно в другом потоке обработчик второго события NewMyTrades?

2)Или вы имеете ввиду свойство IsAsync у TransactionManager'a? По умолчанию стоит true, и я не заметил в коде, чтобы у пользователя PlazaTrader была возможность его менять.
Единственное, что сейчас под подозрением из-за задержек это PlazaConnectionPool, у которого стоит StreamTimeOut по умолчанию 10 секунд, прям как у меня задержки. Но я еще не разобрался как там все работает, вопрос открыт.
Автор топика
Спасибо:

Alexander

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


Попутно нашёл кое-что - после ConnectionError.SafeInvoke(new InvalidOperationException("Ошибка подключения к Plaza. Код {0}.".Put(status))); у нас этот Exception показывается через 10 секунд.
Видимо у нас такая задержка при реализации образовалась.
Предлагаю подключиться к рефакторингу PlazaTrader, лишь после его сертифицировать и тестить.
Спасибо:

FiNick

Фотография
Благотворитель
Дата: 16.09.2011
Ответить


Alexander Перейти
Предлагаю подключиться к рефакторингу PlazaTrader, лишь после его сертифицировать и тестить.

Я-то могу подключиться, но много пользы от себя не обещаю. У меня опыта программирования полгода джуниор девелопером.
Автор топика
Спасибо:

Mikhail Sukhov

Фотография
Автор статей Программист Трейдер
Дата: 16.09.2011
Ответить


FiNick Перейти
Alexander Перейти
Предлагаю подключиться к рефакторингу PlazaTrader, лишь после его сертифицировать и тестить.

Я-то могу подключиться, но много пользы от себя не обещаю. У меня опыта программирования полгода джуниор девелопером.


Присоединяюсь к вопросу. А что собственно нужно делать в рефакторинге? Можно список задач изолированных?
Спасибо:

Mikhail Sukhov

Фотография
Автор статей Программист Трейдер
Дата: 18.09.2011
Ответить


FiNick Перейти
Alexander Перейти
Предлагаю подключиться к рефакторингу PlazaTrader, лишь после его сертифицировать и тестить.

Я-то могу подключиться, но много пользы от себя не обещаю. У меня опыта программирования полгода джуниор девелопером.


Тогда может поможете с до заполнением метаданных? В PlazaTableId видно (если установлен R#), что некоторые потоки не описаны нашими классами PlazaXXXColumns, и соответственно, для них нет свойства в PlazaStreamRegistry. Например, ClearingMoney.
Спасибо:

FiNick

Фотография
Благотворитель
Дата: 19.09.2011
Ответить


Mikhail Sukhov Перейти
FiNick Перейти
Alexander Перейти
Предлагаю подключиться к рефакторингу PlazaTrader, лишь после его сертифицировать и тестить.

Я-то могу подключиться, но много пользы от себя не обещаю. У меня опыта программирования полгода джуниор девелопером.


Тогда может поможете с до заполнением метаданных? В PlazaTableId видно (если установлен R#), что некоторые потоки не описаны нашими классами PlazaXXXColumns, и соответственно, для них нет свойства в PlazaStreamRegistry. Например, ClearingMoney.


Дайте логин на TFS
Автор топика
Спасибо:

Alexander

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


FiNick Перейти
Mikhail Sukhov Перейти
FiNick Перейти
Alexander Перейти
Предлагаю подключиться к рефакторингу PlazaTrader, лишь после его сертифицировать и тестить.

Я-то могу подключиться, но много пользы от себя не обещаю. У меня опыта программирования полгода джуниор девелопером.


Тогда может поможете с до заполнением метаданных? В PlazaTableId видно (если установлен R#), что некоторые потоки не описаны нашими классами PlazaXXXColumns, и соответственно, для них нет свойства в PlazaStreamRegistry. Например, ClearingMoney.


Дайте логин на TFS


Зачем?
Код плазы доступен на codeplex
Спасибо:

FiNick

Фотография
Благотворитель
Дата: 19.09.2011
Ответить


Цитата:
Зачем?
Код плазы доступен на codeplex


Если я буду вносить изменения, куда их мёржить? Плюс, может я что-то путаю, но в тех исходниках я не нашел код неймспейса StockSharp.Algo.Strategies, вылезают метаданные и все.
Автор топика
Спасибо:

Alexander

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


FiNick Перейти
Цитата:
Зачем?
Код плазы доступен на codeplex


Если я буду вносить изменения, куда их мёржить? Плюс, может я что-то путаю, но в тех исходниках я не нашел код неймспейса StockSharp.Algo.Strategies, вылезают метаданные и все.



Порядок действий следующий:
1) регистрируетесь на codeplex
2) вступаете в stocksharp.codeplex.com
3) пишите свой ник
4) мы вас добавляем в команду
5) с помощью программ что там описаны выкачиваете исходники
6) делаете фикс
7) заливаете на codeplex патч как там описано

StockSharp.Algo.Strategies находится в закрытом TFS и этот namespace не нужен для решения описанной выше задачи.
Спасибо:

FiNick

Фотография
Благотворитель
Дата: 19.09.2011
Ответить


Кстати, странная фишка: у меня если плаза не подключена проц на 100% забит, подключаю нагрузка до 0-2% падает, отключаю опять 100%.
Подключение 11-12 секунд всегда, отключается быстро 2-3 сек. Раундтрип заявки, как выяснилось, зависит от свойства плазатрейдера StreamTimeOut. Я не знаю точно, это из-за того, что заявка долго идет на биржу, или долго идет подтверждение с биржи.
Автор топика
Спасибо:

Alexander

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


FiNick Перейти
Кстати, странная фишка: у меня если плаза не подключена проц на 100% забит, подключаю нагрузка до 0-2% падает, отключаю опять 100%.
Подключение 11-12 секунд всегда, отключается быстро 2-3 сек. Раундтрип заявки, как выяснилось, зависит от свойства плазатрейдера StreamTimeOut. Я не знаю точно, это из-за того, что заявка долго идет на биржу, или долго идет подтверждение с биржи.


Любая возникающая ошибка также приходит через 10 секунд - это недостаток дизайна с StreamTimeOut, тоже надо править.

По поводу 100% при отключении - есть на это таск. Только используйте уже последний revision, там ж рефакторинг сильно был произведён, может ушло уже.
Спасибо:

Alexander

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


FiNick Перейти
Кстати, странная фишка: у меня если плаза не подключена проц на 100% забит, подключаю нагрузка до 0-2% падает, отключаю опять 100%.
Подключение 11-12 секунд всегда, отключается быстро 2-3 сек. Раундтрип заявки, как выяснилось, зависит от свойства плазатрейдера StreamTimeOut. Я не знаю точно, это из-за того, что заявка долго идет на биржу, или долго идет подтверждение с биржи.



Просьба сопровождать коммиты(чек ины) комментариями и проверять перед выкладыванием :)
после последних 2х чек инов плаза работать перестала.
Спасибо:

FiNick

Фотография
Благотворитель
Дата: 20.09.2011
Ответить


Alexander Перейти
Просьба сопровождать коммиты(чек ины) комментариями и проверять перед выкладыванием :)
после последних 2х чек инов плаза работать перестала.


С комментами ступил, буду писать.
На счет не работает: не билдится или рантайм эксепшны? У меня билдится, но на прогоне данные с потока подтягивать не пробовал.
Кстати, какая у вас политика при создании этих PlazaXXXColumns? Надо туда вбивать все колонки какие есть в документации или только самые необходимые?
Я так смотрю колонки многих таблиц не до конца описаны или не описаны вовсе.
Автор топика
Спасибо:
1 2  >

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

loading
clippy