Всем привет, кто подскает как правильно записать такую логику

 

значение переменных  внешнего индикатора a,b;

 

прошлое значение примем за 0 

текущее значение  (а=<b ||a>b);

на следующем тике (баре) текущее значение становится прошлым

если прошлое не равно текущему выполнить действие

 

3 проблемы

1) если данная операция будет  внутри тика то сравниваться будут только текущие значения что приведет к истине в любом случае

2) если данная операция будет сравнивать 1 бар с 0 то как он будет уживаться с блоком потиковых операций где будут производится действия при истинном значении, или его стоит заменить на start();

3) как правильно записать сравнение? 

 Буду признателен за любые советы.

 
МТ4 или МТ5?
 

new-rena:
МТ4 или МТ5?

 

MT4?  

 

if (a!=prev_a && b!=prev_b)
{... выполнить действие}
prev_a=a;
prev_b=b;

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

также нужно добавить в переменные

double prev_a, prev_b;

За предыдущее значение принимается значение прошлого тика

Вам так необходимо?

Можно немножко усложнить и принимать за предыдущее значение - значение, посчитанное на предыдущем баре.

double prev_a, prev_b;
int MIN;
//.................................
if (a!=prev_a || b!=prev_b)
   {

       //... выполнить действие

   }
if (MIN!=TimeMinute(iTime(Symbol(),Period(),0)))

   {

      //запомним значения

       prev_a=a;
       prev_b=b;

   }
MIN=TimeMinute(iTime(Symbol(),Period(),0));

 
new-rena:

if (a!=prev_a && b!=prev_b)
{... выполнить действие}
prev_a=a;
prev_b=b;

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

также нужно добавить в переменные

double prev_a, prev_b;

За предыдущее значение принимается значение прошлого тика

Можно немножко усложнить и принимать за предыдущее значение - значение, посчитанное на предыдущем баре.

Вам так необходимо?

в текущем варианте у меня выглядит вот так

 

 

     int Cross (double a1, double a2)    

{

   int last= 0;

   int current = 0;

   if(a1>a2)current = 1; //up

   if(a1<a2)current = 2; //down


   if(current != last) //changed

   {

      last = current;

      return (1);

   }

   else

   {

      return (0);

   }


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

 
trader781:

в текущем варианте у меня выглядит вот так

.............

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

Я дополнил свой пост, перечитайте выше

Как увязать сказанное Вами в первом посте и часть кода Вашей программы я не знаю.

Но ответ на первый Ваш пост у меня прозвучал.

 
new-rena:

Я дополнил свой пост

Как увязать сказанное Вами в первом посте и часть кода Вашей программы я не знаю.

Но ответ на первый Ваш пост у меня прозвучал.

new-rena 2016.11.01 07:31 

 

Все нормально, кое что увидел надо прогнать в тестере, будет работать или нет 

Спасибо) 

 
trader781:

new-rena 2016.11.01 07:31 

 

Все нормально, кое что увидел надо прогнать в тестере, будет работать или нет 

Спасибо) 

В Вашем случае тест можно гонять "по ценам открытия", скорость тестирования будет выше.
 
new-rena:
В Вашем случае тест можно гонять "по ценам открытия", скорость тестирования будет выше.

Это же невозможно)

там только звуковой сигнал при изменении значений 

 
trader781:

Это же невозможно)

там только звуковой сигнал при изменении значений 

Странно.

Анализируйте код советника.

 
new-rena:

Странно.

Анализируйте код советника.

я его еще не писал

взял алгоритм отсюда

https://www.mql5.com/ru/forum/58906

 

так как выше предоставленный выдает 0 в любом моделировании (не знаю почему)

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