Как выставлять заявки сразу по нескольким инструментам
Atom Ответить
25.03.2013


Где можно прочитать, - каким образом работать в рамках одной стратегии с несколькими инструментами?
Слышал, что делается это через BasketSecurity, но какой-либо другой информации не нашел.

Теги:


Спасибо:




7 Ответов
Moadip

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


Передали в стратегию несколько инструментов, создали по ним ордера, зарегистрировали.

BasketSecurity это другое. Это абстрактный класс у которого есть несколько наследников с которыми можно работать - BasketSecurity.

Корзина инструментов.
Спасибо:

Lipot

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


То есть получается в стратегию надо передавать коллекции Candleseries и CandleManager?
Автор топика
Спасибо:

Moadip

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


CandleSeries можно и внутри стратегии создать(инструменты же будут переданы).
А зачем создавать коллекцию CandleManager? Будет достаточно одного объекта.
Спасибо:

Lipot

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


Насчет CandleSeries понятно.

Насчет CandleManager, просто подумал раз его метод Start требует CandleSeries в качестве аргумента, то и CandleManager'ов должно быть несколько...

Получается я могу передать любой CandleSeries для метода Start?
Автор топика
Спасибо:

Lipot

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


Что-то не получается. Кто-нибудь может поподробнее объяснить?
Я передаю Trader.Securities через List<Securities> в стратегию в качестве аргумента.

Потом в конструкторе стратегии добавляю следующее:

foreach (var security in _securityList)
{
var tempSeries = new CandleSeries(typeof(TimeFrameCandle), security, _timeFrame);
_candleSeriesList.Add(tempSeries);
}
_candleManager.Start(_candleSeriesList.ElementAt(0));
_candleManager.Start(_candleSeriesList.ElementAt(1));


Потом в перегрузке метода OnStarted добавляю следующий код:

foreach (var series in _candleSeriesList)
{
series
.WhenCandlesFinished()
.Do(ProcessCandle)
.Apply(this);
}


Но при работе метода OnProcessCandle, если по первому инструменту все заявки выставляются, то по второму инструменту - заявки не выставляются по следующей причине:
RS_SRM3@RTS_SPBFUT007r0 | 26.03.2013 18:14:02.746 | Ошибка | Заявка 65608703 (0x20B08B3) не была принята по причине StockSharp.Quik.ApiException: Код ошибки Failed Сообщение Ошибка создания заявки. [FORTS][32] "Цена сделки вне лимита"..

Как передать в OnProcessCandle другой(второй, правильный) инструмент?
Автор топика
Спасибо:

esper

Фотография
Программист
Дата: 26.03.2013
Ответить


Смотрите в логе какие заявки с какими ценами уходят, потом посмотрите лимиты по этим инструментам и будет понятно в чем ошибка.
Спасибо:

Lipot

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


Да вроде разобрался. Спасибо!
Запускаю по всем инструментам CandleSeries и регистрируюсь на события окончания свечки.
Когда событие приходит создаю ордер и передаю ему candle.Security:

var orderBuy = new Order
{
Type = OrderTypes.Limit,
Volume = 1,
Price = candle.ClosePrice - 30,
Portfolio = base.Portfolio,
Security = candle.Security,
Direction = OrderDirections.Buy,
};



Теперь возникла вторая задача: надо каким-то образом из зарегистрированных заявок удалять определенные с фильтром по Security. Подозреваю, что это можно сделать буквально одной-двумя строчками. Не подскажите как?
Автор топика
Спасибо:


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

loading
clippy