Любые вопросы новичков по MQL4 и MQL5, помощь и обсуждение по алгоритмам и кодам - страница 337

 
Artyom Trishkin:

Странное у вас ощущение. Просто показал как проще - без лишних ненужных переменных.


Значит я устал и мне пора пойти отдохнуть - поспать, ага.

 

Добрый день! Какой функций в эксперте можно сделать окно индикатора?

 
Nauris Zukas:

Добрый день! Какой функций в эксперте можно сделать окно индикатора?


Вызывайте из эксперта пустой индикатор.

 
Alekseu Fedotov:

Вызывайте из эксперта пустой индикатор.

Спасибо!

 
Vitaly Muzichenko:

Найдите здесь нужный вам код


Здравствуйте! Взял функцию определения цены последнего открытого селл ордера

PriceS(string sy="0", int op=OP_SELL, int mn=-1) {             //Цена последнего открытого Селл ордера
  datetime t;
  double   r=0;
  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=OrderOpenPrice();
              }
            }
          }
        }
      }
    }
  }
  return(r);
}

но когда вставляю ее в советник возникаюи ошибки при компиляции в условии функции'sy' - unexpected token

'=' - unexpected token 252 18

l-value required 1 1

implicit conversion from 'string' to 'number' 252 19

'=' - l-value required 252 18

'=' - expression of 'void' type is illegal 252 18

'op' - unexpected token 252 28

'=' - unexpected token 252 30

l-value required 1 1

'OP_SELL' - illegal operation use 252 31

possible loss of data due to type conversion 252 30

'=' - l-value required 252 30

'=' - expression of 'void' type is illegal 252 30

'mn' - unexpected token 252 44

'=' - unexpected token 252 46

l-value required 1 1

'1' - illegal operation use 252 48


Вроде бы все должно быть верно!??Подскажите пожалуйста, я ее скопировал и ни чего не менял.


 
vikzip:

Здравствуйте! Взял функцию определения цены последнего открытого селл ордера

но когда вставляю ее в советник возникаюи ошибки при компиляции в условии функции'sy' - unexpected token

'=' - unexpected token 252 18

l-value required 1 1

implicit conversion from 'string' to 'number' 252 19

'=' - l-value required 252 18

'=' - expression of 'void' type is illegal 252 18

'op' - unexpected token 252 28

'=' - unexpected token 252 30

l-value required 1 1

'OP_SELL' - illegal operation use 252 31

possible loss of data due to type conversion 252 30

'=' - l-value required 252 30

'=' - expression of 'void' type is illegal 252 30

'mn' - unexpected token 252 44

'=' - unexpected token 252 46

l-value required 1 1

'1' - illegal operation use 252 48


Вроде бы все должно быть верно!??Подскажите пожалуйста, я ее скопировал и ни чего не менял.


Нужно вернуть тип функции

PriceS(string sy="0", int op=OP_SELL, int mn=-1) {
double PriceS(string sy="0", int op=OP_SELL, int mn=-1) {
 
vikzip:


Вроде бы все должно быть верно!??Подскажите пожалуйста, я ее скопировал и ни чего не менял.



А заголовок функции, и не скопировали тип функции


Изначально функция выглядит так:

//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 19.02.2008                                                     |
//|  Описание : Возвращает цену открытия последней открытой позиций.           |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента   (""   - любой символ,                   |
//|                                     NULL - текущий символ)                 |
//|    op - операция                   (-1   - любая позиция)                  |
//|    mn - MagicNumber                (-1   - любой магик)                    |
//+----------------------------------------------------------------------------+
double PriceOpenLastPos(string sy="", int op=-1, int mn=-1) {
  datetime t=0;
  double   r=0;
  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=OrderOpenPrice();
              }
            }
          }
        }
      }
    }
  }
  return(r);
}
 
'op' - unexpected token Армата.mq4 248 28 'OP_SELL' - illegal operation use Армата.mq4 248 31 'mn' - unexpected token Армата.mq4 248 44 
double PriceS(string sy="", int op=OP_SELL, int mn=-1) {             //Цена последнего открытого Селл ордера
  datetime t;
  double   r=0;
  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=OrderOpenPrice();
              }
            }
          }
        }
      }
    }
  }
  return(r);
}
Alekseu Fedotov
:


А заголовок функции, и не скопировали тип функции


Изначально функция выглядит так:


Alekseu Fedotov:

А заголовок функции, и не скопировали тип функции


Изначально функция выглядит так:


Верно, в примере было еще написано. Если я правильно понял можно выбирать тип ордера, что я и сделал. 

  • op - Торговая операция, тип позиции. Допустимые значения: OP_BUYOP_SELL или -1. Значение по умолчанию -1 означает любую позицию.
Потом я сделал функцию глобальной, поместив до start. И если возвращаю тип double прям перед названием функции, то появляется ошибка.Подскажите почему, пожалуйста!

'PriceS' - function can be declared only in the global scope 252 10

 

Я так понял, что функция должна быть глобальной?!

перевел ошибку в переводчике пишет

функция может быть объявлена ​​только в глобальной области, а если я верно понимаю смысл этих слов значит, ее нужно оЪявить глобально и поэтаму перед ней не стоит double. Непонятно почему пишет ошибку на sy даже если просто скопировать из
образца

'sy' - unexpected token 248 17 '=' - unexpected token 248 19 l-value required 1 1

может sy глобальной сделать? и таже ошибка с другими объявленными переменными в функции.

'op' - unexpected token 248 28 'OP_SELL' - illegal operation use 248 31 'mn' - unexpected token 248 44

 
vikzip:


Верно, в примере было еще написано. Если я правильно понял можно выбирать тип ордера, что я и сделал. 

  • op - Торговая операция, тип позиции. Допустимые значения: OP_BUYOP_SELL или -1. Значение по умолчанию -1 означает любую позицию.
Потом я сделал функцию глобальной, поместив до start. И если возвращаю тип double прям перед названием функции, то появляется ошибка.Подскажите почему, пожалуйста!

'PriceS' - function can be declared only in the global scope 252 10

 

Я так понял, что функция должна быть глобальной?!

перевел ошибку в переводчике пишет


Функцию разместите за пределами функции start

А в теле функции start, вызываем так:

PriceOpenLastPos(); //текущий символ  любая последняя поз.


PriceOpenLastPos(Symbol(),OP_SELL);//текущий символ  OP_SELL   без магика


PriceOpenLastPos(Symbol(),OP_BUY);//текущий символ   OP_BUY  без магика

3 параметр магик, через запятую, ставите свой или 0

 
Alekseu Fedotov:

Функцию разместите за пределами функции start

А в теле функции start, вызываем так:

3 параметр магик, через запятую, ставите свой или 0


Огромное спасибо!! Как только вынес функцию за пределы start, все ошибки исчезли!!