Вопрос по выставлению заявок
Atom Ответить
15.03.2012


Ситуация простая - хочу купить/продать по рынку и прикрыть позицию стопом. Для примера использую акции сбера.

Вариант №1
Покупаю по рынку обычным способом (с помощью маркет-заявки или лимитной заявки с большим отступом по цене), все ок. Тут же подписываюсь на событие исполнения заявки. Хочу получать событие один единственный раз, когда заявка исполнилась полностью.
Код

this.When(this.mainOrder.Matched().Do(OnMainOrderMatched).Once());

Все хорошо, заявка попала в систему, исполнилась, попадаем в OnMainOrderMatched. Здесь я хочу получить среднюю цену исполнения заявки, чтобы от этого уровня поставить стоп-лосс.
Код

decimal averagePrice = this.mainOrder.GetAveragePrice();

К сожалению, averagePrice остается всегда равной нулю. В КВИКе аналогичный подход дает правильный результат, averagePrice равен цене исполнения заявки.

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

this.When(mainOrder.NewTrades()).Do(OnNewOrderTrades).Once();

далее в OnNewOrderTrades
Код

if ((this.mainOrder != null) && (this.mainOrder.Id == myTrades.Last().Order.Id))
{
	OnMainOrderMatched();
}

Тогда в OnMainOrderMatched уже имеем averagePrice соответствующую действительности.

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


Переходим к Варианту №2
Благодаря разработчикам S# существует более простой способ выставления заявок и прикрытия их стопами, через котирование и дочерние стратегии. Но сразу же наталкиваюсь на проблему с выставлением рыночной заявки через котирование - у заявки отбрасывается дробная часть и заявка появляется в системе по 101.00 или по 102.00, хотя реальная цена колеблется в этом промежутке с сотыми долями.
Это происходит и у меня, и в проекте-примере.


Возникает вопрос - кто как справляется с данной задачей в СмартКОМе?

Теги:


Спасибо:




19 Ответов
Mikhail Sukhov

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


Daenur Перейти
А Periodical - тогда надо городить сложную логику для стопов с учетом исполнения заявки по частям.


А в чем сложность?

Daenur Перейти

у заявки отбрасывается дробная часть и заявка появляется в системе по 101.00 или по 102.00, хотя реальная цена колеблется в этом промежутке с сотыми долями.


Сбер? Нужно больше информации. С какими параметрами запускается котирование и какое именно.
Спасибо:

Daenur

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


Сложность в учете уже исполнившегося объема и переставлении стопов под новый объем. Чем больше действий - тем больше вероятность ошибки. Проще и надежней поставить один стоп на весь объем заявки сразу по ее исполнению.


Котирование - как в примере SampleSmartSMA
Код

_trader.NewSecurities += securities => this.GuiAsync(() =>
{
// находим нужную бумагу
var lkoh = securities.FirstOrDefault(s => s.Id == "Сбербанк России ОАО ао@EQBR");

if (lkoh != null)
{
	_lkoh = lkoh;
	this.GuiAsync(() =>
	{
		Start.IsEnabled = true;
	});
}
});

...

// создаем торговую стратегию
_strategy = new SmaStrategy(_candleManager, longSma, shortSma, _timeFrame)
{
	Volume = 1,
	Security = _lkoh,
	Portfolio = Portfolios.SelectedPortfolio,
	Trader = _trader,
};

...

// запускаем процесс получения стакана, необходимый для работы алгоритма котирования
_trader.RegisterQuotes(_strategy.Security);
Автор топика
Спасибо:

Mikhail Sukhov

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


Это у нас такие идентификаторы в Смарте? Можно как-то лог привести работы котирования?
Спасибо:

Daenur

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


Ага. Конечно, если взять (lkoh.ExtensionInfo)).Items[0] можно получить нормальный идентификатор {[SecuritySmartId, SBER]}


Сразу после создания подписался на событие
Код

_trader.Log += new Action<LogMessage>(_trader_Log);

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

Собственно стакан получается нормально, данные идут.

upd. Сейчас прикручу logManager, посмотрю, что в него идет...
log.txt 16 KB (0)
Автор топика
Спасибо:

Mikhail Sukhov

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


Daenur Перейти
Если подскажете какой лог и как привести - сделаю.


Тот участок, который покажет, что не так с ценами. ГОСТ-а нет.BigGrin
Спасибо:

Daenur

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


Прикрутил
Код

_logManager.Sources.Add(_strategy);
_logManager.Sources.Add(_trader);

сразу после создания объектов. Собствено файл с логом прикрепил к предыдущему своему сообщению. Увы, не вижу там строки о том, почему цена неверно рассчитывается. Blushing
Автор топика
Спасибо:

Mikhail Sukhov

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


А чему равен Security.MinStepSize + Decimals? Особенно интересна ситуация с идентификаторами, которые у нас, кстати, правильные, тоесть SBER@EQBR. Думаю, все данные по инструментам поехали. Может у вас смарт ком старый?
Спасибо:

Daenur

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


Security.MinStepPrice = 1
Security.MinStepSize = 2
Security.Decimals = 0

SmartCOM последний, с их сайта, недавно обновился. На предпоследней версии та же самая фигня была.
Автор топика
Спасибо:

Alexander

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


а версия S#?
Спасибо:

Daenur

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


StockSharp 4.0.22

Михаил, может, есть возможность дать мне исходники всего проекта? Так бы я мог разбираться с проблемами, не обращаясь к Вам по пустякам. А то и я не могу понять в чем дело, и Вас напрягаю. Какая-то "угадайка" получается сильно растянутая по времени...
Автор топика
Спасибо:

Mikhail Sukhov

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


Daenur Перейти
StockSharp 4.0.22

Михаил, может, есть возможность дать мне исходники всего проекта? Так бы я мог разбираться с проблемами, не обращаясь к Вам по пустякам. А то и я не могу понять в чем дело, и Вас напрягаю. Какая-то "угадайка" получается сильно растянутая по времени...


Работа напрямую со смартком - это SmartTrader.Wrapper. Только вам это не поможет. У вас какие-то данные "сдвинуты" (что было именем, стало кодом). Двое подтвердили уже по поводу сбера, что у них SBER@EQBR.
Спасибо:

Alexander

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


Начните с SampleSmart
Спасибо:

Daenur

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


Подключился в SampleSmart, со сбером аналогично (см. вложение).

Сейчас выяснил, я подключаюсь не напрямую к серверам АйТи Инвест, а через другой мидл-офис, по другому IP. С этим может быть связано?
sber.png 80 KB (0)
Автор топика
Спасибо:

Alexander

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


Возможно. Чтобы удостовериться - попробуйте подключиться напрямую к айти. Хотя бы по тестовому доступу.
Спасибо:

Daenur

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


По тестовому доступу все то же самое. :(
Завтра, конечно, попробую по нормальному логину напрямую к серверам АйТи Инвест подключиться, сейчас не хватает прав чтобы эту возможность настроить...

Но вообще у меня и раньше так же идентификаторы в Смарте выглядели, просто не знал, что это неправильно. И на прошлых версиях СмартКОМа, и на прошлых версиях S#.
Автор топика
Спасибо:

Mikhail Sukhov

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


Daenur Перейти
По тестовому доступу все то же самое. :(
Завтра, конечно, попробую по нормальному логину напрямую к серверам АйТи Инвест подключиться, сейчас не хватает прав чтобы эту возможность настроить...

Но вообще у меня и раньше так же идентификаторы в Смарте выглядели, просто не знал, что это неправильно. И на прошлых версиях СмартКОМа, и на прошлых версиях S#.


Получил демо. Мой скрин в аттаче. Любопытно, что шаг цены до сих пор неправильно транслируется. Уже была такая тема https://stocksharp.ru/posts/m/12516/ и на форуме айти http://www.itinvest.ru/f...90&st=0&p=267901 У тех поддержки оказывается нет такого понятия как шаг ценыLaugh Секция ММВБ Смартком не поддерживается, имхо. Не знаю, имеет ли смысл дальше мучать это направление...
Спасибо: Daenur

Daenur

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


Я им, конечно же, написал. Но это вообще кретинизм полнейший! С КВИКом тоже проблемм хватает, но там хоть как-то работает. А со Смартом просто нет слов!

Согласен, дальше эту тему пинать не стоит. Сделают - хорошо. А пока придется руками выставлять. Увы, чувствую, еще намучаюсь со Смартом. Sneaky

Спасибо большое, что уделили столько времени моей проблеме!
Автор топика
Спасибо:

Alexander

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


Daenur Перейти
Я им, конечно же, написал. Но это вообще кретинизм полнейший! С КВИКом тоже проблемм хватает, но там хоть как-то работает. А со Смартом просто нет слов!

Согласен, дальше эту тему пинать не стоит. Сделают - хорошо. А пока придется руками выставлять. Увы, чувствую, еще намучаюсь со Смартом. Sneaky

Спасибо большое, что уделили столько времени моей проблеме!


Я своих первых ботов писал на смарткоме в 2009 году.
С тех пор стараюсь от этого держаться подальше.

На квике кстати все боты которые были написаны в начале 2011 года (через S#) - работают стабильно до сих пор. Т.е. действительно проблем можно сказать нет.
Спасибо:

Daenur

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


Так для себя я тоже через КВИК подключаюсь. :)
Автор топика
Спасибо:


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

loading
clippy