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


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

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

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

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

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

Теги:


Спасибо: OvcharenkoVI




69 Ответов
< 1 2 3  >
ra81

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


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) Нет поддержки опционов совершенно. (та же беда у стандартного коннектора). Как доберусь до опционов сразу сделаю. В планах есть.

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

Mikhail Sukhov

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


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

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

ra81

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


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

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

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

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

Mikhail Sukhov

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


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

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

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

ra81

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


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

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

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


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

Mikhail Sukhov

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


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


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

ra81

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


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


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


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

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

Sergey Masyura

Фотография
Автор статей
Дата: 22.03.2012
Ответить


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


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


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

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


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

ra81

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


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

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

OvcharenkoVI

Фотография
Автор статей
Дата: 23.03.2012
Ответить


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

Mikhail Sukhov

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


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

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

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

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

ra81

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


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

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

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

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


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

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

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

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

Mikhail Sukhov

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


ra81 Перейти

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


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

ra81 Перейти

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


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

ra81

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



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

Это совсем грубо. И неудобно работать. И главное непрозрачно в коде.

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

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

Mikhail Sukhov

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


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


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

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

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

ra81

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


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


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

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

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

Отвечаю снова :). Если проследить историю разработки основного коннектора, то можно заметить что между двумя коммитами по багам, успел появиться альтернативный и стать работоспособным в большей степени чем базовый. Отсюда вывод - если бы я сидел и ждал, то не появилось бы данной темы, не появилось бы обсуждения, и вообще ничего бы наверняка не появилось, потому что активности не было вообще. Так что, хорошо что все так вышло. Надеюсь теперь базовый коннектор будет крут как никогда. Когда это случится я еще раз скажу - Вы ребята красавчеги просто. Такую штуку сделали клевую что вообще слов нет. Готов помогать все чем могу по части разработку коннектора. Любого. Главное чтобы работал так как положено, чего я и добивался собственно.
Спасибо:

Mikhail Sukhov

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


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


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

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

ra81

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


Mikhail Sukhov Перейти

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

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

Mikhail Sukhov

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


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


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

ra81

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


Mikhail Sukhov Перейти
ra81 Перейти
Делать коммиты в базовый?


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

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

OvcharenkoVI

Фотография
Автор статей
Дата: 26.03.2012
Ответить


ra81 Перейти
Mikhail Sukhov Перейти
ra81 Перейти
Делать коммиты в базовый?


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

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


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

ra81

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


OvcharenkoVI Перейти

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

Странная петрушка потому что у двоих точно собирается, кроме меня. А подподробнее можно?
Спасибо:

ra81

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


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

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

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

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

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

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

exarh

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


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

ra81

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


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


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

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

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

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

loading
clippy