Страница 2 из 2

Re: StopLoss и TakeProfit

Добавлено: 17 июн 2020, 09:43
evge
Приветствую!

Непонятно на какую цену включать трейлинг стоп, написал ниже по цене = trsto. Можете заменить тип сигнала и цену или дельту, если надо.

Код: Выделить всё

function Initialize()
{
//...
AddGlobalVariable("TS", Types.Boolean, false);
//...
}

function OnUpdate()
{
//...
if ( условие на лонг)
   {
      EnterLong();
      BreakingStop(sto, tak, SignalPriceType.DeltaFromAveragePrice);
      TS = false;
   }
   
   if (CurrentPL() > 1000 && !TS)
   {
      CancelStopLoss();
      TrailingStopLoss(trsto, SignalPriceType.Price)
      TS = true;   
   }
//...
}


Не все разбираются: что, зачем и почему. Понимаю. Поэтому буду приводить используемую информацию из справки по скриптам индикаторов и стратегий.

доп. информация:

CancelStopLoss() – отменить (снять) стоп-заявку, выставленную для защиты текущей позиции робота. Функция используется для отмены или редактирования положения текущего стопа. Повторный вызов функции выставления стопа не снимает старый и не выставляет новый стоп. Поэтому необходимо использовать данную функцию для отмены ранее выставленной заявки.

CancelActiveOrders(LeaveStop) – снять активные заявки.
LeaveStop – булевая переменная, управляющая снятием стопа к позиции.
• true – оставить стоп к позиции.
• false – снять все.

CurrentPL() – возвращает текущий доход по открытой позиции в валюте инструмента (рубли или пункты).
CurrentPLper() – возвращает изменение цены в процентах относительно учетной цены по открытой позиции в процентах.

TrailingStopLoss(ValueStop, SignalPriceType) – выставить защитную трейлинг стоп-маркет заявку к текущей позиции

SignalPriceType – тип задаваемого значения,
• Price – значения ValueStop и ValueTake задаются в абсолютных величинах (как цены стоп уровня и уровня тейк профита):
• DeltaFromAveragePrice – значения ValueStop и ValueTake задаются как отклонения от учетной цены позиции робота в валюте цены (значения задаются больше 0, робот сам определяет направление отклонения);
• DeltaInPercentFromAveragePrice – значения ValueStop и ValueTake задаются в виде отклонения от учетной цены открытия позиции робота в процентах (значения задаются больше 0, робот сам определяет направление отклонения).

AddGlobalVariable(Name, Types, Value) – функция создания статической переменной, которая сохраняет значение при следующем обращении к функции Evaluate() и OnUpdate(). В скрипте может быть определено несколько глобальных переменных.
Параметры:
• Name – строка - имя параметра.
• Types – тип переменной
o Int
o Long
o Double
o Boolean
o String
o DateTime
o IntList
o DoubleList
o DoubleDictionary
• Value – значение по умолчанию

Re: StopLoss и TakeProfit

Добавлено: 17 июн 2020, 11:03
Orange2000
Евгений спасибо. Логику понял.
по поводу цены. Допустим купили по 124 000. Если дошли до 125 000 то трейлинг включается в 200 пп от 125 уже.
trsto это что именно?
И обязательно CancelStop делать?

Re: StopLoss и TakeProfit

Добавлено: 17 июн 2020, 11:36
evge
если до этого ставили стоп, то надо его снять и это в доп. информации и описано, конкретно здесь:

CancelStopLoss() – отменить (снять) стоп-заявку, выставленную для защиты текущей позиции робота. Функция используется для отмены или редактирования положения текущего стопа. Повторный вызов функции выставления стопа не снимает старый и не выставляет новый стоп. Поэтому необходимо использовать данную функцию для отмены ранее выставленной заявки.

по поводу trsto это в данном примере конкретная цена, т.е. в примере должно быть задано trsto = 125000 - 200. Текущая позиция минус 200 пунктов. AverPrice() - 200, например.

AverPrice() – возвращает учетную цену открытой позиции

Код: Выделить всё

function Initialize()
{
//...
AddGlobalVariable("TS", Types.Boolean, false);
//...
}

function OnUpdate()
{
//...
if ( условие на лонг)
   {
      EnterLong();
      BreakingStop(sto, tak, SignalPriceType.DeltaFromAveragePrice);
      TS = false;
   }
   
   if (CurrentPL() > 1000 && !TS && CurrentPosition() > 0)
   {
      var trsto = AverRrice() - 200;
      CancelStopLoss();
      TrailingStopLoss(trsto, SignalPriceType.Price)
      TS = true;   
   }
//...
}


но есть варианты типа delta, при установке параметра SignalPriceType

• DeltaFromAveragePrice – значения ValueStop и ValueTake задаются как отклонения от учетной цены позиции робота в валюте цены (значения задаются больше 0, робот сам определяет направление отклонения);
• DeltaInPercentFromAveragePrice – значения ValueStop и ValueTake задаются в виде отклонения от учетной цены открытия позиции робота в процентах (значения задаются больше 0, робот сам определяет направление отклонения).

в этом случае в trsto должно быть уже не конкретное значение цены, а дельта от цены позиции, в пунктах или % в зависимости от параметра SignalPriceType

Re: StopLoss и TakeProfit

Добавлено: 17 июн 2020, 11:51
Orange2000
я не совсем понял про AverPrice()?
учетная цена, т.е. это цена по которой была открыта позиция ?

В Вашем примере, если цена без отката уйдет на 126000, уровень стопа подтянется на 125800?

Re: StopLoss и TakeProfit

Добавлено: 17 июн 2020, 12:58
evge
да,

AverPrice() учетная (средняя)

Позицию могли набирать не сразу (частями) и AverPrice() это покажет как среднюю цену (учетную цену)

126000 - 200 = 125800 - да

Re: StopLoss и TakeProfit

Добавлено: 18 июн 2020, 10:04
Orange2000
Я извиняюсь, возможно туплю. Проверить тестер не даст. Поэтому хочу точно прояснить ситуацию.

по двум строчкам вопрос:
var trsto = AverRrice() - 200; - тут получается если был лонг по 124 000 , то trsto=124000 - 200=123800 ? правильно?

и дальше мне надо что бы если улетим на 126000, то стоп стал 125800.
строчка TrailingStopLoss(123800, SignalPriceType.Price) это ведь не сделает???

Re: StopLoss и TakeProfit

Добавлено: 18 июн 2020, 11:17
evge
да. не сделает. эта строчка выставит трейлинг стоп на 2200 от текущей цены (126000), т.е. от цены позиции ниже на 200 пунктов.

Если нужно как описано от 126000 (точнее даже текущей цены, которая выше 126000) - 200, то

trsto задаем по другому

Код: Выделить всё

var trsto = Input1.Close[0] - 200;


на 200 пунктов ниже цены закрытия последнего бара

Re: StopLoss и TakeProfit

Добавлено: 18 июн 2020, 11:25
Orange2000
Теперь все срослось )))Спасибо огромное