StopLimit

 

Используете StopLimit в реальной торговле?

Понятно что в тестере StopLimit работает неадекватно.

В реальной торговле есть ли смысл использовать? Какие преимущества и недостатки?

 
Sergey Chalyshev:

Используете StopLimit в реальной торговле?

Понятно что в тестере StopLimit работает неадекватно.

В реальной торговле есть ли смысл использовать? Какие преимущества и недостатки?

А что не так в тестере?
 
Artyom Trishkin:
А что не так в тестере?

Видимо никто не использует,

ордер открывается по несуществующим ценам:

sl

простенький пример для проверки:

//+------------------------------------------------------------------+
//|                                               StopLimit_Test.mq5 |
//+------------------------------------------------------------------+
#include <Trade\Trade.mqh>
CTrade trade;

input int Deviation = 100;
//+------------------------------------------------------------------+
void OnTick()
  {
   MqlTick tick;
   SymbolInfoTick(_Symbol,tick);
   trade.SetTypeFilling(ORDER_FILLING_RETURN);
   double ticksise=SymbolInfoDouble(_Symbol,SYMBOL_TRADE_TICK_SIZE);

   if(OrdersTotal()==0)
      trade.OrderOpen(
         _Symbol,                      // символ
         ORDER_TYPE_BUY_STOP_LIMIT,    // тип ордера
         1.0,                          // объем ордера
         tick.ask+Deviation*ticksise,  // цена исполнения
         tick.ask+10*ticksise,         // цена стоплимита
         0,                            // цена stop loss
         0                             // цена take profit
      );
  }
//+------------------------------------------------------------------+
 
Sergey Chalyshev:

Видимо никто не использует,

ордер открывается по несуществующим ценам:

простенький пример для проверки:

BuyStopLimit-ордер работает таким образом:

  1. Выставляется ордер BuyStop выше цены (значение price в структуре торгового запроса = цена + дистанция установки стопового ордера)
  2. При срабатывании ордера BuyStop выставляется ордер BuyLimit ниже цены
    (по цене stoplimit в структуре торгового запроса, которую нужно правильно рассчитать: stoplimit = price - дистанция установки лимитного ордера)
  3. При срабатывании ордера BuyLimit совершается вход в рынок по цене ордера BuyLimit

Пример:


 
Artyom Trishkin:

BuyStopLimit-ордер работает таким образом:

  1. Выставляется ордер BuyStop выше цены (значение price в структуре торгового запроса = цена + дистанция установки стопового ордера)
  2. При срабатывании ордера BuyStop выставляется ордер BuyLimit ниже цены
    (по цене stoplimit в структуре торгового запроса, которую нужно правильно рассчитать: stoplimit = price - дистанция установки лимитного ордера)
  3. При срабатывании ордера BuyLimit совершается вход в рынок по цене ордера BuyLimit

Пример:


Кагда BuyLimit ниже цены то нормально работает в тестере. 

Кагда BuyLimit выше цены, должен открываться по цене аск. На бирже, на реале, так работает.

Использовать СтопЛимит, чтобы поставить BuyLimit ниже цены, не имеет никакого смысла.

 
Sergey Chalyshev:

Кагда BuyLimit ниже цены то нормально работает в тестере. 

Кагда BuyLimit выше цены, должен открываться по цене аск. На бирже, на реале, так работает.

Использовать СтопЛимит, чтобы поставить  BuyLimit ниже цены, не имеет никакого смысла.

Поле

Описание

action

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

magic

Идентификатор эксперта. Позволяет организовать аналитическую обработку торговых ордеров. Каждый эксперт может выставлять свой собственный уникальный идентификатор при отправке торгового запроса

order

Тикет ордера. Требуется для модификации отложенных ордеров

symbol

Имя торгового инструмента, по которому выставляется ордер. Не требуется при операциях модификации ордеров и закрытии позиций

volume

Запрашиваемый объем сделки в лотах. Реальное значение объема при открытии сделки будет зависеть от типа ордера по исполнению.

price

Цена, при достижении которой ордер должен быть исполнен. Для рыночных ордеров по инструментам с типом исполнения "Market Execution" ( SYMBOL_TRADE_EXECUTION_MARKET), имеющих тип TRADE_ACTION_DEAL, указание цены не требуется

stoplimit

Цена, по которой будет выставлен отложенный Limit ордер, при достижении ценой значения price (это условие является обязательным). До этого момента отложенный ордер в торговую систему не выводится

sl

Цена, по которой сработает Stop Loss ордер при движении цены в неблагоприятном направлении

tp

Цена, по которой сработает Take Profit ордер при движении цены в благоприятном направлении

deviation

Максимально приемлемое отклонение от запрашиваемой цены, задаваемое в пунктах

type

Тип ордера. Значение может быть одним из значений перечисления ENUM_ORDER_TYPE

type_filling

Тип ордера по исполнению. Значение может быть одним из значений ENUM_ORDER_TYPE_FILLING

type_time

Тип ордера по по истечению. Значение может быть одним из значений ENUM_ORDER_TYPE_TIME

expiration

Срок истечения отложенного ордера (для ордеров типа ORDER_TIME_SPECIFIED)

comment

Комментарий к ордеру

position

Тикет позиции. Следует заполнять при изменении и закрытии позиции для ее однозначной идентификации. Как правило, соответствует тикету ордера, в результате которого позиция была открыта.

position_by

Тикет встречной позиции. Используется при закрытии позиции встречной — открытой по тому же инструменту, но в противоположном направлении.


Надеюсь, вы знаете что такое лимитный ордер. И стоповый тоже, надеюсь, не вызывает у вас сомнений.

И вот что тут написано про работу StopLimit-ордера: когда цена достигнет уровня Stop-ордера (а он ставится выше цены для Buy), только в этом случае будет выставлен Limit-ордер (а он ставится ниже цены для Buy).

 
Sergey Chalyshev:

Кагда BuyLimit ниже цены то нормально работает в тестере. 

Кагда BuyLimit выше цены, должен открываться по цене аск. На бирже, на реале, так работает.

Использовать СтопЛимит, чтобы поставить  BuyLimit ниже цены, не имеет никакого смысла.

Простите, чем вы выставляете BuyLimit-ордер выше цены?

Он не должен вообще выставлятся при таком раскладе.

Если вы используете СБ-торговый класс, то там есть проверка на ошибочные параметры, и в такой ситуации не выставляется отложенный ордер, а открывается позиция маркет-ордером.

 
Artyom Trishkin:

Поле

Описание

action

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

magic

Идентификатор эксперта. Позволяет организовать аналитическую обработку торговых ордеров. Каждый эксперт может выставлять свой собственный уникальный идентификатор при отправке торгового запроса

order

Тикет ордера. Требуется для модификации отложенных ордеров

symbol

Имя торгового инструмента, по которому выставляется ордер. Не требуется при операциях модификации ордеров и закрытии позиций

volume

Запрашиваемый объем сделки в лотах. Реальное значение объема при открытии сделки будет зависеть от типа ордера по исполнению.

price

Цена, при достижении которой ордер должен быть исполнен. Для рыночных ордеров по инструментам с типом исполнения "Market Execution" ( SYMBOL_TRADE_EXECUTION_MARKET), имеющих тип TRADE_ACTION_DEAL, указание цены не требуется

stoplimit

Цена, по которой будет выставлен отложенный Limit ордер, при достижении ценой значения price (это условие является обязательным). До этого момента отложенный ордер в торговую систему не выводится

sl

Цена, по которой сработает Stop Loss ордер при движении цены в неблагоприятном направлении

tp

Цена, по которой сработает Take Profit ордер при движении цены в благоприятном направлении

deviation

Максимально приемлемое отклонение от запрашиваемой цены, задаваемое в пунктах

type

Тип ордера. Значение может быть одним из значений перечисления ENUM_ORDER_TYPE

type_filling

Тип ордера по исполнению. Значение может быть одним из значений ENUM_ORDER_TYPE_FILLING

type_time

Тип ордера по по истечению. Значение может быть одним из значений ENUM_ORDER_TYPE_TIME

expiration

Срок истечения отложенного ордера (для ордеров типа ORDER_TIME_SPECIFIED)

comment

Комментарий к ордеру

position

Тикет позиции. Следует заполнять при изменении и закрытии позиции для ее однозначной идентификации. Как правило, соответствует тикету ордера, в результате которого позиция была открыта.

position_by

Тикет встречной позиции. Используется при закрытии позиции встречной — открытой по тому же инструменту, но в противоположном направлении.


Надеюсь, вы знаете что такое лимитный ордер. И стоповый тоже, надеюсь, не вызывает у вас сомнений.

И вот что тут написано про работу StopLimit-ордера: когда цена достигнет уровня Stop-ордера (а он ставится выше цены для Buy), только в этом случае будет выставлен Limit-ордер (а он ставится ниже цены для Buy).

с чего вы взяли, что BuyLimit ордер обязательно должен быть ниже цены?

я говорю про биржу, форекс не интересен

 
Artyom Trishkin:

Простите, чем вы выставляете BuyLimit-ордер выше цены?

Он не должен вообще выставлятся при таком раскладе.

Если вы используете СБ-торговый класс, то там есть проверка на ошибочные параметры, и в такой ситуации не выставляется отложенный ордер, а открывается позиция маркет-ордером.

Я же привел пример кода выше.

Выставляться должен и выставляется.

Если бы открывалась маркетом, то в тестере не было бы проблем, открылась бы по цене Ask. А открывается по несуществующей цене, на картинке выше видно же.

p.s. просто сами попробуйте вышеприведенный код на биржевом счете
 
"Офигенный" stoplimit в стандартной библиотеке, слов нет :)) 
limit должен задавать проскальзывание маркет ордера, а не установку лимитного :))
 
Roman:
"Офигенный" stoplimit в стандартной библиотеке, слов нет :)) 
limit должен задавать проскальзывание маркет ордера, а не установку лимитного :))

Проскальзывание задаётся параметром deviation в торговом запросе.

А уровень stoplimit - это уровень установки Limit-ордера относительно уровня Stop-ордера.

Документация по MQL5: Константы, перечисления и структуры / Структуры данных / Структура торгового запроса
Документация по MQL5: Константы, перечисления и структуры / Структуры данных / Структура торгового запроса
  • www.mql5.com
Взаимодействие клиентского терминала и торгового сервера для проведения операций постановки ордеров производится посредством торговых запросов. Запрос представлен специальной предопределенной структурой MqlTradeRequest, которая содержит все поля, необходимые для заключения торговых сделок. Результат обработки запроса представлен структурой...