ShamanHand
Наношу добро, причиняю пользу.

 
Уровень 24

  Торгую в компаниях:


Группа "Стол заказов MQL"

Рейтинг 2147



РЕКОМЕНДУЮ



Найти цену тейкпрофита у рыночного ордера

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

Можно найти цену стоплосса или цену тейкпрофита у уже закрытого ордера.
Как, например, вот тут идёт проверка последнего сработавшего ордера в истории на стоплосс:
//+------------------------------------------------------------------------------+
//| проверим последний сработавший ордер этого советника в истории на СТОПЛОСС   |
//+------------------------------------------------------------------------------+
bool LastHistoryOrderIsStopLoss()
  {      
   i=OrdersHistoryTotal()-1;   
   while (true)
     {        
       if (OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)==true && OrderMagicNumber()==Magic && OrderType()<=1)
       {
         if (OrderStopLoss()==OrderClosePrice())
           return(true);
         else  
           return(false);
       }
       i--;
       if (i<0) return(false);  
     }      
  }


Но это в истории, среди закрытых ордеров!
Потому как, цитируя справку:
«OrderStopLoss
Возвращает значение цены закрытия ордера при достижении убыточности (stop loss) текущего выбранного ордера.»

А как найти стоплосс или тейкпрофит у того ордера, что сейчас в работе, у рыночного или отложенного?
Как найти это не в MODE_HISTORY, а в MODE_TRADES?
  • +2
  • Просмотров: 1541
  • 29 декабря 2020, 10:49
  • ShamanHand
Понравилcя материал? Не забудьте поставить плюс и поделиться в социальной сети!

Вступите в группу "Стол заказов MQL", чтобы следить за обновлениями
ПРИСОЕДИНИТЬСЯ К ГРУППЕ
присоединиться
  Предыдущая запись в группе
Trading robot MultiChart.mq5
Следующая запись в группе  
Доработка индикатора
27 декабря 2020
30 декабря 2020

Брокер для ваших роботов, 15 лет на рынке

Комментарии (11)

+
0
<code>//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 20.10.2008                                                     |
//|  Описание : Возвращает цену TakeProfit последней закрытой позиций или -1.  |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента   (""   - любой символ,                   |
//|                                     NULL - текущий символ)                 |
//|    op - операция                   (-1   - любая позиция)                  |
//|    mn - MagicNumber                (-1   - любой магик)                    |
//+----------------------------------------------------------------------------+
double TakeProfitLastClosePos(string sy="", int op=-1, int mn=-1) {
  datetime t;
  double   r=-1;
  int      i, k=OrdersHistoryTotal();

  if (sy=="0") sy=Symbol();
  for (i=0; i<k; i++) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)) {
      if (OrderSymbol()==sy || sy=="") {
        if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
          if (op<0 || OrderType()==op) {
            if (mn<0 || OrderMagicNumber()==mn) {
              if (t<OrderCloseTime()) {
                t=OrderCloseTime();
                r=OrderTakeProfit();
              }
            }
          }
        }
      }
    }
  }
  return®;
}</code>


<code>//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 06.08.2008                                                     |
//|  Описание : Возвращает цену TakeProfit последней открытой позиций или -1.  |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента   (""   - любой символ,                   |
//|                                     NULL - текущий символ)                 |
//|    op - операция                   (-1   - любая позиция)                  |
//|    mn - MagicNumber                (-1   - любой магик)                    |
//+----------------------------------------------------------------------------+
double TakeProfitLastPos(string sy="", int op=-1, int mn=-1) {
  datetime t;
  double   r=-1;
  int      i, k=OrdersTotal();

  if (sy=="0") sy=Symbol();
  for (i=0; i<k; i++) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
      if (OrderSymbol()==sy || sy=="") {
        if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
          if (op<0 || OrderType()==op) {
            if (mn<0 || OrderMagicNumber()==mn) {
              if (t<OrderOpenTime()) {
                t=OrderOpenTime();
                r=OrderTakeProfit();
              }
            }
          }
        }
      }
    }
  }
  return®;
}</code>

