Глобальная переменная - страница 2

 
protr:

А так не пойдет?

GlobalVariableSet(string Start_Point = "Start_Point", Point_); 

GlobalVariableSet("Start_Point", Point_); // так пойдет
// или так
string Start_Point = "Start_Point";
GlobalVariableSet(Start_Point, Point_); 

У функции GlobalVariableSet нет значения по умолчанию

Устанавливает новое значение глобальной переменной. Если переменная не существует, то система создает новую глобальную переменную.

datetime  GlobalVariableSet(
   string  name,      // имя
   double  value      // устанавливаемое значение
   );

 
Создаст и на каждом тике будет перезаписывать?
 
protr:
Создаст и на каждом тике будет перезаписывать?
Откройте наконец справку ))
 
Alexey Volchanskiy:
Откройте наконец справку ))

С уважением :) Поверьте перед тем как занимать чужое время регулярна это делаю... быстрее для меня и полезнее. Укажите где сказано что при по тиковом исполнении  GlobalVariableSet не перезаписывается.


 GlobalVariableSet

Устанавливает новое значение глобальной переменной. Если переменная не существует, то система создает новую глобальную переменную.

datetime  GlobalVariableSet(
   string  name,      // имя
   double  value      // устанавлимое значение
   );

Параметры

name

[in]  Имя глобальной переменной.

value

[in]  Новое числовое значение.

Возвращаемое значение

При успешном выполнении функция возвращает время последнего доступа, иначе 0. Чтобы получить информацию об ошибке, необходимо вызвать функцию GetLastError().

Примечание

Глобальные переменные существуют в клиентском терминале 4 недели с момента последнего обращения, после этого автоматически уничтожаются.

Имя глобальной переменной не должно превышать 63 символа. Не допускаются символы вне текущей кодовой страницы (символы, которые не могут быть переведены из Unicode в ANSI, заменяются на символ '?'). Если предполагается распространение программ среди пользователей, имеющих различные кодовые страницы, настоятельно рекомендуется использование латинских символов в именах глобальных переменных. 

 

Конструкция позволяет уберечь от перезаписывания до следующего запуска терминала, а при этом утрачивается смысл GV переменной. Спасибо.

void SaveGlobal(string name, double value)
{
static bool enable = true;
if(enable)
{
GlobalVariableSet(name, value);
enable = false;
} 
}
 

Проверяете, создана ли переменная - GlobalVariableCheck

Если есть - читайте (GlobalVariableGet), если нет - создавайте. 

 
По данной теме писал как-то статейку, может пригодится...
Основы программирования на MQL5 - Глобальные переменные терминала
Основы программирования на MQL5 - Глобальные переменные терминала
  • 2014.11.03
  • Dennis Kirichenko
  • www.mql5.com
В данной статье демонстрируются объектно-ориентированные возможности языка MQL5 по созданию объектов, отвечающих за работу с глобальными переменными терминала. В качестве практического примера рассматривается ситуация, когда глобальные переменные могут использоваться как контрольные точки выполнения этапов программы.
 

Добавьте в OnInit:

if ( !GlobalVariableCheck( "trans_count" ) )
  {
    datetime a_time = GlobalVariableSet( "trans_count", 0 );
    
    if ( ulong( a_time ) == 0 )
    {
      MessageBox( "Глобальная переменная терминала 'Счётчик транзакций' не создана!", "Ошибка", MB_OK | MB_ICONHAND );
      return( INIT_FAILED );
    }
  }
 

Если глобальная переменная терминала используется несколькими советниками, то устанавливать её значение нужно так ( в примере увеличение/уменьшение на 1 в зависимости от up_down):

//+------------------------------------------------------------------+
//| Expert Set transaction count function                            |
//+------------------------------------------------------------------+
void SetTransCount( const bool up_down )
{
  double tr_count;
  uint i = 0;
  do
  {
    i++;
    if ( GlobalVariableGet( "trans_count", tr_count ) )
    {
      if ( up_down )
      {
        if ( GlobalVariableSetOnCondition( "trans_count", tr_count + 1, tr_count ) )
        {
          i = 100;
        }
      }
      else
      {
        if ( GlobalVariableSetOnCondition( "trans_count", tr_count - 1, tr_count ) )
        {
          i = 100;
        }
      }
    }
  }  
  while( i < 100 );
}
 
Andrey Khatimlianskii:

Проверяете, создана ли переменная - GlobalVariableCheck

Если есть - читайте (GlobalVariableGet), если нет - создавайте. 

Спасибо за Ваш ответ... но не совсем понял для чего проверять... Выходит что создал проверил что действительно такая существует, а на следующем тике перезаписал значение? Пока вижу только один вариант - в ручную... в екстерне на глобальном уровне задать значение, а потом задавать через GlobalVariableSet... надежнее... но цель сделать программно... Спасибо.
 
Михаил:

Если глобальная переменная используется несколькими советниками, то устанавливать её значение нужно так ( в примере увеличение/уменьшение на 1):

Огромное спасибо постараюсь разобраться. 
Причина обращения: