← Zurück

Изменение StopLossStrategy

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

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

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

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

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

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

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

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

    return base.OnProcess();
}

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

War dieses Thema hilfreich?

Thema teilen

Kommentare (11)

Anmelden oder Konto erstellen, Melden Sie sich an oder registrieren Sie sich, um einen Kommentar zu hinterlassen

Mikhail Sukhov
Mikhail Sukhov

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

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

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

Oppositus
Oppositus
Oppositus Autor

Спасибо.

Daenur
Daenur

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

SelfDeleted
SelfDeleted

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

BasePrice ProtectiveLevel ProtectivePrice ?

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

Alexander
Alexander

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

SelfDeleted
SelfDeleted

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

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

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

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

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

ra81
ra81

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

        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;
            }
        }
SelfDeleted
SelfDeleted
SelfDeleted

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

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

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

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

ra81
ra81

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

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

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

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

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

SelfDeleted
SelfDeleted

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

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

Alexander
Alexander

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

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

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