ShamanHand, вы же програмист советники вон пишите, а за токой ерундой обращаетесь.Что то после такого да же страшно у вас советники покупать.
Редактирован: 29 декабря 2020, 14:03
avatar

  20  alex30774 Сообщений: 748

  • 29 декабря 2020, 13:56
+
+1
Спасибо!
Уместное замечание, самому стыдно:D 
После НГ корпоратива ощущение, будто половина мозгов со спиртным убежала*zapoy* 
Редактирован: 29 декабря 2020, 14:32
avatar

  24  ShamanHand Автор Сообщений: 1092 - Наношу добро, причиняю пользу.

  • 29 декабря 2020, 14:11
+
0
Если не додумаетесь, как получить цену тейкпрофита отложенного ордера(OP_BUYLIMIT, OP_BUYSTOP, OP_SELLLIMIT, OP_SELLSTOP ), то есть тот который ещё не сработал, то напишу.
avatar

  20  alex30774 Сообщений: 748

  • 29 декабря 2020, 14:42
+
0
Благодрствую за код, но не прокатывает он.
Вот ещё раз читаем справку:
«OrderTakeProfit
Возвращает значение цены закрытия ордера ПРИ ДОСТИЖЕНИИ УРОВНЯ ПРИБЫЛЬНОСТИ (take profit) текущего выбранного ордера.»
А мне же надо, чтобы в любой момент можно было ТП у ордера посмотреть.
По факту действительно, возвращает минус единицу и всё на этом.
Т.е. я в комментах пишу:
Comment("\nОткрытых ордеров: ", CountTrades(),
            "\nЦена ТП: ", TakeProfitLastPos());
На выходе имеем:

Т.е. мне как раз при открытом ордере это надо узнавать. Как закроется — меня его ТП уже не интересует.
Редактирован: 29 декабря 2020, 17:43
avatar

  24  ShamanHand Автор Сообщений: 1092 - Наношу добро, причиняю пользу.

  • 29 декабря 2020, 16:56
+
+1
Честно не понимаю, где у вас ошибка.Вот скрин у меня всё коректно работает.
avatar

  20  alex30774 Сообщений: 748

  • 29 декабря 2020, 18:22
+
0
Хотел код советника скинуть, но слишком большой, для того чтоб вы убедились, что всё работает.А я вообще не програмист и не могу разобраться где вы на косячили.Может ориентирюясь на код сможете найти сами свою ошибку.Вообщем если нужен код пиште адрес электронной почты, а то в коде более 3000 букв(вылазиет предупреждение)


Редактирован: 29 декабря 2020, 18:38
avatar

  20  alex30774 Сообщений: 748

  • 29 декабря 2020, 18:34
+
+1
Спасибо, разобрался.
Нужно просто быть внимательней...*crazy* 
Редактирован: 29 декабря 2020, 20:42
avatar

  24  ShamanHand Автор Сообщений: 1092 - Наношу добро, причиняю пользу.

  • 29 декабря 2020, 18:53
комментарий был удален 2020-12-29 16:41:01 ShamanHand

+
0
на 4-е
avatar

  35  AM2 Сообщений: 16306 - Андрей

  • 29 декабря 2020, 18:48
+
+1
Спасибо, Андрей, уже не требуется.
avatar

  24  ShamanHand Автор Сообщений: 1092 - Наношу добро, причиняю пользу.

  • 29 декабря 2020, 20:42
+
0
В нутри функции исправте строчку:

datetime t;

на

datetime t=0;

Это чтоб предупреждений не было, хотя возможно вы уже сами исправили(это я так на всякий случай предупредил, а то я код функции скопировал, а не проверил)
avatar

  20  alex30774 Сообщений: 748

  • 29 декабря 2020, 20:59

Зарегистрируйтесь или авторизуйтесь, чтобы оставить комментарий