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

Альтернативный Альфа-Коннектор
Atom
2/9/2012
Sergey Masyura


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

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

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

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

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

Tags:


Thanks: OvcharenkoVI


1 2 3  > >>
OvcharenkoVI

Avatar
Date: 2/9/2012
Reply


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

Mikhail Sukhov

Avatar
Date: 2/11/2012
Reply


Sergey Masyura

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


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

ra81

Avatar
Date: 2/11/2012
Reply


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


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

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

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

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

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

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

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

Thanks: Sergey Masyura

Mikhail Sukhov

Avatar
Date: 2/12/2012
Reply


ra81

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


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

ra81

Avatar
Date: 2/13/2012
Reply


Mikhail Sukhov
ra81

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


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


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

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

http://stocksharp.codepl.../changeset/changes/14410
Thanks:

ra81

Avatar
Date: 2/13/2012
Reply


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

http://stocksharp.codepl.../changeset/changes/14416
Thanks:

ra81

Avatar
Date: 2/15/2012
Reply


Новый коммит. http://stocksharp.codepl...hangeset/changes/14570#

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

Code
            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 не тестировались. И не факт что будут отрабатывать корректно. Ставиться должны нормально, и апдейтиться, а вот парситься как будут, бог знает.
Thanks: fau Sergey Masyura

ra81

Avatar
Date: 2/16/2012
Reply


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

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


Code
            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.

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

ra81

Avatar
Date: 2/17/2012
Reply


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

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

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

exarh

Avatar
Date: 3/11/2012
Reply


Решил попробовать ваш коннектор, т.к. другой для Альфы с двумя запущенными стратегиями вообще отказывается работать. Сразу на багу наткнулся
В 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"]);
Thanks:
1 2 3  > >>

Attach files by dragging & dropping, , or pasting from the clipboard.

loading
clippy