Любые вопросы новичков по MQL4 и MQL5, помощь и обсуждение по алгоритмам и кодам - страница 649

 
Artyom Trishkin:

2. Что значит "больше нуля"?

Значит что в буфере есть какая то цена, иначе цены в буфере нет.

Artyom Trishkin:

Что отображается в значениях буфера этого индикатора в окне данных?

 Цена или ничего.
 
Ghabo:

Значит что в буфере есть какая то цена, иначе цены в буфере нет.

Значение EMPTY_VALUE - "пустое" значение буфера, которое по умолчанию используют многие индикаторы, имеет значение DBL_MAX - а это очень больше нуля. Потому и спрашиваю.

Попробуйте проверять if(M_A > 0 && M_A < EMPTY_VALUE)

 
Artyom Trishkin:

Значение EMPTY_VALUE - "пустое" значение буфера, которое по умолчанию используют многие индикаторы, имеет значение DBL_MAX - а это очень больше нуля. Потому и спрашиваю.

Попробуйте проверять if(M_A > 0 && M_A < EMPTY_VALUE)

Сигналы так есть. Это и всё?

void OnInit() {
  time=Time[0];
}
//////////////////////////////
if(М_А>0 && M_A < EMPTY_VALUE)  
{
if(time!=Time[0])
   {
    time=Time[0]; 
    AL(Symbol()+" "+Period()+" УХ ТЫ",2);//
   }
 }

Так не будет алерта при старте но будет при появлении сигнала на баре во время которого присоединили индикатор?

Сомневаюсь, при инициализации, time уже равно времени открытия бара. 

Как решать?

 
Ghabo:

Сигналы так есть. Это и всё?

Так не будет алерта при старте но будет при появлении сигнала на баре во время которого присоединили индикатор?

Сомневаюсь, при инициализации, time уже равно времени открытия бара. 

Как решать?

Убрать инициализацию time временем в OnInit()

void OnCalculate()
  {
   static datetime time=0;
//---
   if(М_А>0 && M_A < EMPTY_VALUE)  
     {
      if(time!=Time[0])
        {
         time=Time[0]; 
         AL(Symbol()+" "+Period()+" УХ ТЫ",2);//
        }
     }
  }
 
Taras Slobodyanik:

так все уже готово, нужно только добавить запись/чтение

Этот код работает или должен работать? У меня  расходится после извлечения из глобальной переменной с реальным ID. И если можно пример в виде индикатора. Спасибо.
 
inter78:
Этот код работает или должен работать? У меня  расходится после извлечения из глобальной переменной с реальным ID. И если можно пример в виде индикатора. Спасибо.

мой код, у меня работает, ваш код не вижу.
пожалуйста)

 

Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий

Любые вопросы новичков по MQL4, помощь и обсуждение по алгоритмам и кодам

Taras Slobodyanik, 2018.10.05 11:01

ну, с глобальными переменными ничего сложного:
- имя переменной будет префикс+символ+период, значение = айди чарта
- при старте перебираем переменные со своим префиксом и сравниваем айди
- если чарт не наш, проверяем наличие такого чарта, если чарта уже нет - удаляем переменную
- если чарт наш - берем символ и период из имени, и тоже удаляем переменную (или перезаписываем заново)



В справке ничего не нашел что такое префикс переменной и зачем он нужен. Приведите пожалуйста пример как создать такую глобальную переменную.

Написано что ГПТ хранятся 4 недели, это даже если терминал выключать?

 
psyman:

В справке ничего не нашел что такое префикс переменной и зачем он нужен. Приведите пожалуйста пример как создать такую глобальную переменную.

Написано что ГПТ хранятся 4 недели, это даже если терминал выключать?

про префикс, имел ввиду префикс в имени, чтобы можно было определить где своя переменная, где чужая, и по префиксу можно удалить сразу все переменные:

int  GlobalVariablesDeleteAll( 
   string     prefix_name=NULL,     // все глобальные переменные, чьи имена начинаются с префикса 
   datetime   limit_data=0          // все глобальные переменные, которые изменялись ранее ранее указанной даты 
   );

например:

string   GV_prefix="ZZ_";                                               //префикс имени для всех своих
string   prefix_gv=GV_prefix+_Symbol+"_"+TFtoStr(ind_period)+"_";       //префикс имени для конкретного символа и периода

GlobalVariablesDeleteAll(prefix_gv); //удалить все переменные со своим префиксом


   //создание и запись глобальных переменных в цикле
   int num=0;
   for(int i=lines_all-1;i>=end;i--)
      {
      string name=prefix_gv+"Price_"+IntegerToString(num,4,'0');
      if (GlobalVariableCheck(name) || GlobalVariableTemp(name))
         GlobalVariableSet(name, Line_ALL[i].price);
      
      name=prefix_gv+"TimeBeg_"+IntegerToString(num,4,'0');
      if (GlobalVariableCheck(name) || GlobalVariableTemp(name))
         GlobalVariableSet(name, Line_ALL[i].time_start);
      
      name=prefix_gv+"TimeEnd_"+IntegerToString(num,4,'0');
      if (GlobalVariableCheck(name) || GlobalVariableTemp(name))
         GlobalVariableSet(name, Line_ALL[i].time_end);
      
      name=prefix_gv+"Visible_"+IntegerToString(num,4,'0');
      if (GlobalVariableCheck(name) || GlobalVariableTemp(name))
         GlobalVariableSet(name, Line_ALL[i].visible);
      
      name=prefix_gv+"Direction_"+IntegerToString(num,4,'0');
      if (GlobalVariableCheck(name) || GlobalVariableTemp(name))
         GlobalVariableSet(name, Line_ALL[i].direct);
      
      num++;
      }


пс. в имени тоже можно хранить/извлекать информацию

 

Теперь понятно про что речь.

=имя переменной будет префикс+символ+период, значение = айди чарта

А зачем так сложно? Если требуется хранить только период, можно именем сделать айди чарта. 

 
psyman:

Теперь понятно про что речь.

=имя переменной будет префикс+символ+период, значение = айди чарта

А зачем так сложно? Если требуется хранить только период, можно именем сделать айди чарта. 

я жеж для примера пишу)

если помнить символ ненужно, то да можно его не запоминать

если имя будет только айди чарта, то как удалять ненужные переменные?
(при частом использовании наберется куча переменных)

если без префикса - тоже самое, как удалять ненужные переменные?

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