← Back

Альтернативный Альфа-Коннектор

Всем добрый день,

Появилась альтернативная версия коннектора под альфу. За это отдельное спасибо Родиону 👍 ( http://stocksharp.com/users/16581/ ). Версия пока что не окончательная, но исправлены многие недостатки оригинального Альфа-коннектора от Stock#.

Скачать код можно с codeplex, для деталей смотрите коммит http://stocksharp.codeplex.com/SourceControl/changeset/changes/14273

Если у Вас желание помочь проекту, отписывайте баги и фидбэк по этому коннектору в данном топике!

Успехов, Сергей

Comments (69)

Login or Create account, Log in or register to leave a comment

OvcharenkoVI
OvcharenkoVI

Круто! Очень хотелось бы посмотреть документацию по этому коннектору)

Mikhail Sukhov
Mikhail Sukhov

Sergey Masyura: Появилась альтернативная версия коннектора под альфу. За это отдельное спасибо Родиону 👍 ( http://stocksharp.com/users/16581/ ).

А где сам автор? Давайте его расцелуем, что ли.

ra81
ra81

Целовать не нужно :). Лучше крепкое мужское рукопожатие :)

Документации особой не требуется. Коннектор ведет себя так как должен себя вести по идеологии BaseTrader.

Единственный ньюанс это наличие методов UnregisterPortfolios(), UnregisterSecurities(), UnRegisterOrders(), UnRegisterMyTrades(), UnregisterOrders(), UnRegisterPositions() - которые позволяют убрать подписку на получение этих данных. Есть и обратные методы RegisterXXX(). Например нужны данные только по позициям, тогда дерегистрируем все таблицы после старта экспорта и включаем RegisterPositions(). Будем получать только изменения по позициям и новые позиции, но позиция Деньги сюда не входит.

На самом деле на низовом уровне, где данные получаются от Альфы, коннектор загребает все новые данные, потому как фильтровать их невозможно. Составные фильтры по SQL запросу толком не работают. Отсюда данные фильтруются на уровне Wrapper и в трейдер уже доходит только то, на что была подписка. Это вероятно нужно учитывать.

StartExport() - автоматом запускает экспорт основных данных. Таким образом если например бумаги не пришли в событии TraderConnected, они придут позже. (Часто бывает что в текущем коннекторе при старте бумаги не приходят или портфели.)

Более подробная дока будет позже. ПОтому как самому нужна.

На самом деле я взял за основу текущий коннектор и на данном этапе переработал событийную модель в части подписки/отписки на получение данных. Работа с ордерами и свечками просто копипастнута. Постепенно и до нее дойдут руки, если не удовлетворит - переработаю и ее.

Баги есть. Но исправляю. Можно сказать что это преальфа релиз :).

Sergey Masyura
Mikhail Sukhov
Mikhail Sukhov

ra81: Баги есть. Но исправляю. Можно сказать что это преальфа релиз :).

Главное - не забросить начинание. Как там Альфа? Собирается новое решение выпускать? Если есть вопросы по коннекторам, не стесняемся задавать их.

ra81
ra81

Mikhail Sukhov:

ra81: Баги есть. Но исправляю. Можно сказать что это преальфа релиз :).

Главное - не забросить начинание. Как там Альфа? Собирается новое решение выпускать? Если есть вопросы по коннекторам, не стесняемся задавать их.

Ну вообще жду открытия рынков. Проверю изменения выложу новый коммит. Возможно на нем закончится работа с таблицами. Дальше ордера и история.

Новый коммит. Исправлены баги в подписке/отписке на таблицы. Провел тестирование всего кроме исторических данных. Если обнаружится какой баг, сообщайте.

http://stocksharp.codeplex.com/SourceControl/changeset/changes/14410

ra81
ra81

Добавил предварительное чтение всех таблиц при старте экспорта. Это избавит от проблемы не появления инструментов и данных, по которым не было изменений. Чтение Заполняет трейдер данными что есть в таблицах терминала.

http://stocksharp.codeplex.com/SourceControl/changeset/changes/14416

ra81
ra81

Новый коммит. http://stocksharp.codeplex.com/SourceControl/changeset/changes/14570#

В нем переработана работа с ордерами и особенно со стопами. Основные видные изменения - добавился параметр StopPrice в AlfaStopConditions. Стоп заявку теперь нужно создавать следующим образом:

            var order = new Order()
            {
                Direction = OrderDirections.Sell,
                Type = OrderTypes.Conditional,
                Security = sec,
                Portfolio = portfolio,
                Volume = 10,
                StopCondition = new AlfaStopCondition()
                                    {
                                        Slippage = 5,
                                        StopPrice = (double)(sec.BestAsk.Price + 1),
                                    },
            };

            _trader.RegisterOrder(order);

Таким же образом стоп ордера всасываются в S#. Выставляется StopPrice и Slippage при получении новых ордеров от терминала.

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

fau Sergey Masyura
ra81
ra81

Новый коммит http://stocksharp.codeplex.com/SourceControl/changeset/changes/14616

Добавлен следящий стоп. Создать его можно следующим образом:

            var order = new Order()
            {
                Direction = OrderDirections.Buy,
                Type = OrderTypes.Conditional,
                Security = sec,
                Portfolio = portfolio,
                Volume = 10,
                StopCondition = new AlfaStopCondition()
                {
                    Slippage = 1.5,
                    StopPrice = (double)(sec.BestAsk.Price + 1 ),
                    TrailingLevel = 1,
                },
            };

            _trader.RegisterOrder(order);

