ФОРТС SL и TP

 

Привет!

Н‌икогда не использовал SL и TP

П‌рошу разъяснить.

С‌топ-лосс и тейк-профит устанавоиваются уже на существующую позицию

и‌ли можно задавать эти параметры в устанавливаемом ордере, т.е когда позиция ещё не открыта?

Если можно задавать параметры в ордере, то как рассчитывать SL и TP в рыночном ордере (цена позиции не фиксирована)? 

 
prostotrader:

Привет!

Н‌икогда не использовал ST и TP

П‌рошу разъяснить.

С‌топ-лосс и тейк-профит устанавоиваются уже на существующую позицию

и‌ли можно задавать эти параметры в устанавливаемом ордере, т.е когда позиция ещё не открыта?

Если можно задавать параметры в ордере, то как рассчитывать SL и TP в рыночном ордере (цена позиции не фиксирована)? 


Можно задавать как угодно, уровни хранятся на сервере. Тот же сервер может отказать в исполнении ваших стопов.
 
Sergey Chalyshev:

Можно задавать как угодно, уровни хранятся на сервере. Тот же сервер может отказать в исполнении ваших стопов.


Вот и не хотелось бы получать отказы сервера.

Т‌.е лучше устанавливать на существующую позицию (для верности)?

 
prostotrader:


Вот и не хотелось бы получать отказы сервера.

Т‌.е лучше устанавливать на существующую позицию (для верности)?


Стопы вообще лучше не устанавливать, ставьте лимитники.
 
prostotrader:


Вот и не хотелось бы получать отказы сервера.

Т‌.е лучше устанавливать на существующую позицию (для верности)?

Я малограмотен в биржевом исполнении, но всё-же. Ордера в целом лучше расставлять на уже существующую позицию, если будет проскальзывание, то уровни будут точно соответствовать размеру, который устанавливаете. Не проверял лично, но читал что без SL и TP заказ исполняется быстрее, если это действительно так, то целесообразней сначала дождаться открытия позиции, а потом уже с ней работать.
 
Sergey Chalyshev:

Стопы вообще лучше не устанавливать, ставьте лимитники.


Вот поэтому я никогда не использовал раньше.

Н‌о, сейчас пишу класс CFORTSOrder и в нём должна быть функция установки SL и TP

Д‌обавлено

POSITION_SL


POSITION_TP

Это минимальные уровни?


 
Vitaly Muzichenko:
Я малограмотен в биржевом исполнении, но всё-же. Ордера в целом лучше расставлять на уже существующую позицию, если будет проскальзывание, то уровни будут точно соответствовать размеру, который устанавливаете. Не проверял лично, но читал что без SL и TP заказ исполняется быстрее, если это действительно так, то целесообразней сначала дождаться открытия позиции, а потом уже с ней работать.

Спасибо
 
prostotrader:

Спасибо
Если вам не сложно, то можете проверить лично скорость исполнения с предустановленными ордерами, и без них, тем самым доказать или опровергнуть факт "без SL и TP заказ исполняется быстрее" , ну предоставить сообществу действительную картину - думаю некоторым будет полезно.
 
Vitaly Muzichenko:
Я малограмотен в биржевом исполнении, но всё-же. Ордера в целом лучше расставлять на уже существующую позицию, если будет проскальзывание, то уровни будут точно соответствовать размеру, который устанавливаете. Не проверял лично, но читал что без SL и TP заказ исполняется быстрее, если это действительно так, то целесообразней сначала дождаться открытия позиции, а потом уже с ней работать.


Сами стоп ордера срабатывают очень быстро, потому что хранятся на сервере, и сервер сам отсылает заявки при условиях. При этом пинг до сервера экономится, в сравнении если бы вы закрывались по рынку.

Н‌о лимитники надежнее и скорость ни с чем не сравнить (задержка = 0).

Физически скорость не замерял, на глаз видно - на графике цена еще не дошла до стопа, а сделка уже совершилась и отобразилась в истории, а потом начинает на чарте рисоваться цена и сделка.

 
prostotrader:


Вот поэтому я никогда не использовал раньше.

Н‌о, сейчас пишу класс CFORTSOrder и в нём должна быть функция установки SL и TP

Д‌обавлено

POSITION_SL


POSITION_TP

Это минимальные уровни?



Почему не написать функцию без костылей которые хранятся на сервере?

П‌ишите сразу с лимитами. Ну или хотябы  ТР с лимитами, а SL как получится.

 
Sergey Chalyshev:


Почему не написать функцию без костылей которые хранятся на сервере?

П‌ишите сразу с лимитами. Ну или хотябы  ТР с лимитами, а SL как получится.


А потому, что я, возможно, опубликую код класса.

М‌не не нужно, а начинающим может понадобится.

void CFORTSOrder::SetSlTp(const string a_symbol, const double a_sl=0, const double a_tp=0)
{
  if(PositionSelect(a_symbol))
  {
    ulong pos_ticket = ulong(PositionGetInteger(POSITION_TICKET));
    ENUM_POSITION_TYPE pos_type = ENUM_POSITION_TYPE(PositionGetInteger(POSITION_TYPE));
    double sl_level = PositionGetDouble(POSITION_SL);
    double tp_level = PositionGetDouble(POSITION_TP);
    MqlTradeRequest request = {0};
    MqlTradeResult  result  = {0};
    mem_magic = magic_storage + 1;
    if(magic_storage >= (magic_number + 65530)) mem_magic = magic_number;
    request.symbol = a_symbol;
    request.action = TRADE_ACTION_SLTP;
    request.comment = "Установка SL/TP";
    request.magic = mem_magic;
    request.position = pos_ticket;
    switch(pos_type)
    {
      case POSITION_TYPE_BUY:
        if (a_sl == 0)
        {
          request.sl = sl_level;
        }
        else
        if(a_sl <= sl_level)
        {
          request.sl = a_sl;
        }
        else request.sl = sl_level;
        if (a_tp == 0)
        {
          request.tp = tp_level;
        }
        else
        if(a_tp >= tp_level)
        {
          request.tp = a_tp;
        }
        else request.tp = tp_level;
      break;
      case POSITION_TYPE_SELL:
        if (a_sl == 0)
        {
          request.sl = sl_level;
        }
        else
        if(a_sl >= sl_level)
        {
          request.sl = a_sl;
        }
        else request.sl = sl_level;
        if (a_tp == 0)
        {
          request.tp = tp_level;
        }
        else
        if(a_tp <= tp_level)
        {
          request.tp = a_tp;
        }
        else request.tp = tp_level;
      break;
    }
    if(OrderSend(request, result))
    {
      if(result.retcode == TRADE_RETCODE_DONE)
      {
        magic_storage = mem_magic;
        Print(__FUNCTION__, ": SL и/или TP установлен.");
      }
    }
    else Print(__FUNCTION__, ": SL и/или TP не установлен.");
  }
}

Причина обращения: