Изменение StopLossStrategy
Atom
19.04.2011
Oppositus


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

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

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

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

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

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

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

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

return base.OnProcess();
}


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

Теги:


Спасибо:


1 2  >
Mikhail Sukhov

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


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

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


Нужно переопределять GetNewPrice.
Спасибо: Oppositus

Oppositus

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


Спасибо.
Спасибо:

Daenur

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


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

topic959

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


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

BasePrice
ProtectiveLevel
ProtectivePrice
?

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

Alexander

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


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

topic959

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


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


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

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

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

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

ra81

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


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

Код
        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;
            }
        }
Спасибо: topic959

topic959

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


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

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

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

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

ra81

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


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

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

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

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

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

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

topic959

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


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

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

Спасибо:
1 2  >

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

loading
clippy