Сразу после создания ордера на покупу он будет иметь следующие параметры (после всасывания S# от терминала):

  • Price = StopPrice + Slippage
  • Стоп цена будет равна StopPrice
  • Заявка будет неактивна и активируется только когда цена вырастет до StopPrice

В процессе смены котировок инструмента, состояние заявки будет постоянно обновляться в части Price и StopPrice, разница между ними должна быть равна Slippage.

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

ra81
ra81

Новый коммит http://stocksharp.codeplex.com/SourceControl/changeset/changes/14671

Видные изменения:

Добавилось свойство AlfaTrader.IsConnected MinLotSize в инструментах отражает минимальный размер лота.

exarh
exarh

Решил попробовать ваш коннектор, т.к. другой для Альфы с двумя запущенными стратегиями вообще отказывается работать. Сразу на багу наткнулся В AlfaTrader.cs на линии 663 вальнулось:
order.Volume = (Int32)raw["qty"]; order.Balance = (Int32)raw["rest"]; должно быть наверно order.Volume = Int32.Parse((string)raw["qty"]); order.Balance = Int32.Parse((string)raw["rest"]);

ra81
ra81

exarh: Решил попробовать ваш коннектор, т.к. другой для Альфы с двумя запущенными стратегиями вообще отказывается работать. Сразу на багу наткнулся В AlfaTrader.cs на линии 663 вальнулось: order.Volume = (Int32)raw["qty"]; order.Balance = (Int32)raw["rest"]; должно быть наверно order.Volume = Int32.Parse((string)raw["qty"]); order.Balance = Int32.Parse((string)raw["rest"]);

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

ra81
ra81

Новый коммит http://stocksharp.codeplex.com/SourceControl/changeset/changes/15488

Долго не обновлял, по причине глобальных переделок. Часть из них сделана по аналогии Сергея. Что в итоге получилось?

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

  2. Асинхронная подача заявок. Заявки при регистрации ставятся в очередь. Сюда же входят ордера на отмену заявок. Все ордера ставятся в очередь. Очередь обрабатывается своим потоком. Он извлекает ордера по очереди и начинает регистрацию. Регистрация неблокирующая, то есть управление возвращается сразу после подачи заявки. Если произошла ошибка при регистрации/отмене ордера, то формируется сообщение об ошибке и кладется в очередь ошибок, которая в свою очередь обрабатывается своим потоком вызывающим события в зависимости от типа ошибки. Если ордер прошел нормально, то он помещатеся в список ордеров ожидающих подтверждения.

Дальше от терминала приходят по событию OrderConfirmed подтверждения. Ищем ордера в списке ожидающих подтверждение и если нашли, то сразу ставим номер ордера при успешной регистрации, или помещаем сообщение об ошибке в очередь ошибок при неуспешной. Такая же ерунда для ордеров на отмену.

Подобный способ регистрации ордеров обеспечивает нормальную работу терминала при подаче ордеров. Он не завешивает его. Если подавать ордера с таймаутом, терминал перестает принимать данные пока ордер не зарегистрирован окончательно. Это может длиться больше 30 секунд в разных ситуациях. Тестовые прогоны показали достаточную надежность такой системы. На каждый поданный ордер приходит либо успех либо ошибка (отлавливается по событиям типо OrderRegisterFailed). Прогнал серии по 100 ордеров, общей массой в 1000 и больше. Расхождений не было найдено. Были расхождения при отключении терминала в момент подачи заявок.

Если ордер был успешно зарегистрирован, будет событие NewOrder, если была ошибка - событие OrderRegisterFailed. И аналогично для других операций.

Обеспечить обновление ордеров подобным способом невозможно.Поэтому методы Update работают через отмену/подачу нового ордера.

Если подать сразу 2 ордера, второй не пройдет и будет событие об ошибке. Это надо учитывать.Подача ордеров неблокирующая. У альфы есть предел по скорости подачи/отмены ордеров.

В остальном функционал остался прежний.

exarh
exarh

ra81: Новый коммит http://stocksharp.codeplex.com/SourceControl/changeset/changes/15488 Если подать сразу 2 ордера, второй не пройдет и будет событие об ошибке. Это надо учитывать.Подача ордеров неблокирующая. У альфы есть предел по скорости подачи/отмены ордеров.

Целый день воюю с этими двумя последовательными ордерами. Тут вопрос в чем. Запускаю 2-3 стратегии на разных инструментах. Я не могу сказать в какой момент они отменят заявку или выставят ордер. А тут встречаются накладки - я специально для синхронизации завел в стратеги статичное поле LastOrderRegistrationTime и при регистрации жду для примера одну секунду от этого значения, а вот ордер отмену не могу предсказать (использую правила) и тут пару раз и проскачила ошибка:

13:36:02.234 | Error | Стратегия для XXXX | Заявка 3421621415 не была принята по причине System.Exception: Поручение не может быть принято, т.к. превышена предельная интенсивность..

Я вот и думаю, т.к. это явный косяк Альфы, то и обработку его зашить в коннектор. Иначе две и более стратегии придется вручную синхронизовать. Ведь один такой сбой и вся стратегия рушится, т.к. почему-то появляется дубликат заявки (все-таки в конце концов видать доходит до сервера). К примеру в AlfaTrader можно свойство добавить что-то вроде RegisterOrderInterval (установить по умолчанию в секунду) и когда из очереди выбирать на установку или отмену заявки для последующей заявки ожидать этот интервал и плюс (возможно) дожидать ответа от Альфы (успешно или неуспешно)

ra81
ra81

exarh:

ra81: Новый коммит http://stocksharp.codeplex.com/SourceControl/changeset/changes/15488 Если подать сразу 2 ордера, второй не пройдет и будет событие об ошибке. Это надо учитывать.Подача ордеров неблокирующая. У альфы есть предел по скорости подачи/отмены ордеров.

А здесь можно некоторые подробности, я про тонкости Альфы не в курсе. Т.е. не могли бы сказать примерный интервал времени, через который можно подавать вторую заявку? Т.е. у меня, к примеру 2 стратегии работают и через определенное время отменяют и выставляют ордера на покупку или отмену заявки (допустим в начале очередной минуты). Допустим на первой секунде новой минуты одна стратегия выставила ордер на отмену заявку, а вторая на покупку - то выходит есть вероятность, что второй ордер будет failed? и мне будет необходимо немного рассинхронизовать стратегии. Если две заявки почти одновременно, что скорее всего будет иметь место при срабатывании по окончанию свечи, то та что будет второй 100% будет failed. Ну вообще каждая заявка будет иметь ответ. Либо новую сделку либо ошибку. Отсюда выставлять заявки имеет смысл как угодно, Только реализовать гарантированное исполнение. Написать хелпер методы, или министратегию, которая будет гарантированно проводить сделку, с учетом возможных ошибок регистрации и прочего. Время выставления заявки у альфы может варьироваться. 1 секунда у меня где-то.

Sergey Masyura
Sergey Masyura Author

exarh:

ra81: Новый коммит http://stocksharp.codeplex.com/SourceControl/changeset/changes/15488 Если подать сразу 2 ордера, второй не пройдет и будет событие об ошибке. Это надо учитывать.Подача ордеров неблокирующая. У альфы есть предел по скорости подачи/отмены ордеров.

Целый день воюю с этими двумя последовательными ордерами. Тут вопрос в чем. Запускаю 2-3 стратегии на разных инструментах. Я не могу сказать в какой момент они отменят заявку или выставят ордер. А тут встречаются накладки - я специально для синхронизации завел в стратеги статичное поле LastOrderRegistrationTime и при регистрации жду для примера одну секунду от этого значения, а вот ордер отмену не могу предсказать (использую правила) и тут пару раз и проскачила ошибка:

13:36:02.234 | Error | Стратегия для XXXX | Заявка 3421621415 не была принята по причине System.Exception: Поручение не может быть принято, т.к. превышена предельная интенсивность..

Я вот и думаю, т.к. это явный косяк Альфы, то и обработку его зашить в коннектор. Иначе две и более стратегии придется вручную синхронизовать. Ведь один такой сбой и вся стратегия рушится, т.к. почему-то появляется дубликат заявки (все-таки в конце концов видать доходит до сервера). К примеру в AlfaTrader можно свойство добавить что-то вроде RegisterOrderInterval (установить по умолчанию в секунду) и когда из очереди выбирать на установку или отмену заявки для последующей заявки ожидать этот интервал и плюс (возможно) дожидать ответа от Альфы (успешно или неуспешно)

В последней версии альфа-коннектора с транка ордера ложатся в очередь и вызываются последовательного из одного потока. Это должно решить параллельную работу стратегий.

ra81
ra81

exarh:

ra81: Новый коммит http://stocksharp.codeplex.com/SourceControl/changeset/changes/15488 Если подать сразу 2 ордера, второй не пройдет и будет событие об ошибке. Это надо учитывать.Подача ордеров неблокирующая. У альфы есть предел по скорости подачи/отмены ордеров.

Целый день воюю с этими двумя последовательными ордерами. Тут вопрос в чем. Запускаю 2-3 стратегии на разных инструментах. Я не могу сказать в какой момент они отменят заявку или выставят ордер. А тут встречаются накладки - я специально для синхронизации завел в стратеги статичное поле LastOrderRegistrationTime и при регистрации жду для примера одну секунду от этого значения, а вот ордер отмену не могу предсказать (использую правила) и тут пару раз и проскачила ошибка:

13:36:02.234 | Error | Стратегия для XXXX | Заявка 3421621415 не была принята по причине System.Exception: Поручение не может быть принято, т.к. превышена предельная интенсивность..

Я вот и думаю, т.к. это явный косяк Альфы, то и обработку его зашить в коннектор. Иначе две и более стратегии придется вручную синхронизовать. Ведь один такой сбой и вся стратегия рушится, т.к. почему-то появляется дубликат заявки (все-таки в конце концов видать доходит до сервера). К примеру в AlfaTrader можно свойство добавить что-то вроде RegisterOrderInterval (установить по умолчанию в секунду) и когда из очереди выбирать на установку или отмену заявки для последующей заявки ожидать этот интервал и плюс (возможно) дожидать ответа от Альфы (успешно или неуспешно)

Ну просто нужно в стратегиях учитывать что заявка может не исполниться в первый раз. Надо подать снова на исполнение. Или просто сделать метод отдельный. Использовать можно котирование для подачи заявок. Пока вроде бы котирование работает в моем коннекторе. Только пишет про ошибку. Залью чуть позже версию в которой уже и ошибок не пишет.

А то что пишет ошибку у Вас это нормально. Альфа не дает две заявки быстро исполнить. Надо учитывать сей факт. То что Сергей пишет про коннектор из транка, верно. Но я намеренно отказался от подобного метода подачи заявок. Почему написано в комментариях к коммиту. Да и даже при ожидании исполнения каждой заявки, заявка может исполниться с ошибкой. В любом случае надо учитывать в стратегии факт возможного ошибочного исполнения заявок. А то что Вы пишете мол заявка даже при ошибке регистрируется и появляется в терминале, Это позволю себе заметить наверняка не совсем так. При сообщении о предельной допустимости заявка точно не регистрируется сервером. Видимо ваши стратегии посылают снова заявки свои на исполнение.

seashaman
seashaman

Стратегия котирования под коннектор AlfaPlus от Родиона работает. Изредка случаются сбои, стратегия завершается без позиции. Сильно не разбирался, просто в основной стратегии контролирую этот момент и дублирую в случае чего. В целом коннектор работает шустренько. Продолжаю наблюдения.

ra81
ra81

новый коммит http://stocksharp.codeplex.com/SourceControl/changeset/changes/15576

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

OvcharenkoVI
Mikhail Sukhov
Mikhail Sukhov

Приветствую, альфа строители.

Хотел спросить вам как дело с вашим коннектором. Я так понимаю их сейчас целых 2, и не понятно какой из них использовать. Мы хотим выпускать версию 4.1, и этот вопрос предлагаю решить окончательно. Чем альтернативный коннектор лучше текущего? Может быть их соединить в плане фич и багов? Надо уже и на дев ветку накатить все то, что в транке фиксилось, так как именно из дева будет собираться новая версия.

OvcharenkoVI
OvcharenkoVI

Mikhail Sukhov: Приветствую, альфа строители.

Хотел спросить вам как дело с вашим коннектором. Я так понимаю их сейчас целых 2, и не понятно какой из них использовать. Мы хотим выпускать версию 4.1, и этот вопрос предлагаю решить окончательно. Чем альтернативный коннектор лучше текущего? Может быть их соединить в плане фич и багов? Надо уже и на дев ветку накатить все то, что в транке фиксилось, так как именно из дева будет собираться новая версия.

С моей точки зрения, коннектор Сергея более рабочий, по крайней мере меньше багов замечал. У Родиона интересная система с подписками на таблицы. Собственно Сергей говорил, что, возможно, что то возьмет из alfaplus, в таком случае для 4.1 это будет лучшим вариантом

ra81
ra81

OvcharenkoVI:

Mikhail Sukhov: Приветствую, альфа строители.

Хотел спросить вам как дело с вашим коннектором. Я так понимаю их сейчас целых 2, и не понятно какой из них использовать. Мы хотим выпускать версию 4.1, и этот вопрос предлагаю решить окончательно. Чем альтернативный коннектор лучше текущего? Может быть их соединить в плане фич и багов? Надо уже и на дев ветку накатить все то, что в транке фиксилось, так как именно из дева будет собираться новая версия.

С моей точки зрения, коннектор Сергея более рабочий, по крайней мере меньше багов замечал. У Родиона интересная система с подписками на таблицы. Собственно Сергей говорил, что, возможно, что то возьмет из alfaplus, в таком случае для 4.1 это будет лучшим вариантом

Вообще с моей точки зрения, текущая версия моего коннектора работает гладко и без багов. Во всяком случае мы в две каски используем его всяко разно. Отрабатывает без глюков. Если баги и есть то обычно с Сергеем мы их фиксим одновременно, поскольку я базировался на его коде и мы с ним общаемся по этим вопросам.

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

Что еще сказать, в моей версии точно работают подписки на разные инструменты одновременно, если Сергей не пофиксил то у него нет. У меня работают события об ошибках регистрации ордеров, у него не работали. Отсюда стратегии тоже могут загонять. Ну и у нас разные схемы подачи ордеров. У него синхронная, у меня асинхронная, то есть подача ордера мгновенная и в терминал так же уходит ордер без ожидания. Отсюда терминал не подвисает. У Сергея была подача с ожиданием.

Пока что весь тот функционал что нужен для работы стратегий достаточен и рабочий. Есть вещи которые весят в тудушках, как то "Время отмены ордера" итд, но эт минорно все. Так что решайте сами :). Ну и если речь шла о багах, то show me the bugs?? :). DerivedOrder поправлю как тока сертификат продлят изверги, а то не тестится.

