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

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


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

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

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

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

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

Теги:


Спасибо: OvcharenkoVI


1 2 3  > >>
OvcharenkoVI

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


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

Mikhail Sukhov

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


Sergey Masyura

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


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

ra81

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


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


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

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

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

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

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

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

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

Спасибо: Sergey Masyura

Mikhail Sukhov

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


ra81

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


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

ra81

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


Mikhail Sukhov
ra81

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


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


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

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

http://stocksharp.codepl.../changeset/changes/14410
Спасибо:

ra81

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


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

http://stocksharp.codepl.../changeset/changes/14416
Спасибо:

ra81

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


Новый коммит. http://stocksharp.codepl...hangeset/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

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


Новый коммит http://stocksharp.codepl...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

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


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

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

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

exarh

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


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

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

loading
clippy