Ошибки, баги, вопросы - страница 2751

 
Igor Makanu:

тут как бы парадокс, что есть доступ к _Symbol .... но нет такого доступа к 

const MqlTick _Tick; // Текущий _Symbol-тик.

хотя язык MQL позиционируется как язык разработки торговый стратегий

Вот как-раз не нужно этого ***.  _Symbol - это константа, поэтому с ним проблем нет (хотя правильней всё ж вызывать Symbol()).  А тик - это переменная.  Как это вы себе представляете, что она у вас объявлена const, но значение её меняется.

 
Alexey Navoykov:

Как это вы себе представляете, что она у вас объявлена const, но значение её меняется.

увы, я такой же как и Вы... такой же идеалист, которому логичнее и понятнее писать в VS C# - там компилятор не дает отделить логичное понятие константа от машинной проверки С++ перед компиляцией

вот не стеснялся задавал вопросы 

https://www.mql5.com/ru/forum/1111/page2680#comment_15546412


суть - в С++ это все логичное ;)

 
Alexey Navoykov:

Вот как-раз не нужно этого ***.  _Symbol - это константа, поэтому с ним проблем нет (хотя правильней всё ж вызывать Symbol()).

Что плохого, что за пользователя написано это?

const string _Symbol = ::Symbol();

А тик - это переменная.  Как это вы себе представляете, что она у вас объявлена const, но значение её меняется.

Bid/Ask в MT4. Там, конечно, RefreshRates() есть.


Совсем недавно обнаружил символ, на котором Digits было неверно задано. Попросил брокера исправить. Он это сделал сходу. Не смотрел, менялось ли значение переменой _Digits и Digits(). Но просто факт, что символ может поменять свои значения на ходу.

 
   Уважаемые разработчики, можно ли привести окно графика к виду других окон, как в WIN 10? Либо предусмотреть возможность "перекрашивать" рамку окна графика, да и рамку терминала в целом, в чёрный цвет.
В зависимости от цветовой схемы, например. Широкие белые рамки на чёрных графиках  нервируют, раздражают и мешают разбогатеть. Пожалуйста!!
 
Igor Makanu:

увы, я такой же как и Вы... такой же идеалист, которому логичнее и понятнее писать в VS C# - там компилятор не дает отделить логичное понятие константа от машинной проверки С++ перед компиляцией

вот не стеснялся задавал вопросы 

https://www.mql5.com/ru/forum/1111/page2680#comment_15546412

Там у вас в первом случае меняется статическая переменная, а не член класса.  Поэтому константность вообще ни при чём.

 
Alexey Navoykov:

Вот как-раз не нужно этого ***.  _Symbol - это константа, поэтому с ним проблем нет (хотя правильней всё ж вызывать Symbol()).  А тик - это переменная.  Как это вы себе представляете, что она у вас объявлена const, но значение её меняется.

Вы путаете константность со стороны MQL и со стороны ядра. Суть объявления структуры с модификатором const в том, что MQL-код не может её изменять. По аналогии, можно описать метод класса const, что предотвращает изменение объекта в этом методе, но не означает, что сам объект не может изменить свое состояние по другим условиям.

 

Почему в тестере в визуальном режиме нельзя посмотреть глобальные переменные терминала (эмулируемые разумеется)?

В тестере глобальные переменные терминала вообще работают?

Документация по MQL5: Основы языка / Переменные / Глобальные переменные
Документация по MQL5: Основы языка / Переменные / Глобальные переменные
  • www.mql5.com
Глобальные переменные создаются путем размещения их объявлений вне описания какой-либо функции. Глобальные переменные определяются на том же уровне, что и функции, т. е. не локальны ни в каком блоке. Область видимости глобальных переменных - вся программа, глобальные переменные доступны из всех функций, определенных в программе...
 
Andrey Dik:

Почему в тестере в визуальном режиме нельзя посмотреть глобальные переменные терминала (эмулируемые разумеется)?

В тестере глобальные переменные терминала вообще работают?

Всегда было можно (F3). Работают.

 
Alexey Navoykov:

Там у вас в первом случае меняется статическая переменная, а не член класса.  Поэтому константность вообще ни при чём.

выполнение этого скрипта должно вернуть значение sum = 0 ?

или этот скрипт вообще должен выдать ошибку компиляции?

void OnStart()
{
   int sum = 0;
   for(int i = 0; i < 3 ; i++)
   {
      const int j = f(i);
      sum += j * i;
   }
   printf("sum = %i", sum);
}
//+------------------------------------------------------------------+
int f(int v)
{
   return(v);
}
//+------------------------------------------------------------------+
 
Igor Makanu:

выполнение этого скрипта должно вернуть значение sum = 0 ?

или этот скрипт вообще должен выдать ошибку компиляции?

Вы хоть дебагер запустите, прежде чем писать нелепые утверждения.
На втором цикле i == 1 и j == 1, а на третьем и так далее оба на единицу больше.

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