ЗЫ: пишу код для себя, так что стараюсь :)

OvcharenkoVI
OvcharenkoVI

ra81:

OvcharenkoVI:

Mikhail Sukhov: Приветствую, альфа строители.

Хотел спросить вам как дело с вашим коннектором. Я так понимаю их сейчас целых 2, и не понятно какой из них использовать. Мы хотим выпускать версию 4.1, и этот вопрос предлагаю решить окончательно. Чем альтернативный коннектор лучше текущего? Может быть их соединить в плане фич и багов? Надо уже и на дев ветку накатить все то, что в транке фиксилось, так как именно из дева будет собираться новая версия.

С моей точки зрения, коннектор Сергея более рабочий, по крайней мере меньше багов замечал. У Родиона интересная система с подписками на таблицы. Собственно Сергей говорил, что, возможно, что то возьмет из alfaplus, в таком случае для 4.1 это будет лучшим вариантом

Вообще с моей точки зрения, текущая версия моего коннектора работает гладко и без багов. Во всяком случае мы в две каски используем его всяко разно. Отрабатывает без глюков. Если баги и есть то обычно с Сергеем мы их фиксим одновременно, поскольку я базировался на его коде и мы с ним общаемся по этим вопросам.

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

Что еще сказать, в моей версии точно работают подписки на разные инструменты одновременно, если Сергей не пофиксил то у него нет. У меня работают события об ошибках регистрации ордеров, у него не работали. Отсюда стратегии тоже могут загонять. Ну и у нас разные схемы подачи ордеров. У него синхронная, у меня асинхронная, то есть подача ордера мгновенная и в терминал так же уходит ордер без ожидания. Отсюда терминал не подвисает. У Сергея была подача с ожиданием.

Пока что весь тот функционал что нужен для работы стратегий достаточен и рабочий. Есть вещи которые весят в тудушках, как то "Время отмены ордера" итд, но эт минорно все. Так что решайте сами :). Ну и если речь шла о багах, то show me the bugs?? :). DerivedOrder поправлю как тока сертификат продлят изверги, а то не тестится.

ЗЫ: пишу код для себя, так что стараюсь :)

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

Так у меня вот возникло много проблем при переносе проги с одной машины на другую. Какие ошибки только не вылетают.

С коннектором от Сергея такого не возникало. На самом деле очень хотелось бы их объединить, так как и в одном и другом есть очень важные вещи

ra81
ra81

OvcharenkoVI: сегодня только с Сергеем обнаружили, что не заполняется ExtensionInfo у Security. Поправить бы.

Так у меня вот возникло много проблем при переносе проги с одной машины на другую. Какие ошибки только не вылетают.

С коннектором от Сергея такого не возникало. На самом деле очень хотелось бы их объединить, так как и в одном и другом есть очень важные вещи Вот это уже другой разговор. Трабла с переносом ясно с чем связана. Если будут багрепорты будут багфиксы. Пофиксим ошибку переноса. А ExtensionInfo даж не знаю что за беда. ЧТо там должно содержаться ??

security.SetPaperNo(paper_no);
security.SetCurrency(curr_code);
security.SetPlaceCode(place_code);

Вот тут собственно заполняется.

Mikhail Sukhov
Mikhail Sukhov

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

Значит надо совмещать. Задача даже более необходимая, чем кажется, так как в дев ветке вообще ничего уже по альфе не работает.

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

ra81
ra81

Mikhail Sukhov: Предлагаю для начала включить коннектор в солюшен, чтобы его можно было компилировать со всеми другими программами. Затем, нужно перечислить все эти изменения и отличия. Потому что я даже не смотрел ни новый коннектор, ни старый на совместимость с S#. Вот как недавно было со стоп заявками... Надо начать, потом станет веселее. Не дело, вместо фиксов в существующем коннекторе, плодить новую ветку.

Пишу отличия которые я знаю. Если я не прав Сергей пусть меня поправит.

  1. наличие методов UnregisterPortfolios(), UnregisterSecurities(), UnRegisterOrders(), UnRegisterMyTrades(), UnregisterOrders(), UnRegisterPositions() - которые позволяют убрать подписку на получение этих данных. Есть и обратные методы RegisterXXX(). Например нужны данные только по позициям, тогда дерегистрируем все таблицы после старта экспорта и включаем RegisterPositions(). Будем получать только изменения по позициям и новые позиции, но позиция Деньги сюда не входит. Методы помогают отключить ненужный прием данных.

  2. StartExport() - автоматом запускает экспорт основных данных. Таким образом если например бумаги не пришли в событии TraderConnected, они придут позже. (Часто бывает что в старом коннекторе при старте бумаги не приходят или портфели.).

  3. небольшое отличие в постановке стопов. У меня стоп цена передается в AlfaStopCondition. Так же есть поддержка трейлинг стопов.

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

  5. Работает нормально подписка на разные инструменты, стаканы и сделки по инструментам. ЧТо позволяет работать с корзиной стратегий.

  6. Заявки подаются асинхронно. То есть не ждем от терминала ответа при передаче ему заявки. Трейдер просто ставит заявку в очередь и возвращает управление. Дальше уже менеджер очереди двигает заявку в Терминал. От терминала тоже не ждем приема заявка. Подтверждение принимаем по событию OrderConfirmed. По этому же событию принимаем ошибки регистрации. В стандартном коннекторе ожидается подтверждение приема заявки. Так же нет событий об ошибке регистрации.

  7. Рыночное время берется напрямую с терминала, а не с внутреннего таймера.

  8. На все методы обращения к терминалу стоит глобальный лок. То есть только один поток в одно время может работать с терминалом. Запрос истории, например, вешает все процессы на время получения данных. Он вешает в любом случае терминал, но без локов ком объект может загнуться при обращении с другого потока. С локами после получения данных все продолжает работать.

