Расчет сигналов экспертом один раз за период.

 
Если эксперт использует в расчете торговых сигналов, к примеру, предыдущее бары, то нет смысла пересчитывать эти сигналы до нового бара, это только замедлит работу эксперта. Поэтому хочу решить эту проблему при помощи глобальных переменных.
// Здесь проверяем, существует ли переменная GlobalDay и если существует,
// то проверяем, равен ли день записанный в эту переменную с текущим.
if(!GlobalVariableCheck("GlobalDay") || GlobalVariableGet("GlobalDay")!=Day())
// Если не существует или не совпадает...
   {
      if(GlobalVariableSet("GlobalDay",Day())==0)return(-1); // Устанавливаем GlobalDay с новым значением
      // Вычисляем торговые сигналы
      int P=1;
      int M=2;
      // Записываем торговые сигналы в соответствующие глобальные переменные
      if(GlobalVariableSet("GlobalP",P)==0)return(-1);
      if(GlobalVariableSet("GlobalM",M)==0)return(-1);
   }

Естественно, использовать такое решение стоит только при большом объеме обрабатываемых данных для формирования торгового сигнала.

P.S. Если вы видите это решение не правильным или с ошибками, поделитесь своими мыслями по этому поводу, для этого я и создал эту тему.

 
Желательно учитывать и имя символа.
 

Учитывать при расчете сигналов или ... ?

 
или добавить еще одну переменную с именем символа?
 
А в этом куске кода ошибка
// Здесь проверяем, существует ли переменная GlobalSymbol и если существует,
// то проверяем, равен ли Symbol записанный в эту переменную с текущим.
if(!GlobalVariableCheck("GlobalSymbol") || GlobalVariableGet("GlobalSymbol")!=Symbol())
   {
      if(GlobalVariableSet("GlobalSymbol",Symbol())==0)return(-1); // Устанавливаем GlobalSymbol с новым значением
   }
'!=' - different types in comparison D:\Program Files\MetaTrader 4\experts\ãëîáàëüíûå ïåðåìåííûå. mq4 (15, 75)
 
int _prevTime = 0;
int start()
{
   int curTime = Time[0];
   if (_prevTime != curTime)
   {
      newBar();
      _prevTime = curTime;
   }
   newTick();
}

Можно проще.
Вставте приведенный код в эксперт или индикатор.

Функция newTick() вызывается на каждом тике,
функция newBar() вызывается в начале нового бара.

Поместите ваш код в newBar()
 
Спачибо, отличное решение.
 
Но хотелось бы разобраться с Symbol(), раз уже начал.
 
Можно проще.
Вставте приведенный код в эксперт или индикатор.

Функция newTick() вызывается на каждом тике,
функция newBar() вызывается в начале нового бара.

Поместите ваш код в newBar()

Нет, наверное ваше решение мне не подходит, т.к. мне нужно определить сигнал по предыдущим барам и не обязательно что именно в начале нового бара, может я включу эксперт в середине дня.
 
При запуске новый бар тоже сработает.
Полезно только перед запуском эксперта сделать задержку,
чтобы данные подкачались.
int  init() 
{
   GlobalVariableSet("LastTradeTime", LocalTime() + 100);
}
..................
 
ExpertTrader:
Но хотелось бы разобраться с Symbol(), раз уже начал.
Просто в имя Гл. Переменной добавить символ - чтоб для каждого графика была своя переменная
А вообще, все делают как Мак, и не морочат голову ;)
Причина обращения: