Функция CloseAtTrailingStop

Не понимаю как работает CloseAtTrailingStop

  1. Dima

    Регистрация:
    26.02.20
    Сообщения:
    6
    Был на сайте:
    15.12.20

    Здравствуйте! Никак не пойму как работать с функцией CloseAtTrailingStop. Я так понимаю, что трейлинг стоп должен автоматически подтягиваться к цене и держаться от нее на заданном растоянии. А в функции CloseAtTrailingStop есть только параметры позиция, цена активаци и цена ордера, как для простого стоп оредра. А как тогда сделать, чтобы стоп следовал за ценой?

    Dima
    10.05.2020 22:05
    #1
  2. Алексей Ван Команда форума

    Регистрация:
    02.02.13
    Сообщения:
    1172
    Был на сайте:
    25.04.24
    Цитата: Dima

    Здравствуйте! Никак не пойму как работать с функцией CloseAtTrailingStop. Я так понимаю, что трейлинг стоп должен автоматически подтягиваться к цене и держаться от нее на заданном растоянии. А в функции CloseAtTrailingStop есть только параметры позиция, цена активаци и цена ордера, как для простого стоп оредра. А как тогда сделать, чтобы стоп следовал за ценой?

    Нужно каждую новую свечку или трейд, в коде, пытаться выставить новый CloseAtTrailingStop. Он будет подтягиваться, а отодвигаться не будет.

    Алексей Ван
    11.05.2020 06:32
    #2
  3. Dima

    Регистрация:
    26.02.20
    Сообщения:
    6
    Был на сайте:
    15.12.20

    Спасибо за ответ! Еще один вопрос появился по поводу этой функции. Я ее вызываю в событии CandleFinishedEvent. Я пока проверяю в тестере. Когда эта функция срабатывает, то позиция сразу закрывается и все сделка завершена и вызывается событие PositionClosingSuccesEvent. Вот кусочек кода.

     if (positions[0].State == PositionStateType.Open)
     {         
         if (lastCandle.Close > positions[0].EntryPrice + TrailingStop_Value * PriceStep) //цена пошла в нашу сторону
         {
               CurTab.CloseAtTrailingStop(positions[0], lastCandle.Close, lastCandle.Close - TrailingStop_Value * PriceStep);                 
         }
      }

    Когда в отладчике эту строку проходишь позиция еще не закрыта и в PositionsOpenAll она есть, но уже на следующей свече, позиции нет. И получается вход и через несколько пнуктов выход. Не получается сделать так чтобы например вошел по 1000 рублей, цена стала 1500, поставил стоп на 1200, потом цена стала 1800 поднялся стоп на 1600 и т.д. А программа получается выходит из сделки после первого же стопа.

     

    Dima
    13.05.2020 17:41
    #3
  4. Алексей Ван Команда форума

    Регистрация:
    02.02.13
    Сообщения:
    1172
    Был на сайте:
    25.04.24
    Цитата: Dima

    Спасибо за ответ! Еще один вопрос появился по поводу этой функции. Я ее вызываю в событии CandleFinishedEvent. Я пока проверяю в тестере. Когда эта функция срабатывает, то позиция сразу закрывается и все сделка завершена и вызывается событие PositionClosingSuccesEvent. Вот кусочек кода.

     if (positions[0].State == PositionStateType.Open)
     {         
         if (lastCandle.Close > positions[0].EntryPrice + TrailingStop_Value * PriceStep) //цена пошла в нашу сторону
         {
               CurTab.CloseAtTrailingStop(positions[0], lastCandle.Close, lastCandle.Close - TrailingStop_Value * PriceStep);                 
         }
      }

    Когда в отладчике эту строку проходишь позиция еще не закрыта и в PositionsOpenAll она есть, но уже на следующей свече, позиции нет. И получается вход и через несколько пнуктов выход. Не получается сделать так чтобы например вошел по 1000 рублей, цена стала 1500, поставил стоп на 1200, потом цена стала 1800 поднялся стоп на 1600 и т.д. А программа получается выходит из сделки после первого же стопа.

     

    Не надо передавать в качестве цены стопа текущее закрытие свечи... Нужно отнимать от него значение какое-то... Иначе позиция действительно будет закрываться

    Алексей Ван
    13.05.2020 22:04
    #4
  5. jimearthworm

    Регистрация:
    02.12.19
    Сообщения:
    6
    Был на сайте:
    18.06.21
    Цитата: Алексей Ван
    Нужно каждую новую свечку или трейд, в коде, пытаться выставить новый CloseAtTrailingStop. Он будет подтягиваться, а отодвигаться не будет.

    Пробовал ставить CloseAtTrailingStop по примерам из готовых роботов.

    _tab.CloseAtTrailingStop(openPositions[i],

                                _lastPrice - _lastPrice * TrailStop.ValueDecimal / 100,

                                _lastPrice);

    Так стоп и подтягивается и отодвигается. Гуляет на одном растоянии от цены, пока цена резко не пробьёт стоп ордер.

    Подскажите как исправить.

    jimearthworm
    01.06.2020 08:46
    #5
  6. sirius_x

    Регистрация:
    20.03.19
    Сообщения:
    2
    Был на сайте:
    02.02.23

      

    private List<decimal> candlesMA24Low = new List<decimal>();

    ///////////////////////////////////////////////////

    if (candles.Count > 25)

            {

                candles24Low.Clear();

                for (int i = 24; i > 0; i--)

                { 

                    candles24Low.Add(candles[candles.Count - i].Low);

                }

            }

    //////////////////////////////////////////////////

     if (openPositions[i].Direction == Side.Buy)

                {

                    if (candles24Low.Count > 1)

                    {

                        decimal averageLow = Math.Round(candles24Low.Average(), 2); // средняя минимальная цена за последние 24 свечи с округлением до 2   

                        decimal PriceActivation = averageLow - Math.Round(averageLow * 1 / 100, 2);// цена активации = минус 1 % от средней минимальной цены за 24 свечи  с округлением до 2  

                        decimal PriceOrder = PriceActivation - 10 * _tab.Securiti.PriceStep; // цена ордера продажи = цена активации - 10 шагов цены

                        _tab.CloseAtTrailingStop(openPositions[i], PriceActivation, PriceOrder);

                    }

                }

    sirius_x
    20.08.2020 13:16
    #6
  7. Алексей

    Регистрация:
    06.01.22
    Сообщения:
    12
    Был на сайте:
    12.02.22

    Такая идея.

    При работе функции CloseAtTrailingStop, собственно, стоп выставляется после завершения свечи. И пока свеча не завершилась можно уйти в минус. 

    Как реализовать появление стопа сразу после события? ( К примеру, для MacdTrail (Trend) после пересечении линий Macd вверх) Не дожидаясь завершения свечи.

    01.02.2022 09:51
    #7
  8. IgorB

    Регистрация:
    13.10.21
    Сообщения:
    41
    Был на сайте:
    30.07.23
    Цитата: Алексей

    Такая идея.

    При работе функции CloseAtTrailingStop, собственно, стоп выставляется после завершения свечи. И пока свеча не завершилась можно уйти в минус. 

    Как реализовать появление стопа сразу после события? ( К примеру, для MacdTrail (Trend) после пересечении линий Macd вверх) Не дожидаясь завершения свечи.

    Здравствуйте. Вы можете подпиаться на другой тип событий, например на новые трейды и использовать цену последнего трейда, не дожидаясь завершения свечей.

    IgorB
    01.02.2022 11:21
    #8
  9. Алексей

    Регистрация:
    06.01.22
    Сообщения:
    12
    Был на сайте:
    12.02.22
    Цитата: IgorB
    Цитата: Алексей

    Такая идея.

    При работе функции CloseAtTrailingStop, собственно, стоп выставляется после завершения свечи. И пока свеча не завершилась можно уйти в минус. 

    Как реализовать появление стопа сразу после события? ( К примеру, для MacdTrail (Trend) после пересечении линий Macd вверх) Не дожидаясь завершения свечи.

    Здравствуйте. Вы можете подпиаться на другой тип событий, например на новые трейды и использовать цену последнего трейда, не дожидаясь завершения свечей.

    Я не силен в программировании. Есть ли примеры роботов, использующих цену последнего трейда?

    01.02.2022 11:47
    #9
  10. IgorB

    Регистрация:
    13.10.21
    Сообщения:
    41
    Был на сайте:
    30.07.23
    Цитата: Алексей
    Цитата: IgorB
    Цитата: Алексей

    Такая идея.

    При работе функции CloseAtTrailingStop, собственно, стоп выставляется после завершения свечи. И пока свеча не завершилась можно уйти в минус. 

    Как реализовать появление стопа сразу после события? ( К примеру, для MacdTrail (Trend) после пересечении линий Macd вверх) Не дожидаясь завершения свечи.

    Здравствуйте. Вы можете подпиаться на другой тип событий, например на новые трейды и использовать цену последнего трейда, не дожидаясь завершения свечей.

    Я не силен в программировании. Есть ли примеры роботов, использующих цену последнего трейда?

    Посмотрите TimeOfDayBot. Или воспользуетесь поиском по проекту, ищите NewTickEvent.

    IgorB
    01.02.2022 12:07
    #10
  11. Алексей

    Регистрация:
    06.01.22
    Сообщения:
    12
    Был на сайте:
    12.02.22

    Для выставления стопа и профита в нем используется

    private void TabOnPositionOpeningSuccesEvent(Position position)

    в котором используется один параметр "Position " и не будет работать TrailingStop. Стоп не будет перемещаться за новой свечей. Все данные будут подтягиваться из открытой позиции

    01.02.2022 12:46
    #11
  12. IgorB

    Регистрация:
    13.10.21
    Сообщения:
    41
    Был на сайте:
    30.07.23
    Цитата: Алексей

    Для выставления стопа и профита в нем используется

    private void TabOnPositionOpeningSuccesEvent(Position position)

    в котором используется один параметр "Position " и не будет работать TrailingStop. Стоп не будет перемещаться за новой свечей. Все данные будут подтягиваться из открытой позиции

    Почти все идикаторы строят свои линии по закрытию свечей. Пока свеча не закрыта, линии могут пересекатся и обратно расходится на этой свече, это хорошо видно при больших движениях. Без закрытия свечи у линии нет определенного состояния. Так же без закрытия свечи у нее нет цены закрытия.
    В MacdTrail использется отклонение от цены закрытия последней свечи. Как вы хотите сравнивать то, что еще не случилось? Нужно привязывать значение трейлинг стопа к чемуто другому. Ускорить закрытие позиции можно только тем, что бы сравнивать цену последней сдлелки с последним значением индикатора чаще чем 1 раз за свечу. 

    IgorB
    01.02.2022 14:34
    #12
  13. Алексей

    Регистрация:
    06.01.22
    Сообщения:
    12
    Был на сайте:
    12.02.22

    А можно подписаться на событие сделки, а цену взять от закрытия предыдущей свечи?

    И есть возможность поставить стоп от начала события до завершения свечи?

    01.02.2022 17:22
    #13
  14. IgorB

    Регистрация:
    13.10.21
    Сообщения:
    41
    Был на сайте:
    30.07.23

    Ма

    Цитата: Алексей

    А можно подписаться на событие сделки, а цену взять от закрытия предыдущей свечи?

    И есть возможность поставить стоп от начала события до завершения свечи?

    Свечи хранятся в коллекции. Можно взять любую свечу из истории, отнимая индекс от крайнего индекса. Candles[Candles.Count -1] это крайняя свеча.  Так же есть разные события , например CandleUpdateEvent - событие обновления посленей свечи. PositionOpeningSuccesEvent - собыите успешного открытия позиции. Реализовать можно любую логику, если она не противоречит математике и времени возникновения событий.

    IgorB
    02.02.2022 12:17
    #14
  15. Алексей

    Регистрация:
    06.01.22
    Сообщения:
    12
    Был на сайте:
    12.02.22

    надо изучать матчасть! все реализуется достаточно просто. разберусь с кодом - напишу (если интересно).

    03.02.2022 12:58
    #15