Ну и есть известные досадные недоработки или особенности.

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

  2. Не совсем правильная работа со стопзаявками, что отражается на стратегиях в неверном учете сделок по стоп зяавкам. Связано это с недопонимаем модели сток шарпа и тем что в Альфе стоп заявка не генерит лимитную заявку, а просто активируется. Будет пофиксено.

  3. Порой котирование не правильно функционирует. заявка может исполниться а котирование не знает про это. Еще не проверял толком где глюк. Как разберусь где проблемы, пофиксю.

  4. Не все поля заполняются как нужно в экспортируемых данных (та же беда у стандартного коннектора). Буду фиксить постепенно.

  5. Нет поддержки опционов совершенно. (та же беда у стандартного коннектора). Как доберусь до опционов сразу сделаю. В планах есть.

  6. Ну и наличие кучи фоновых потоков не облегчает отладку, хотя в принципе они локализованы и трудностей не вызывают.

Mikhail Sukhov
Mikhail Sukhov

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

Пункт фич, что вы привели, выглядят интересными. Предлагаю мержить с основным коннектором.

ra81
ra81

Mikhail Sukhov: Я на днях попытался использовать альфа коннектор из транка - он практически не работает. Насколько я могу судить, альтернативный коннектор тоже не особо стабилен. Поэтому особого смысла в сохранении чего то в стабильном виде нет. Оно все нестабильно. Поэтому и настаиваю, чтобы это слить в одну ветку, чтобы хоть как-то довести до рабочего состояния.

Пункт фич, что вы привели, выглядят интересными. Предлагаю мержить с основным коннектором. Они не мерджатся :). Просто потому что кардинально отличаются друг от друга внутри. Предлагаю попробовать коннектор из дев ветки Альфа плюс. Дальше уже решать. Про известные баги я указал. Поддерживать свой коннектор я один фиг буду, будет он в транке или не будет, потому что он удовлетворяет стабильностью работы и тем что все работает без бубна. Либо надо допиливать старый коннектор до состояния нового, что по сути куча работы. Тут один выбросить и оставить другой. Мерджить не выйдет.

Опять же там грядет смена платформы. Я все равно планирую пока сидеть на альфе длительное время особенно с перспективой будущей платформы. Обещания красивые. Так что и под новую скорее всего буду делать коннектор. Как-то так.

Mikhail Sukhov
Mikhail Sukhov

Мне кажется, мы о разном говорим.

Я рад, что Альфа продолжит развиваться, и что лично вы на ней остаетесь. Но я пишу о том, чтобы сделать сейчас один коннектор, и чтобы в деве что-то заработало. Сейчас есть очень большая вероятность, что в 4.1 попадет что-то не работающее. Ваш коннектор, как я понял, вообще даже не попадает в архивы. Следовательно, при каждом обновлении рефов он может быть не совместим. С учетом того, что вы, как и сами пишите, пока не до конца понимаете модель S#, это накладывает определенные риски и на ваш альтернативный коннектор.

Поэтому, чтобы хоть как-то сдвинуть процесс с мертвой точки, и сделать что-то действительно удобное и работающее, я предлагаю совместить коннекторы в один. дев коннектор вообще сейчас не работает. Ваш коннектор, судя по всему, работает, но с ошибками. Имеет ли смысл вести 2 ветки неработающего? На мой взгляд, нет.

ra81
ra81

Mikhail Sukhov: Мне кажется, мы о разном говорим.

Я рад, что Альфа продолжит развиваться, и что лично вы на ней остаетесь. Но я пишу о том, чтобы сделать сейчас один коннектор, и чтобы в деве что-то заработало. Сейчас есть очень большая вероятность, что в 4.1 попадет что-то не работающее. Ваш коннектор, как я понял, вообще даже не попадает в архивы. Следовательно, при каждом обновлении рефов он может быть не совместим. С учетом того, что вы, как и сами пишите, пока не до конца понимаете модель S#, это накладывает определенные риски и на ваш альтернативный коннектор.

Поэтому, чтобы хоть как-то сдвинуть процесс с мертвой точки, и сделать что-то действительно удобное и работающее, я предлагаю совместить коннекторы в один. дев коннектор вообще сейчас не работает. Ваш коннектор, судя по всему, работает, но с ошибками. Имеет ли смысл вести 2 ветки неработающего? На мой взгляд, нет.

Какие предложения по совмещению? Я пока плохо представляю сей процесс.

Mikhail Sukhov
Mikhail Sukhov

ra81: Какие предложения по совмещению? Я пока плохо представляю сей процесс.

  1. Выписываются фичи, которые есть в альтернативном коннекторе, и отсутствуют в основном (уже сделано).
  2. Выписываются фичи, что есть в основном коннекторе, и что отсутствуют в альтернативном (поговорю с Сергеем).
  3. Обсуждается, какие фичи правильнее.
  4. Код переноситься.
ra81
ra81

Mikhail Sukhov:

ra81: Какие предложения по совмещению? Я пока плохо представляю сей процесс.

  1. Выписываются фичи, которые есть в альтернативном коннекторе, и отсутствуют в основном (уже сделано).
  2. Выписываются фичи, что есть в основном коннекторе, и что отсутствуют в альтернативном (поговорю с Сергеем).
  3. Обсуждается, какие фичи правильнее.
  4. Код переноситься.

Совершенно верно. В итоге мы получим мою версию коннектора или придется дополнять версию базовую. Поскольку как мне известно все фичи что есть в базовом есть у меня. Сергей писал под задачу. Что надо было то сделал. Он не ставил целью сделать пупер либу. Мне нужно было больше функционала, я расширил его код. Вот собственно и все.

А вообще предлагаю с ним и поговорить. Пусть он озвучит свое видение. Он же тоже замешан во всем этом :)

Sergey Masyura
Sergey Masyura Author

ra81:

Mikhail Sukhov:

ra81: Какие предложения по совмещению? Я пока плохо представляю сей процесс.

  1. Выписываются фичи, которые есть в альтернативном коннекторе, и отсутствуют в основном (уже сделано).
  2. Выписываются фичи, что есть в основном коннекторе, и что отсутствуют в альтернативном (поговорю с Сергеем).
  3. Обсуждается, какие фичи правильнее.
  4. Код переноситься.

Совершенно верно. В итоге мы получим мою версию коннектора или придется дополнять версию базовую. Поскольку как мне известно все фичи что есть в базовом есть у меня. Сергей писал под задачу. Что надо было то сделал. Он не ставил целью сделать пупер либу. Мне нужно было больше функционала, я расширил его код. Вот собственно и все.

А вообще предлагаю с ним и поговорить. Пусть он озвучит свое видение. Он же тоже замешан во всем этом :)

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

