Как привязаться к событию "сработал стоп"?

ищу эффективную схему переворота позиции.

  1. mrmvd

    Регистрация:
    19.03.20
    Сообщения:
    92
    Был на сайте:
    22.09.20

    В общем, я хочу сделать переворот позиции.

    Сейчас использую механизм просмотра цены по закрытию свечей

    // Логика переворота при стопе
                            
                            if (_lastPrice < stopPrice && rollovered == false)
                            {
                           

                               _tab.CloseAtLimit(
                                position,
                              _lastPrice + Slippage.ValueInt * _tab.Securiti.PriceStep,
                               position.OpenVolume);

                         _tab.SellAtLimit(Volume.ValueDecimal, _lastPrice + Slippage.ValueInt * _tab.Securiti.PriceStep);
                    }

    Но при этой конструкции я теряю живой стоп, который не дожидается закрытия свечи, как по событию closeatstop.

    Если же я использую CloseAtstop, я не могу отследить, что стоп сработал, потому что роботу не докладывают.

    Как в общем, понять, что тебя выбило по стопу? Может, где-то есть пример удачного переворота без ожидания закрытия свечек?

    И ещё хочу привязать к выбивке стопа задержку типа "ничего не делать 10 свечей", так что вот такая задача.

    mrmvd
    25.08.2020 14:43
    #1
  2. Алексей Ван Команда форума

    Регистрация:
    02.02.13
    Сообщения:
    1169
    Был на сайте:
    28.03.24
    Цитата: mrmvd

    В общем, я хочу сделать переворот позиции.

    Сейчас использую механизм просмотра цены по закрытию свечей

    // Логика переворота при стопе
                            
                            if (_lastPrice < stopPrice && rollovered == false)
                            {
                           

                               _tab.CloseAtLimit(
                                position,
                              _lastPrice + Slippage.ValueInt * _tab.Securiti.PriceStep,
                               position.OpenVolume);

                         _tab.SellAtLimit(Volume.ValueDecimal, _lastPrice + Slippage.ValueInt * _tab.Securiti.PriceStep);
                    }

    Но при этой конструкции я теряю живой стоп, который не дожидается закрытия свечи, как по событию closeatstop.

    Если же я использую CloseAtstop, я не могу отследить, что стоп сработал, потому что роботу не докладывают.

    Как в общем, понять, что тебя выбило по стопу? Может, где-то есть пример удачного переворота без ожидания закрытия свечек?

    И ещё хочу привязать к выбивке стопа задержку типа "ничего не делать 10 свечей", так что вот такая задача.

    Нужно использовать методы CloseAtStop и SellAtStop.

    События срабатывания стопа отдельно нет. Можно подписаться на событие закрытие позиции и проверить её состояние 

    Алексей Ван
    25.08.2020 17:40
    #2
  3. mrmvd

    Регистрация:
    19.03.20
    Сообщения:
    92
    Был на сайте:
    22.09.20

    Нужно использовать методы CloseAtStop и SellAtStop.

    События срабатывания стопа отдельно нет. Можно подписаться на событие закрытие позиции и проверить её состояние 

    А есть где-то инструкция как подписаться на текущие цены инструмента и привязываться уже к ним?

    mrmvd
    25.08.2020 18:29
    #3
  4. Алексей Ван Команда форума

    Регистрация:
    02.02.13
    Сообщения:
    1169
    Был на сайте:
    28.03.24
    Цитата: mrmvd

    Нужно использовать методы CloseAtStop и SellAtStop.

    События срабатывания стопа отдельно нет. Можно подписаться на событие закрытие позиции и проверить её состояние 

    А есть где-то инструкция как подписаться на текущие цены инструмента и привязываться уже к ним?

    в примерах это есть. Там и на тиках роботы есть и на стаканах. Смотрите.

    Алексей Ван
    25.08.2020 18:47
    #4
  5. mrmvd

    Регистрация:
    19.03.20
    Сообщения:
    92
    Был на сайте:
    22.09.20

    Да, разобрался, для тех, кому понадобится, проще привязываться к текущим ценам, для чего

    надо подключать переменную с реальной ценой выражением вида:

    decimal trueprice = _tab.PriceCenterMarketDepth;

    И от неё плясать.

    Кстати, очень не хватает:

    1) Параметра "держать ордер до конца бара" в Buy/Sellatlimit, как сделано в  buyatstop.
    2) Кнопки "перегрузить бота", которая есть, но у меня не работает.

    mrmvd
    25.08.2020 21:13
    #5
  6. mrmvd

    Регистрация:
    19.03.20
    Сообщения:
    92
    Был на сайте:
    22.09.20

    Братюнь, подскажи, а где формируется lastTrade, цена последней сделки?
    Я пытаюсь вытащить её из BotTabSimple, подключая как BotTabSimple.lastTrade, а мне пишет что
    в BotTabSimple нет такой штуки как lastTrade.

    А я чего это делаю - на _tab.PriceCenterMarketDepth; не реагирует стоп, и не могу тени поймать по-человечески.
    То есть он как бы реагирует, но сильно позже - через 1 или 2 свечи, а стопы привязаны к lastTrade и срабатывают мгновенно.

    mrmvd
    31.08.2020 15:32
    #6
  7. Алексей Ван Команда форума

    Регистрация:
    02.02.13
    Сообщения:
    1169
    Был на сайте:
    28.03.24
    Цитата: mrmvd

    Братюнь, подскажи, а где формируется lastTrade, цена последней сделки?
    Я пытаюсь вытащить её из BotTabSimple, подключая как BotTabSimple.lastTrade, а мне пишет что
    в BotTabSimple нет такой штуки как lastTrade.

    А я чего это делаю - на _tab.PriceCenterMarketDepth; не реагирует стоп, и не могу тени поймать по-человечески.
    То есть он как бы реагирует, но сильно позже - через 1 или 2 свечи, а стопы привязаны к lastTrade и срабатывают мгновенно.

     _tab.Trades[_tab.Trades.Count - 1].Price;

    Алексей Ван
    01.09.2020 14:35
    #7
  8. mrmvd

    Регистрация:
    19.03.20
    Сообщения:
    92
    Был на сайте:
    22.09.20

    Ай спасибо, пойду кодить :)

    mrmvd
    01.09.2020 17:05
    #8
  9. Konstb

    Регистрация:
    18.03.17
    Сообщения:
    51
    Был на сайте:
    06.12.23
    Цитата: mrmvd

    В общем, я хочу сделать переворот позиции.

    Сейчас использую механизм просмотра цены по закрытию свечей

    // Логика переворота при стопе
                            
                            if (_lastPrice < stopPrice && rollovered == false)
                            {
                           

                               _tab.CloseAtLimit(
                                position,
                              _lastPrice + Slippage.ValueInt * _tab.Securiti.PriceStep,
                               position.OpenVolume);

                         _tab.SellAtLimit(Volume.ValueDecimal, _lastPrice + Slippage.ValueInt * _tab.Securiti.PriceStep);
                    }

    Но при этой конструкции я теряю живой стоп, который не дожидается закрытия свечи, как по событию closeatstop.

    Если же я использую CloseAtstop, я не могу отследить, что стоп сработал, потому что роботу не докладывают.

    Как в общем, понять, что тебя выбило по стопу? Может, где-то есть пример удачного переворота без ожидания закрытия свечек?

    И ещё хочу привязать к выбивке стопа задержку типа "ничего не делать 10 свечей", так что вот такая задача.

    Добрый день, столкнулся с такой же задачей после срабатывания стопа необходимо "отключить" логику бота на N свечей. Удалось сформировать рабочий код?

    Konstb
    02.09.2020 22:03
    #9
  10. Konstb

    Регистрация:
    18.03.17
    Сообщения:
    51
    Был на сайте:
    06.12.23

    Всем привет, а это разве не они

     

    _tab2.PositionBuyAtStopActivateEvent += _tab2_PositionBuyAtStopActivateEvent;

    _tab2.PositionSellAtStopActivateEvent += _tab2_PositionSellAtStopActivateEvent;    

    Konstb
    03.09.2020 12:21
    #10
  11. mrmvd

    Регистрация:
    19.03.20
    Сообщения:
    92
    Был на сайте:
    22.09.20

    Добрый день, столкнулся с такой же задачей после срабатывания стопа необходимо "отключить" логику бота на N свечей. Удалось сформировать рабочий код?

    1) Да, удалось: вводим новую переменную "Quarantine"

    2) В логике закрытия стоп-позиции отмечаем номер текущей свечи, Quarantine-candle

    3) В логике открытия первой позиции делаем проверку "если номер текущей свечи минус Quarantine-Candle > Quarantine", то открываем позицию.

    Код сейчас глянуть не могу - если не разберёшься, пиши, гляну потом.

    mrmvd
    03.09.2020 19:57
    #11
  12. Konstb

    Регистрация:
    18.03.17
    Сообщения:
    51
    Был на сайте:
    06.12.23
    Цитата: mrmvd

    Добрый день, столкнулся с такой же задачей после срабатывания стопа необходимо "отключить" логику бота на N свечей. Удалось сформировать рабочий код?

    1) Да, удалось: вводим новую переменную "Quarantine"

    2) В логике закрытия стоп-позиции отмечаем номер текущей свечи, Quarantine-candle

    3) В логике открытия первой позиции делаем проверку "если номер текущей свечи минус Quarantine-Candle > Quarantine", то открываем позицию.

    Код сейчас глянуть не могу - если не разберёшься, пиши, гляну потом.

    буду признателен -что то не разобрался

    Konstb
    04.09.2020 13:04
    #12
  13. mrmvd

    Регистрация:
    19.03.20
    Сообщения:
    92
    Был на сайте:
    22.09.20

    Вот таким образом я у себя сформировал условие выжидания после выбития стопа

     

     if (stopped_long == true || stopped_short == true)
            {

      // Выжидаем

                if (((candles.Count - 1) - candlecount - Quarantine.ValueDecimal) > 0)



     где Quarantine - это переменная, которую ты задаёшь "сколько свечек выжидать после события"

    stopped_long или stopped_short - это переменные, которые ты задаёшь в true когда тебя выбивает стоп, только потом не забывай сбросить их обратно в false.

    Ну и где ставить это условие, сам придумывй

    mrmvd
    05.09.2020 16:53
    #13
  14. Konstb

    Регистрация:
    18.03.17
    Сообщения:
    51
    Был на сайте:
    06.12.23

    Спасибо, с этим все понятно. Как раз самый главный вопрос - куда поставить  "stopped_long или stopped_short ". Так как отдельного события на стоп нет. Поставил пока в событие close ( у меня реверсивная логика). Работает вроде корректно. Но опасаюсь "подводного камня". Это немного "костыль" IMHO. Лучше бы конечно к событию стоп привязаться.

     

    В любом случае спасибо. Ты дал мне правильное направление. Благодарю.

    Konstb
    07.09.2020 12:43
    #14
  15. mrmvd

    Регистрация:
    19.03.20
    Сообщения:
    92
    Был на сайте:
    22.09.20
    Цитата: Konstb

    Так как отдельного события на стоп нет. Поставил пока в событие close ( у меня реверсивная логика). Работает вроде корректно. Но опасаюсь "подводного камня". Это немного "костыль" IMHO. Лучше бы конечно к событию стоп привязаться.

     

    В любом случае спасибо. Ты дал мне правильное направление. Благодарю.

    Я для себя нашёл что лучшее покамест - это условие: "если текущая цена < стопцены - крыть по маркетку и включать флаги".

    Гонял тесты на "крыть по стопу" и "крыть по маркету" - разницу не заметил. Думаю, что если ликвидность позволяет, так почему бы не пользоваться маркетом?

    mrmvd
    07.09.2020 16:21
    #15
  16. Ghost-mo

    Регистрация:
    22.06.20
    Сообщения:
    19
    Был на сайте:
    02.02.23
    Ghost-mo
    27.09.2020 12:12
    #16