Изменение StopLossStrategy
Atom Reply
4/19/2011


Здравствуйте.

Я хочу реализовать trailing stop на своем собственном алгоритме. То есть изменять цену сразатывания стопа во время работы.

Допустим, уровнем стопа будет служить SMA.

Тогда я наследуюсь от StopLossStrategy, в OnProcess рассчитываю новое значение стоп-цены и... Что делаю? Какой параметр в базовом классе изменить, чтобы стратегия начала работать от новой цены?

Код
protected override StrategyProcessResults OnProcess()
{
if(/* Значение МА не изменилось, переставлять стоп не надо */)
{
return base.OnProcess();
}

double newStopPrice = /* Новое значение МА */;

/* Как привести новое значение цены в вид, который примет терминал?
Скажем, для фьюча РТС надо отбросить дробную часть и сделать шаг цены кратным 5 */

/* Собственно вопрос:
Как указать, что теперь StopLossStrategy должа сработать по достижении newStopPrice? */

return base.OnProcess();
}


Заранее спасибо.

Tags:


Thanks:




11 Answers
Mikhail Sukhov

Avatar
Articles author Programmer Trader
Date: 4/19/2011
Reply


Oppositus Перейти
Здравствуйте.

Я хочу реализовать trailing stop на своем собственном алгоритме. То есть изменять цену сразатывания стопа во время работы.


Нужно переопределять GetNewPrice.
Thanks: Oppositus

Oppositus

Avatar
Date: 4/19/2011
Reply


Спасибо.
Topic starter
Thanks:

Daenur

Avatar
Date: 2/23/2012
Reply


Oppositus, а можно пример увидеть?
Thanks:

topic959

Avatar
Date: 4/16/2012
Reply


В документации сказано, что метод GetNewPrice (унаследован от QuotingStrategy) получает новую цену для заявки. Как он связан со свойствами StopLossStrategy:

BasePrice
ProtectiveLevel
ProtectivePrice
?

Иными словами, чтобы переопределить GetNewPrice, нужно понять, что он изначально определяет!
Thanks:

Alexander

Avatar
Date: 4/16/2012
Reply


Никак не связан. Он ничего не устанавливает, он лишь возвращает новую цену для заявки в зависимости от алгоритма. К примеру - встречную по стакану.
Thanks:

topic959

Avatar
Date: 4/16/2012
Reply


Alexander Mukhanchikov Перейти
Никак не связан. Он ничего не устанавливает, он лишь возвращает новую цену для заявки в зависимости от алгоритма. К примеру - встречную по стакану.


Тогда, для чего его переопределять, чтобы получить скользящий стоп (см. выше пост Михаила Сухова)?

Логичнее менять ProtectivePrice:

- начальное значение ProtectivePrice = BasePrice + ProtectiveLevel
- последующие в зависимости от движения цены.

Только как его изменить - не соображу. ProtectivePrice только на чтение:
public override decimal ProtectivePrice { get; }
Thanks:

ra81

Avatar
Date: 4/16/2012
Reply


Унаследуйтесь от стратегии СТопЛосс и переопределите свойства типо вот так

Код
        public override decimal ProtectivePrice
        {
            get
            {
                if(ProtectiveDirection == OrderDirections.Buy)
                {
                    if (_sma.LastValue > _stopPrice)
                        _stopPrice = _sma.LastValue;
                }
                else
                {
                    if (_sma.LastValue < _stopPrice)
                        _stopPrice = _sma.LastValue;
                }

                return _stopPrice;
            }
        }
Thanks: topic959

topic959

Avatar
Date: 4/26/2012
Reply


Общий вопрос по работе стратегии StopLossStrategy:

я правильно понимаю, что при срабатывании условия - цена последнего тика >/< ProtectivePrice регистрируется лимитированная заявка с ценой ProtectivePrice?

Если есть желание регистрировать рыночную заявку, что лучше предпринять? Готов попробовать дописать в родительский класс QuotingStrategy свойство типа "IsMarketOrderUsed" (по умолчанию false).

P.S. на предыдущие мои посты о скользящем стопе достаточно было ответить, что уже реализовано свойство "IsTrailing"... Этого нет в документации, и нет в примерах. Узнать об этом, кроме как последовательно просматривая свойства StopLossStrategy, нельзя.
Thanks:

ra81

Avatar
Date: 4/26/2012
Reply


topic959 Перейти
Общий вопрос по работе стратегии StopLossStrategy:

я правильно понимаю, что при срабатывании условия - цена последнего тика >/< ProtectivePrice регистрируется лимитированная заявка с ценой ProtectivePrice?

Если есть желание регистрировать рыночную заявку, что лучше предпринять? Готов попробовать дописать в родительский класс QuotingStrategy свойство типа "IsMarketOrderUsed" (по умолчанию false).

P.S. на предыдущие мои посты о скользящем стопе достаточно было ответить, что уже реализовано свойство "IsTrailing"... Этого нет в документации, и нет в примерах. Узнать об этом, кроме как последовательно просматривая свойства StopLossStrategy, нельзя.

Поскольку базовой является стратегия котирования, то заявка будет исполняться через котирование. Ну если я не прав то пусть меня поправят. Опять же в ProtectiveStrategy есть свойство говорящее о выставлении простой рыночной заявки вместо котирования, как это работает я не скажу.

В предыдущих своих постах речь шла о стопе на базе скользящей. Простой галочкой в свойствах это не решается :)
Thanks:

topic959

Avatar
Date: 4/26/2012
Reply


Если быть честным, то у меня уже накопилось достаточно вопросов "как это работает". Настолько, что чувство досады и разочарования от необходимости обращаться на форум по мелочам растет с каждым днем.

Я ценю чужой труд и предпочел бы заплатить за входной билет в "клуб с открытым кодом".

Thanks:

Alexander

Avatar
Date: 4/26/2012
Reply


topic959 Перейти
Если быть честным, то у меня уже накопилось достаточно вопросов "как это работает". Настолько, что чувство досады и разочарования от необходимости обращаться на форум по мелочам растет с каждым днем.

Я ценю чужой труд и предпочел бы заплатить за входной билет в "клуб с открытым кодом".



Есть платная поддержка.
По поводу исходников - можете обратиться в скайп (amukhanchikov).
Thanks:


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

loading
clippy