OvcharenkoVI
OvcharenkoVI

Хорошее дело затеял, Родион

ra81
ra81

Новый коммит http://stocksharp.codeplex.com/SourceControl/changeset/changes/15775

  1. Исправил проблему озвученную выше с переносом на другой ПК. теперь проблемы быть не должно.
  2. Исправил работу с CancelTime, ExpiryDate. Время истечения заявки задается в ExpiryDate. Время отмены заявки приходит в CancelTime. Было иначе. Следует учитывать что терминал не возвращает реальное время отмены, поэтому при получении ордера, коннектор ставит время отмены сам. Если коннектор был запущен и в терминале есть несколько ордеров отмененных, то у них у всех будет время отмены равно текущему времени. Но стоп/старт экспорта не будет менять время отмены ордера. Оно обновляется только один раз, когда коннектор получает данные о том что ордер отменился. По умолчанию время отмены равно null.
OvcharenkoVI Sergey Masyura
Mikhail Sukhov
Mikhail Sukhov

Посмотрел вчера код альтернативного коннектора. Чтож. Написано много.😂 Я бы даже сказал, есть какой-то элемент овердизайна.

Сергей обещал перетащить свои изменения из транка в дев. Там сделана асинхронная отправка заявок. Ваш коннектор с локами - это путь к дедлогам (что и случилось в маркет котировании). Поэтому, мне кажется, основной коннектор так и остается основным коннектором.

Идея с таблицами интересная. Советую посмотреть на структуру метаданных в квике и плазе. Потому что сейчас выглядит как-то недоделанно.

Вести два коннектора накладно. Предлагаю доделывать только один. Его тестить, его и ревьюить.

ra81
ra81

Mikhail Sukhov: Посмотрел вчера код альтернативного коннектора. Чтож. Написано много.😂 Я бы даже сказал, есть какой-то элемент овердизайна.

Сергей обещал перетащить свои изменения из транка в дев. Там сделана асинхронная отправка заявок. Ваш коннектор с локами - это путь к дедлогам (что и случилось в маркет котировании). Поэтому, мне кажется, основной коннектор так и остается основным коннектором.

Идея с таблицами интересная. Советую посмотреть на структуру метаданных в квике и плазе. Потому что сейчас выглядит как-то недоделанно.

Вести два коннектора накладно. Предлагаю доделывать только один. Его тестить, его и ревьюить.

Овердизайн остался похоже от полностью асинхронной модели. Планировал так сделать.

Локи есть только на метода терминала. Дедлок Не возможен при моей архитектуре асинхронной передачи данных и приема ордеров. Дедлоки были, но в другом месте. Я избавился о них. Да и они были временным решением. А без локов возможны зависания терминала. ЧТо я и наблюдал :).

Таблицы квика я не могу увидеть. Таблицы Алора и плазы я смотреть. Решил не наворачивать подобные конструкции отдав предпочтение простоте решения. Работать удобно и реализовать было быстро :).

Впрочем если будет рабочее решение мне неважно какое оно будет. Работало бы всё сразу, не было бы второго коннектора :)

Mikhail Sukhov
Mikhail Sukhov

ra81: Таблицы квика я не могу увидеть. Таблицы Алора и плазы я смотреть. Решил не наворачивать подобные конструкции отдав предпочтение простоте решения. Работать удобно и реализовать было быстро :).

Быстро реализовать - это как сейчас в основном коннекторе, ввиде строчки.

ra81: Впрочем если будет рабочее решение мне неважно какое оно будет. Работало бы всё сразу, не было бы второго коннектора :)

Если что-то не работало в основном коннекторе, то надо было его лечить. Зачем новый создавать?

ra81
ra81

Быстро реализовать - это как сейчас в основном коннекторе, ввиде строчки. Это совсем грубо. И неудобно работать. И главное непрозрачно в коде.

Если что-то не работало в основном коннекторе, то надо было его лечить. Зачем новый создавать? Собственно еще раз повторюсь. Я взял базовый коннектор, и вылечил всё, что не работало. В итоге получился альтернативный коннектор :). Сергей думал смерджить, посмотрел и понял, что не мерджится. Вот как-то так.

Mikhail Sukhov
Mikhail Sukhov

ra81: Собственно еще раз повторюсь. Я взял базовый коннектор, и вылечил всё, что не работало. В итоге получился альтернативный коннектор :).

Я это понял сразу.🙄

Почему это было неправильно:

  1. Два коннектора, оба далеки от 100% готовности.
  2. Ревьюровать есть время только один коннектор. И это скорее всего будет основной.
  3. Для юзеров опять же недоступен сейчас альтернативный коннектор.
  4. С учетом малого кол-ва рук, скорость разработки медленная для каждой из версий коннектора.
ra81
ra81

Mikhail Sukhov:

ra81: Собственно еще раз повторюсь. Я взял базовый коннектор, и вылечил всё, что не работало. В итоге получился альтернативный коннектор :).

Я это понял сразу.🙄

Почему это было неправильно:

  1. Два коннектора, оба далеки от 100% готовности.
  2. Ревьюровать есть время только один коннектор. И это скорее всего будет основной.
  3. Для юзеров опять же недоступен сейчас альтернативный коннектор.
  4. С учетом малого кол-ва рук, скорость разработки медленная для каждой из версий коннектора. Отвечаю снова :). Если проследить историю разработки основного коннектора, то можно заметить что между двумя коммитами по багам, успел появиться альтернативный и стать работоспособным в большей степени чем базовый. Отсюда вывод - если бы я сидел и ждал, то не появилось бы данной темы, не появилось бы обсуждения, и вообще ничего бы наверняка не появилось, потому что активности не было вообще. Так что, хорошо что все так вышло. Надеюсь теперь базовый коннектор будет крут как никогда. Когда это случится я еще раз скажу - Вы ребята красавчеги просто. Такую штуку сделали клевую что вообще слов нет. Готов помогать все чем могу по части разработку коннектора. Любого. Главное чтобы работал так как положено, чего я и добивался собственно.
Mikhail Sukhov
Mikhail Sukhov

ra81: Отсюда вывод - если бы я сидел и ждал,

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

Дело конечно ваше. Но на мой взгляд время можно было бы существенно сэкономить + уже сейчас иметь продакшен версию для альфы.

ra81
ra81

