MQL4 - automated forex trading   /  

Форум

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

К списку тем Авторизуйтесь или зарегистрируйтесь, чтобы создать новую тему

avatar
2977
ExpertTrader 23.05.2006 10:00 
Если эксперт использует в расчете торговых сигналов, к примеру, предыдущее бары, то нет смысла пересчитывать эти сигналы до нового бара, это только замедлит работу эксперта. Поэтому хочу решить эту проблему при помощи глобальных переменных.
// Здесь проверяем, существует ли переменная 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. Если вы видите это решение не правильным или с ошибками, поделитесь своими мыслями по этому поводу, для этого я и создал эту тему.

Бесплатная Groupware для групп разработчиков

Установите систему групповой работы TeamWox и объедините усилия всех разработчиков. Это поможет вашей команде работать быстрее и организованнее. Благодаря TeamWox станет намного проще ставить задачи и контролировать их выполнение.


avatar
Модератор
3646
Renat 23.05.2006 10:39 
Желательно учитывать и имя символа.

avatar
2977
ExpertTrader 23.05.2006 10:43 

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


avatar
2977
ExpertTrader 23.05.2006 10:50 
или добавить еще одну переменную с именем символа?

avatar
2977
ExpertTrader 23.05.2006 11:29 
А в этом куске кода ошибка
// Здесь проверяем, существует ли переменная 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)


avatar
387
Mak 23.05.2006 11:33 
int _prevTime = 0;
int start()
{
   int curTime = Time[0];
   if (_prevTime != curTime)
   {
      newBar();
      _prevTime = curTime;
   }
   newTick();
}

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

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

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

avatar
2977
ExpertTrader 23.05.2006 11:39 
Спачибо, отличное решение.

avatar
2977
ExpertTrader 23.05.2006 11:40 
Но хотелось бы разобраться с Symbol(), раз уже начал.

avatar
2977
ExpertTrader 23.05.2006 11:49 
Можно проще.
Вставте приведенный код в эксперт или индикатор.

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

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

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

avatar
387
Mak 23.05.2006 12:38 
При запуске новый бар тоже сработает.
Полезно только перед запуском эксперта сделать задержку,
чтобы данные подкачались.
int  init() 
{
   GlobalVariableSet("LastTradeTime", LocalTime() + 100);
}
..................


avatar
14054
komposter 23.05.2006 16:03 
ExpertTrader писал (а):
Но хотелось бы разобраться с Symbol(), раз уже начал.
Просто в имя Гл. Переменной добавить символ - чтоб для каждого графика была своя переменная
А вообще, все делают как Мак, и не морочат голову ;)
К списку тем  

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий