Вопросы от начинающих MQL5 MT5 MetaTrader 5 - страница 1480

 
Alexey Viktorov #:

Не изменился потому, что это значение не выводилось на печать.

Просто добавь печать и увидишь.

Вывел на печать. Как было, так всё и осталось.

2023.11.22 19:48:24.110 10 (EURUSDrfd,H1)       a и b перед вызовом:14 8
2023.11.22 19:48:24.110 10 (EURUSDrfd,H1)       a и b после вызова:28 4

Может опять что-то не понял? Или нужно было вывести на печать переменную d? Об этом была речь?

С уважением, Владимир.

 
MrBrooklin #:

Вывел на печать. Как было, так всё и осталось.

С уважением, Владимир.

Вывел на печать где?

//+------------------------------------------------------------------+
//| передача параметров по ссылке                                    |
//+------------------------------------------------------------------+
double SecondMethod(int &i,int &j)
  {
   double res;
//---
   i*=2;
   j/=2;
   res=i+j;
//---
   return(res);
  }
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
//---.
   int a=14,b=8;
   Print("a и b перед вызовом:",a," ",b);
   double d=SecondMethod(a,b);
   Print("Результат выполнения функции ", d);
   Print("a и b после вызова:",a," ",b, " ",d);// или здесь. А можно и там и тут…
  }
//+------------------------------------------------------------------+
 
Alexey Viktorov #:

Вывел на печать где?

Теперь всё понял. )) Всем спасибо!

С уважением, Владимир.

 
Всем доброго утра и хорошего настроения! Продолжаю изучать язык программирования MQL5. Написал небольшой скрипт для подсчёта общего числа открытых позиций и распечатки некоторых его параметров, в т.ч. кодов ошибок, если они будут:
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
   ResetLastError(); // установим значение предопределенной переменной _LastError в ноль
   int pos_total = PositionsTotal(); // объявим переменную для хранения количества открытых позиций
   if(pos_total > 0) // если есть открытые позиции
     {
      for(int i=0; i<pos_total; i++) // запустим цикл и переберём все открытые позиции
        {
         if(PositionGetSymbol(i) == _Symbol) // выберем все открытые позиции по текущему символу
           {
            ulong  pos_id = PositionGetInteger(POSITION_IDENTIFIER);
            double pos_price = PositionGetDouble(POSITION_PRICE_OPEN);
            double pos_tp = PositionGetDouble(POSITION_TP);
            double pos_sl = PositionGetDouble(POSITION_SL);
            PrintFormat("Позиция #%d цена = %G тейк-профит = %G стоп-лосс = %G", pos_id, pos_price, pos_tp, pos_sl);
           }
         else // если выбрать позицию не удалось
           {
            PrintFormat("Не удалось выбрать позицию по символу %s. Ошибка = ", _Symbol, GetLastError());
           }
        }
     }
  }
//+------------------------------------------------------------------+

Запустил на символе, где есть открытые позиции. Работает исправно, информацию выводит корректно. Дальше. Запустил на символе, где нет открытых позиций. Информацию о том, что нет открытых позиций выводит корректно, а вот код причины ошибки, почему-то нет. Помогите, пжл, разобраться почему не выводится код причины ошибки?

С уважением, Владимир.

 
MrBrooklin #:

Запустил на символе, где есть открытые позиции. Работает исправно, информацию выводит корректно. Дальше. Запустил на символе, где нет открытых позиций. Информацию о том, что нет открытых позиций выводит корректно, а вот код причины ошибки, почему-то нет. Помогите, пжл, разобраться почему не выводится код причины ошибки?

Откуда там код ошибки, если ошибки нет? Просто символ не тот у позиции.

 
JRandomTrader #:

Откуда там код ошибки, если ошибки нет? Просто символ не тот у позиции.

Спасибо за отклик! Предполагал, что будет выведен, хотя бы, такой код ошибки:

ERR_TRADE_POSITION_NOT_FOUND

4753

Позиция не найдена


По поводу символа не согласен. Символ как раз именно тот, на график которого был брошен этот скрипт. По символу GBPUSDrfd у меня сейчас открытых позиций нет, но и ошибки тоже нет. Непонятно!!!

2023.11.23 13:27:26.385 7 (GBPUSDrfd,H1)        Не удалось выбрать позицию по символу GBPUSDrfd. Ошибка = 
2023.11.23 13:27:26.385 7 (GBPUSDrfd,H1)        Не удалось выбрать позицию по символу GBPUSDrfd. Ошибка = 

С уважением, Владимир.

 
MrBrooklin #:

Спасибо за отклик! Предполагал, что будет выведен, хотя бы, такой код ошибки:

ERR_TRADE_POSITION_NOT_FOUND

4753

Позиция не найдена


По поводу символа не согласен. Символ как раз именно тот, на график которого был брошен этот скрипт. По символу GBPUSDrfd у меня сейчас открытых позиций нет, но и ошибки тоже нет. Непонятно!!!

С уважением, Владимир.

Позиции все найдены! Но ни у одной из найденных позиций нет нужного нам символа.

 
JRandomTrader #:

Позиции все найдены! Но ни у одной из найденных позиций нет нужного нам символа.

Теперь понял. Спасибо!!! Получается, что если есть, хотя бы одна открытая позиция, то код ошибки 4753 никогда не появится.

С уважением, Владимир.

 
MrBrooklin #:

Теперь понял. Спасибо!!! Получается, что если есть, хотя бы одна открытая позиция, то код ошибки 4753 никогда не появится.

С уважением, Владимир.

Появится если написать такое

PositionSelect("мой символ");
 
Alexey Viktorov #:

Появится если написать такое

Привет, Алексей! Одно уточнение. PositionSelect() нужно вместо цикла использовать или опять чего-то недопонял?

С уважением, Владимир.

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