Mikhail Sukhov: Дело конечно ваше. Но на мой взгляд время можно было бы существенно сэкономить + уже сейчас иметь продакшен версию для альфы. Это уже конечно пошла полемика на отвлеченные темы, но не очень понимаю что имеется ввиду, а понять хочется. Предлагаю считать альтернативный коннектор большим багфиксом базового. Или как я должен был багфиксить? Например организовать подписки на таблицы, которые по факту не работают в терминале и базовом коннекторе нормальным образом? Делать коммиты в базовый? Ну можно выкинуть базовый оставить альтернативный. Сделать мегакоммит. И доработать его допилив оставшиеся мелочи, ну и добавить опционы. Просто Михаил вы меня порой в большой тупик ставите своими постами.

Mikhail Sukhov
Mikhail Sukhov

ra81: Делать коммиты в базовый?

Вообще то да😂 Это самый банальный путь, и вот мы уже несколько дней пытаемся понять вместе, почем он не был выбран.

ra81
ra81

Mikhail Sukhov:

ra81: Делать коммиты в базовый?

Вообще то да😂 Это самый банальный путь, и вот мы уже несколько дней пытаемся понять вместе, почем он не был выбран. Поисняю. Когда я слепил свое поделие. Сергей поглядел на него и понял. Коммитить его низзя. Слишком много переработано. И оставил его как есть. Второй версией. Я особо не заморачивался ибо я не в команде разработчиков и был ужасно рад что мне хотябы помогает Сергей советом. Как-то вот так вот получилось. Да не совсем может правильно, но вот результат в итоге положительный. Не всегда прямой путь самый верный ;)

OvcharenkoVI
OvcharenkoVI

ra81:

Mikhail Sukhov:

ra81: Делать коммиты в базовый?

Вообще то да😂 Это самый банальный путь, и вот мы уже несколько дней пытаемся понять вместе, почем он не был выбран. Поисняю. Когда я слепил свое поделие. Сергей поглядел на него и понял. Коммитить его низзя. Слишком много переработано. И оставил его как есть. Второй версией. Я особо не заморачивался ибо я не в команде разработчиков и был ужасно рад что мне хотябы помогает Сергей советом. Как-то вот так вот получилось. Да не совсем может правильно, но вот результат в итоге положительный. Не всегда прямой путь самый верный ;)

AlfaPlus не собирается после всех переработок. Почему то пишет, что AlfaDirectClass нельзя использовать, нужно использовать доступный интерфейс) Раньше не было такого.

ra81
ra81

OvcharenkoVI: AlfaPlus не собирается после всех переработок. Почему то пишет, что AlfaDirectClass нельзя использовать, нужно использовать доступный интерфейс) Раньше не было такого. Странная петрушка потому что у двоих точно собирается, кроме меня. А подподробнее можно?

OvcharenkoVI
OvcharenkoVI

Спасибо, Родион. Будем тестить.

ra81
ra81

Новый коммит http://stocksharp.codeplex.com/SourceControl/changeset/changes/15861

  1. фикс стакана. После последних обновлений не работал правильно.
  2. вернул однопоточность получения данных, из за дедлоков в стратегиях.
  3. события по ордерам, асинхронная модель.

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

тест 1) Нарисовал стратегию которая ставит орде и тут же его снимает. И так до бесконечности. Запустил 4 таких стратегии дабы они конкурировали. Прошло около 1000 ордеров, без единого бага.

тест 2) Нарисовал стратегию которая по концу свечи, заводит котирование на покупку. Если купилось, то по концу следующей свечи, заводит котирование на продажу. Одновременно стартовало 4 таких стратегии по концу свечи. То есть не всегда ордера проходили сразу. ПРошло Сделок 500 таким образом. Ну и несколько часов еще в одну стратегию стояло колбасилось, перед этим. Если учесть что работало даже не по стакану несколько часов, то все сделки завершались успешно. Со стаканом тоже.

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

Sergey Masyura
exarh
exarh

Добрый день. Я погонял данный коннектор пару недель, все отлично работает. Паралельно запускал 7 стратегий на разных инструментах. Ничего не валится. Единственная просьба добавить какой-нибудь флаг, который бы отрубал бы неинформативные (наверно не только для меня) сообщения вида this.AddInfoLog("OnProcessPortfolios() {0}", data.ToString()); this.AddInfoLog("OnProcessPositions() {0}", data.ToString()); ... , которые засоряют логи.

Sergey Masyura
ra81
ra81

exarh: Добрый день. Я погонял данный коннектор пару недель, все отлично работает. Паралельно запускал 7 стратегий на разных инструментах. Ничего не валится. Единственная просьба добавить какой-нибудь флаг, который бы отрубал бы неинформативные (наверно не только для меня) сообщения вида this.AddInfoLog("OnProcessPortfolios() {0}", data.ToString()); this.AddInfoLog("OnProcessPositions() {0}", data.ToString()); ... , которые засоряют логи.

Вообще эту мелочь надо доделать чтобы выводиласьнепосредственная информация. Но это минорные баги. Так что пока не обращаю внимание на это. Сделаю позже.

По поводу засора логов данными не только у вас желание это убрать. Ну эту беду решили насколько я знаю в фильтре логгера. Поищите тему "Заявка в процессе регистрации".

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

ra81
ra81

БИБЛИОТЕКА (КОННЕКТОР ALFAPLUS) СОБИРАЛАСЬ И ТЕСТИРОВАЛАСЬ С RELEASE 4.0.22

В дальнейшем буду указывать версию S#, ато получаются непонятки и не работает у людей.

OvcharenkoVI
OvcharenkoVI

стоп-заявки не приходят через _trader.NewStopOrders

ra81
ra81

OvcharenkoVI: стоп-заявки не приходят через _trader.NewStopOrders и в списке _trader.StopOrders тоже их нет

Тока что проверил. Все есть и приходит. Релиз я указывал сверху. На нем точно работает. Если что не работает, нужно более широкое описание проблемы.

OvcharenkoVI
OvcharenkoVI

и в списке _trader.StopOrders тоже их нет

ra81
ra81

Новый коммит http://stocksharp.codeplex.com/SourceControl/changeset/changes/15942

Релиз 4.0.22

  1. Добавлена эмуляция стоп заявок квика. В стратегиях PositionManager правильно считает позицию по сделкам стоп заявок. По сути для каждой стоп заявке трейдер заводит новую фиктивную заявку с transactionId = 0. Для нее генерятся события NewOrder OrderChanged как и для нормальной заявки. Эта фиктивная заявка содержит все те же данные что и стоп заявка, только тип Limit. И изменяется она сихронно с базовой стоп заявкой. Фиктивная лимит заявка находится в order.DerivedOrder исходной стоп заявки. То есть теоретически вы можете использовать методологию работы с квиковскими заявками и для стоп заявок Альфы. Лимит заявка генерится после того как стоп заявка стала активной, или исполнилась. В терминале активность стоп заявки выражается в виде статуса "Активная".
Sergey Masyura
ra81
ra81

Новый коммит: http://stocksharp.codeplex.com/SourceControl/changeset/changes/16302

проверялся с релизом 4.0.22

  1. добавил лок при запросе истории с сервера. Устранились проблемы при запросе истории, ушло зависание терминала.
  2. исправил ошибку в эмуляции квик стопов. Для обычных ордеров тоже формировался дерайвед ордер. Досадный баг :) 3 убрал запрос таблиц при подаче маркет ордера, исправил расчет цены. Подача заявки должны происходить быстрее. Ну и вообще это более правильно. Цена маркета считается как текущая +5%/-5%
Sergey Masyura
Sergey Masyura Author

ra81: Новый коммит: http://stocksharp.codeplex.com/SourceControl/changeset/changes/16302

проверялся с релизом 4.0.22

  1. добавил лок при запросе истории с сервера. Устранились проблемы при запросе истории, ушло зависание терминала.
  2. исправил ошибку в эмуляции квик стопов. Для обычных ордеров тоже формировался дерайвед ордер. Досадный баг :) 3 убрал запрос таблиц при подаче маркет ордера, исправил расчет цены. Подача заявки должны происходить быстрее. Ну и вообще это более правильно. Цена маркета считается как текущая +5%/-5%

Если брать "+5%/-5%" - то цена будет вне лимита для текущей сессии, соответсвенно заявка будет висеть невыполненная в состоянии ожидания. Вдобавок, BestAsk не обновляется, если инструмент не подписан.

ra81
ra81

Sergey Masyura: Если брать "+5%/-5%" - то цена будет вне лимита для текущей сессии, соответсвенно заявка будет висеть невыполненная в состоянии ожидания. Вдобавок, BestAsk не обновляется, если инструмент не подписан.

Кстати да. Такая петрушка на фучах может быть. Спасибо :). Инструмент будет обновляться при старте экспорта. Это уже однозначно. И бест аск с бидом обновляются тоже. Я проверял на стоках все ок. А на фучах не проверил дырявая моя голова. Поправлю проценты. Перепроверю.

Mikhail Sukhov
Mikhail Sukhov

ra81: А на фучах не проверил дырявая моя голова. Поправлю проценты. Перепроверю.

Может лучше планки? Security Min Max Prices.

ra81
ra81

Mikhail Sukhov:

ra81: А на фучах не проверил дырявая моя голова. Поправлю проценты. Перепроверю.

Может лучше планки? Security Min Max Prices. Вообще это конечно вариант. О нем даж не подумалось. Если макс прайс больше чем цена + 100 пунктов тогда берем ее, иначе 100 пунктов. А то можем залететь когда макс цена и есть текущая цена :)

ra81
ra81

Новый коммит: http://stocksharp.codeplex.com/SourceControl/changeset/changes/16310

для релиза 4.0.22

  1. для маркет ордеров вернул 100 пунктов добавляемых к цене заявки. Иначе 5% выходили за лимиты на фучах. Возможен вариант что заявка будет пролетать при движняках. Но ставить слишком много тоже чревато. Если будут проблемы, пишите добавлю.
OvcharenkoVI
OvcharenkoVI

Мне кажется, что Михаил другое имел ввиду. Что то вроде лимитов.

ra81
ra81

OvcharenkoVI: Мне кажется, что Михаил другое имел ввиду. Что то вроде лимитов. Пытался общаться с их техподдержкой, мне ответили что лимиты получить из терминала нельзя. Отсюда решение с макс/мин ценой или 100 пунктов, выглядит вполне красивым.

ra81
ra81

Новый коммит http://stocksharp.codeplex.com/SourceControl/changeset/changes/16430

тестировался на релизе 4.0.22

  1. ввел в расчет цены рыночного ордера использование границ цены за сессию. Если границы шире чем 100 пунктов, то их и будем использовать. Проторговали сей фикс и на фучах и на стоках. Вроде полет нормальный.
ra81
ra81

ra81: Новый коммит http://stocksharp.codeplex.com/SourceControl/changeset/changes/16430

тестировался на релизе 4.0.22

  1. ввел в расчет цены рыночного ордера использование границ цены за сессию. Если границы шире чем 100 пунктов, то их и будем использовать. Проторговали сей фикс и на фучах и на стоках. Вроде полет нормальный. Обнаружилась некая проблема в таком подходе. Если на вечерке после клиринга выставлять ордер он уже может уйти за лимиты, ибо цена берется за день как верхняя или нижняя планка. Похоже придется вернуться к простому выставлению по пунктам. Только учесть цену инструмента и пункты учитывать относительно цены. А то цена 130000 и 8888 при добавлении 100 пунктов, шибко отличается.
ra81
ra81

Новый коммит http://stocksharp.codeplex.com/SourceControl/changeset/changes/16718

Версия S# 4.0.22

  1. мелкая правка. Запрос истории возвращает свечки TimeFrame а не Candle. Собственно он их такими и создает, просто тип возвращал базовый. Неудобно несколько было я поправил.

  2. Событие NewOrder приходит сразу же после присвоения ордеру номера на бирже. Как Сделано у Сергея. Неконец руки и у меня дошли. Будет приходить на 1-3 секунды быстрее чем раньше было :)

Sergey Masyura
ra81
ra81

Если кто пользует еще мою версию коннектора отпишитесь я выложу апдейты. Версия все еще под 4.0.22. Под последние версии стокшарпа переписать руки не дошли. 4.0.22 хорошая стабильная версия пока сижу на ней.

OvcharenkoVI
OvcharenkoVI
OvcharenkoVI

Хотелось бы

ra81
ra81

Новый коммит http://stocksharp.codeplex.com/SourceControl/changeset/18825 Версия S# 4.0.22

  1. смена механизма формирования цены маркет ордера. Теперь 100 минстепсайзов. Должно хватать.
  2. добавил логгирование всего что приходит во враппер.
  3. допили логгирование до рабочего состояния. Теперь логгится что приходит в обработку в Trader
  4. исправил баг, по которому все тиковые сделки приходили как Sell.
  5. убрал получалку онлайн свечек с трейдера и все хвосты ее. Переформатил код. Сделал более читабельным.
  6. При подключении коннектора время тейдера синхронизируется с терминалом. И далее отмеряется локально, до следующего подключения. Убирает лишние опросы терминала.
  7. Перенес все таблицы из отдельного проекта в этот. Сменил область видимости для таблиц. Теперь все в одном проекте.

прошу заранее прощения за кривой коммит в несколько этапов, бесит меня этот TFS, не могу с ним по человечески работать.