Logo

Вход

Войти с помощью соц. сетей
X
 
  • Фильтр
  • Время
  • Показать
Очистить всё
новые сообщения
  • #1 Свернуть

    MQL5 Наличие открытой позиции

    Здравствуйте, все! Чего-то я туплю совсем, помогите, друзья!
    Задача: написать функцию проверки есть ли открытая позиция по инструменту (паре) и мэджику или позиции нет.
    Предполагается, что на одной паре разные советники (с разными мэджиками) могут открывать не больше одной сделки.
    Вот так будет верно?
    MQL код:
    bool fPositionPresenceCheck()
    {bool z=false;
    if(PositionsTotal()==0)
    {z=false;}
    else
    {
    string deal_symbol="";
    long deal_magic=0;

    for(int x=PositionsTotal();x>0;x--)
    {
    deal_symbol=PositionGetSymbol(x);
    deal_magic=PositionGetInteger(POSITION_MAGIC);

    if(deal_symbol==_Symbol && deal_magic==_Magic)
    {z=true; break;}
    }
    }

    return(z);
    }
  • <a href="https://www.instaforex.org/ru/?x=ruforum">InstaForex</a>
  • #2 Свернуть

    Сообщение от kofesutra Посмотреть сообщение
    Вот так будет верно?
    Как бы слишком много телодвижений... Так будет логичнее:
    MQL код:

    bool fPositionPresenceCheck(string S, int M)
    {
    bool Result = false;

    for(int x = PositionsTotal() - 1; x >= 0; x--)
    if(PositionSelect(PositionGetSymbol(x))
    if(PositionGetString(POSITION_SYMBOL) == S)
    if(PositionGetInteger(POSITION_MAGIC) == M)
    {
    Result = true;
    break;
    }
    return(Result);
    }

    //+------------------------------------------------------------------+
    //Пример использования
    //+------------------------------------------------------------------+
    if(fPositionPresenceCheck(Symbol(), Magic))
    {
    //Чего-то делаем...
    }
     
    Последний раз редактировалось ir0407; 18.04.2017, 15:20.

    Комментарий

    • #3 Свернуть

      ir0407, спасибо за ответ!
      Мне до такого кода ещё расти и расти
      Скажите, вот эта конструкция не будет избыточной?
      MQL код:
      PositionSelect(PositionGetSymbol(x))

      Может, можно сократить до
      MQL код:
      PositionGetSymbol(x)

      Это я предположил исходя из справки: https://www.mql5.com/ru/docs/trading/positiongetsymbol
       

      Комментарий

      • #4 Свернуть

        Сообщение от kofesutra Посмотреть сообщение
        Скажите, вот эта конструкция не будет избыточной?
        Нет, не будет. Это обязательная конструкция. Потому что, чтоб получить корректные значения для функций PositionGetString() и PositionGetInteger(), нужно обязательно использовать PositionSelect(). Иначе можно получить совсем не те значения, которые вы хотите получить по факту. И метаквоты в справке, в описании к каждой функции типа PositionGetХХХХХ(), об этом вам настойчиво напоминают.
        Для гарантированного получения свежих данных о позиции рекомендуется вызывать функцию PositionSelect() непосредственно перед обращением за ними.
        Сообщение от kofesutra Посмотреть сообщение
        Может, можно сократить до
        Возможно и можно... Но я предпочитаю использовать в коде явный выбор позы, т.к. при чтении кода такой подход устраняет неоднозначность восприятия неявных свойств функций.
         
        Последний раз редактировалось ir0407; 18.04.2017, 15:49.

        Комментарий

        • #5 Свернуть

          Ага, понял. Благодарю Вас!
           

          Комментарий

          • <a href="https://www.instaforex.org/ru/?x=ruforum">InstaForex</a>
          • #6 Свернуть

            НЕ РАБОТАЕТ ваш пример! Пишет "'}' - not all control paths return a value", и в первом ветвлении пропущена закрывающая скобка, ну это так, скорее опечатка.

            Комментарий

            Сейчас онлайн

            working...
            X