OvcharenkoVI
|
Дата: 09.02.2012
Круто! Очень хотелось бы посмотреть документацию по этому коннектору)
|
|
Спасибо:
|
|
|
|
|
Mikhail Sukhov
|
Дата: 11.02.2012
А где сам автор? Давайте его расцелуем, что ли.
|
|
Спасибо:
|
|
|
|
|
ra81
|
Дата: 11.02.2012
|
|
|
|
Целовать не нужно :). Лучше крепкое мужское рукопожатие :)
Документации особой не требуется. Коннектор ведет себя так как должен себя вести по идеологии BaseTrader.
Единственный ньюанс это наличие методов UnregisterPortfolios(), UnregisterSecurities(), UnRegisterOrders(), UnRegisterMyTrades(), UnregisterOrders(), UnRegisterPositions() - которые позволяют убрать подписку на получение этих данных. Есть и обратные методы RegisterXXX(). Например нужны данные только по позициям, тогда дерегистрируем все таблицы после старта экспорта и включаем RegisterPositions(). Будем получать только изменения по позициям и новые позиции, но позиция Деньги сюда не входит.
На самом деле на низовом уровне, где данные получаются от Альфы, коннектор загребает все новые данные, потому как фильтровать их невозможно. Составные фильтры по SQL запросу толком не работают. Отсюда данные фильтруются на уровне Wrapper и в трейдер уже доходит только то, на что была подписка. Это вероятно нужно учитывать.
StartExport() - автоматом запускает экспорт основных данных. Таким образом если например бумаги не пришли в событии TraderConnected, они придут позже. (Часто бывает что в текущем коннекторе при старте бумаги не приходят или портфели.)
Более подробная дока будет позже. ПОтому как самому нужна.
На самом деле я взял за основу текущий коннектор и на данном этапе переработал событийную модель в части подписки/отписки на получение данных. Работа с ордерами и свечками просто копипастнута. Постепенно и до нее дойдут руки, если не удовлетворит - переработаю и ее.
Баги есть. Но исправляю. Можно сказать что это преальфа релиз :).
|
|
|
|
|
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 не тестировались. И не факт что будут отрабатывать корректно. Ставиться должны нормально, и апдейтиться, а вот парситься как будут, бог знает.
|
|
|
|
|
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
|
|
Спасибо:
|
|
|
|
|
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"]);
|
|
Спасибо:
|
|
|
|