[АРХИВ] Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда - 3. - страница 490

 
splxgf:

Я обычно делаю переменную LastBarAlert и записываю в нее Time[0] при срабатывании сигнала.

Ну а далее элементарно, алерт выводится если LastBarAlert!=Time[0]


Спасибо. Это действительно работает. Но почему индикатор сохраняет значение переменной LastBarAlert, а значение какой нибудь другой переменной не сохраняет. Я делал так. По сути получается точно так же, но почему то не работает.

if (Signal && AllowAlert = true){
Alert('Signal detected');
AllowAlert = false;
} 
 
sss2019:


Спасибо. Это действительно работает. Но почему индикатор сохраняет значение переменной LastBarAlert, а значение какой нибудь другой переменной не сохраняет. Я делал так. По сути получается точно так же, но почему то не работает.

Где у вас в коде происходит инициализация переменной AllowAlert значением true ?

Если перед проверкой сигнала и состояния этой переменной в строке...

if (Signal && AllowAlert = true)

... то дальнейший сброс флага в false ничего не даст. Ведь он опять перед этой проверкой инициализируется значением true...

 
sss2019:


Спасибо. Это действительно работает. Но почему индикатор сохраняет значение переменной LastBarAlert, а значение какой нибудь другой переменной не сохраняет. Я делал так. По сути получается точно так же, но почему то не работает.

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

Спасибо. Это действительно работает. Но почему индикатор сохраняет значение переменной LastBarAlert, а значение какой нибудь другой переменной не сохраняет. Я делал так. По сути получается точно так же, но почему то не работает.

if (Signal && AllowAlert = true){
Alert('Signal detected');
AllowAlert = false;
} 

У Вас AllowAlert присваивается значение true прямо в момент проверки. Надо так (двойное =):

if (Signal && AllowAlert == true){
Alert('Signal detected'); 
AllowAlert = false;
}   

А лучше так :

if (Signal && AllowAlert){
Alert('Signal detected');
AllowAlert = false; }   
 
leksiq:

У Вас AllowAlert присваивается значение true прямо в момент проверки. Надо так (двойное =):

А лучше так :




Вобщем переменная была объявлена статической, и сбрасывалась через несколько баров. Условие было такое.

static bool AllowAlert = true;

if(Time[i] == Time[2] && AllowAlert == true)
  {
  Alert("sdfsdf");
  AllowAlert = false;
  }

if(Time[i] != Time[2])
  {
  AllowAlert = true;
  }
По идее сигнал должен быть один раз на текущем баре, но он срабатывал на каждом тике.
 
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
bool NewBar(){static int prevBar;
   if(prevBar!=Time[0]){
      prevBar =Time[0];
      return(true);
   }
   return(false);
}
//+------------------------------------------------------------------+
Почему бы вам предварительно не посмотреть здесь : https://www.mql5.com/ru/forum/131853 ?
 
FAQ:
Почему бы вам предварительно не посмотреть здесь : https://www.mql5.com/ru/forum/131853 ?

Меня более интересует, не как сделать, а почему мой код не работает. Точнее почему он работает в советнике, но не рабтает в индикаторе.
 

Скорее всего, и это мне подсказали здесь (за отсутствием вашего кода)

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

 

здравствуйте.

может кто подскажет?

как сделать диапазон работы советника? поясню.

рисуем линию, переименовываем ее "buy_down"

рисуем вторую, переименовываем ее "buy_up"

и разрешаем советнику торговать только между этими линиями.

спасибо.

 
TESKATLIPOKA:

здравствуйте.

может кто подскажет?

как сделать диапазон работы советника? поясню.

рисуем линию, переименовываем ее "buy_down"

рисуем вторую, переименовываем ее "buy_up"

и разрешаем советнику торговать только между этими линиями.

спасибо.


Вам сюда : https://www.mql5.com/ru/job
Причина обращения: