Альфа-Коннектор (dev, s# 4.1)
Atom Ответить
26.03.2012


В dev ветке на CodePlex идет работа по обновлению Альфа-Коннектора и приведению его в полностью рабочее состояние.

Последние изменения:
- Адаптирован под S# 4.1 в плане синхронизации объектов (использование ProcessSecurityAction, ProcessEvents, security.BeginUpdate() и др)
- Работа с API Альфа-Директ из специально выделенного потока, обработка торговых данных из второго специального потока.
- Отправление ордеров без блокировки, использование OrderConfirmed для получения id (работа с ордерами еще ведется)
- Работает подписка на trades для разных инструментов.

TODO:
- Механизм повторной регистрации ордера, если тот не был принят брокером по причине превышения числа транзакций в секунду.
- Поддержка всех типов ордеров (STP, STP + TARGET PROFIT, %TR)
- Преобразование id инструментов в формат, единый с Quik, Plaza, Smart.
- Тестирование стратегий котирования
- Тестирование strategy rules.
- todo


Замечания, пожелания, баги приветсвуются. Пожалуйста, пишите в комментариях. Если это кому-то надо, дело пойдет на порядок быстрее.

PS: Особая благодарность Родиону и альтернативному алфьа-коннектору за экономию времени по некоторым вопросам ( https://stocksharp.ru/fo...Al-fa-Konniektor/?page=2 ).

Теги:


Спасибо: OvcharenkoVI




19 Ответов
Sergey Masyura

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


Исправлена подписка на несколько инструментов http://stocksharp.codepl.../changeset/changes/15873
Автор топика
Спасибо: OvcharenkoVI

Sergey Masyura

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


http://stocksharp.codepl.../changeset/changes/15884

Сделана корректная отмена ордеров, находящихся в процессе регистрации (т.е. не имеющих id).

Можно писать код вида:
Код

_trader.RegisterOrder(order);
_trader.CancelOrder(order);


Такой код используется в котировании в том числе.
Автор топика
Спасибо:

Mikhail Sukhov

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


Sergey Masyura Перейти
https://stocksharp.codeplex.com/SourceControl/changeset/changes/15884

Сделана корректная отмена ордеров, находящихся в процессе регистрации (т.е. не имеющих id).

Можно писать код вида:
Код

_trader.RegisterOrder(order);
_trader.CancelOrder(order);


Такой код используется в котировании в том числе.


Такого кода в котировании нет. После регистрации ожидается появление заявки. И только потом возможна отмена.
Спасибо:

Sergey Masyura

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


http://stocksharp.codepl.../changeset/changes/15885


Добавлена поддержка ExpiryDate (даты истечения) при регистрации ордера. До этого использовалось CancelTime (время снятия заявки).
Автор топика
Спасибо:

Sergey Masyura

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


Mikhail Sukhov Перейти
Sergey Masyura Перейти
https://stocksharp.codeplex.com/SourceControl/changeset/changes/15884

Сделана корректная отмена ордеров, находящихся в процессе регистрации (т.е. не имеющих id).

Можно писать код вида:
Код

_trader.RegisterOrder(order);
_trader.CancelOrder(order);


Такой код используется в котировании в том числе.


Такого кода в котировании нет. После регистрации ожидается появление заявки. И только потом возможна отмена.


Раньше был. Сейчас уже нет.
Автор топика
Спасибо:

Sergey Masyura

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


http://stocksharp.codepl.../changeset/changes/15886

Исправлена подача ордеров типа Market. Спасибо за баг репорт Валерию ( https://stocksharp.ru/users/390/ )
Автор топика
Спасибо: OvcharenkoVI

OvcharenkoVI

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


В принципе Коннектор приходит в рабочее состояние, пригодное для релиза 4.1. огромное спасибо Сергею за подписку на несколько инструментов.
Спасибо: Sergey Masyura

Sergey Masyura

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


http://stocksharp.codepl.../changeset/changes/15912

Добавлены AlfaLimitStopCondition, AlfaLimitStopTargetCondition, AlfaTrailingStopCondition. Регистрация стоп-лимит / стоп-лимит + цель заявок.

Примеры API подачи ордеров:
Код

            var order = new Order
            {
                Type = OrderTypes.Conditional,
                Portfolio = _portfolio,
                Security = _security,
                Volume = 1,
                Direction = OrderDirections.Buy,
                StopCondition = new AlfaLimitStopCondition
                {
                    StopPrice = textBoxBuyStopPrice.Text.To<double>(),
                    Slippage = Double.Parse(textBoxBuyStopSlippage.Text)
                }
            };


            _trader.RegisterOrder(order);


Код

            var order = new Order
            {
                Type = OrderTypes.Conditional,
                Portfolio = _portfolio,
                Security = _security,
                Volume = 1,
                Direction = OrderDirections.Buy,
                StopCondition = new AlfaLimitStopTargetCondition
                {
                    StopPrice = textBoxBuyStopTarget_Price.Text.To<double>(),
                    Slippage = textBoxBuyStopTarget_Slippage.Text.To<double>(),
                    TargetPrice = textBoxBuyStopTarget_Target.Text.To<double>()
                }
            };


            _trader.RegisterOrder(order);



Ближайшие таски:
- Отладка маркет котирования
- Распознавание типов ордеров при начальном чтении их из терминала при старте экспорта
Автор топика
Спасибо: OvcharenkoVI

Sergey Masyura

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


http://stocksharp.codepl.../changeset/changes/15920
http://stocksharp.codepl.../changeset/changes/15921
http://stocksharp.codepl.../changeset/changes/15922

Исправлено получение позиций по инструментам (Trader.Positions и Trader.GetPosition()).
Автор топика
Спасибо:

OvcharenkoVI

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


Sergey Masyura Перейти
https://stocksharp.codeplex.com/SourceControl/changeset/changes/15920
https://stocksharp.codepl.../changeset/changes/15921
https://stocksharp.codepl.../changeset/changes/15922

Исправлено получение позиций по инструментам (Trader.Positions и Trader.GetPosition()).


В бешеном темпе работаешь )
Спасибо:

Sergey Masyura

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


http://stocksharp.codepl.../changeset/changes/16069

Исправлено маркет котирование (раньше перерегистрация ордера работала через UpdateLimitOrder, теперь старая заявка снимается и выставляется новая).
Автор топика
Спасибо:

Sergey Masyura

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


Проверил стоп-ордера на ММВБ по просьбе - работают.

Портфель должен быть выбран, соответсвующий МММБ - например, 41469-000@MICEX_SHR
Бумага должна быть с ММВБ - например, ОАО Сбербанк SBER3@MICEX_SHR
Объем должен быть кратным минимальному лоту - например, для сбера 10 акций - это один лот. В коннектор передается число акций.
Стоп-Цена задается в условии, а не ордере
Код

                StopCondition = new AlfaLimitStopCondition
                {
                    StopPrice = textBoxBuyStopPrice.Text.To<double>(),
                    Slippage = Double.Parse(textBoxBuyStopSlippage.Text)
                }


StopPrice и Slippage должны быть кратными минимальному шагу цены - например, 95.50 и 0.01
Автор топика
Спасибо: OvcharenkoVI

Ignat

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


А работает ли move? Ранее для изменения ордера надо было снять-поставить, move в чистом виде не работал, соответственно и транзакций в 2 раза больше было и времени тратилось больше на изменение ордера.
И решен ли как-нибудь вопрос с невозможностью выставления более 1 ордера в секунду? Пропадающие в никуда ордера до того момента, как на форуме нашел объяснение про причину, конкретно напрягали.
Спасибо:

Sergey Masyura

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


Ignat Перейти
А работает ли move? Ранее для изменения ордера надо было снять-поставить, move в чистом виде не работал, соответственно и транзакций в 2 раза больше было и времени тратилось больше на изменение ордера.
И решен ли как-нибудь вопрос с невозможностью выставления более 1 ордера в секунду? Пропадающие в никуда ордера до того момента, как на форуме нашел объяснение про причину, конкретно напрягали.


Можно у альфа-трейдера вызывать ReRegister - но внутри себя он выполнет две тразакции снятие и выставление новой. В альфа-коннекторе в комментарий записывается transaction id, при UpdateLimitOrder через API альфы нет возможности его изменить. В результате получаем новый ордер с другим id имеет тот же transaction id, что и оригинальный ордер - это ломает обработку ордеров. Кстати, UpdateLimitOrder тоже выполняет две транзакции, но за один вызов API.

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

Sergey Masyura

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


http://stocksharp.codepl.../changeset/changes/16294

Исправлена регистрация/отмена стоп ордеров.
Автор топика
Спасибо: OvcharenkoVI

Sergey Masyura

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


http://stocksharp.codepl.../changeset/changes/16417

Важный фикс по регистрации/обработке ордеров (ФОРТС/ММВБ).
Автор топика
Спасибо:

AndreyStock

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


Добрый день!
Только недавно начал работать со StockSharp (использую StockSharp 4.1.1). Работаю через терминал AlfaDirect, соответственно используется альфа-коннектор, насколько я понимаю.
Периодически в процессе работы возникает какая-то ошибка, которая приводит к тому, что программа тихо, без каких либо сообщений или исключений, закрывается. Оборачивал все в try-catch, подписывался на все - все то же самое. Запускаю из-под VisualStudio, тоже никаких UnhandledException. Ошибка возникает, даже если не запускать никакой стратегии, а просто подписаться на получение некоторых данных из AlfaDirect - инструментов и стакана.
Первая мысль - виноват COM объект. Возможно, где-то в его unmanaged коде возникает ошибка и закрывается весь процесс без exception'а. Насколько такая версия может быть правдой? Насколько стабилен этот COM-объект?
Или нужно смотреть в сторону коннектора? Где и какие тогда исходники коннектора взять, чтобы погонять программу с исходниками из-под VisualStudio?
Может я вообще не в ту сторону смотрю и есть какой-то другой путь?
Буду рад любым советам и комментариям!
Спасибо:

Sergey Masyura

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


AndreyStock Перейти
Добрый день!
Только недавно начал работать со StockSharp (использую StockSharp 4.1.1). Работаю через терминал AlfaDirect, соответственно используется альфа-коннектор, насколько я понимаю.
Периодически в процессе работы возникает какая-то ошибка, которая приводит к тому, что программа тихо, без каких либо сообщений или исключений, закрывается. Оборачивал все в try-catch, подписывался на все - все то же самое. Запускаю из-под VisualStudio, тоже никаких UnhandledException. Ошибка возникает, даже если не запускать никакой стратегии, а просто подписаться на получение некоторых данных из AlfaDirect - инструментов и стакана.
Первая мысль - виноват COM объект. Возможно, где-то в его unmanaged коде возникает ошибка и закрывается весь процесс без exception'а. Насколько такая версия может быть правдой? Насколько стабилен этот COM-объект?
Или нужно смотреть в сторону коннектора? Где и какие тогда исходники коннектора взять, чтобы погонять программу с исходниками из-под VisualStudio?
Может я вообще не в ту сторону смотрю и есть какой-то другой путь?
Буду рад любым советам и комментариям!


Исходный код коннектора доступен на http://stocksharp.codepl...eControl/list/changesets .
По поводу исключения - http://msdn.microsoft.co...runhandledexception.aspx

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

Alexander

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


Андрей, у вас проблема в лицензии, уверен на 90%. Берите свежую версию, 4.1.4 и получайте лицензию.
Спасибо:


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

loading
clippy