найти ближайшую дату - страница 3

 
dr.house7:

Простите, но что вы имели в виду, говоря "эти условия"?

Отсутствие времени.

Кстати, я решил найти время и проверить это, вот 1 решение.

   for(int i=0;i<10;i++)
     {
      if(touchedline[i]>temp)
        {
         highest=i;
         temp=touchedline[i];
        }
     }
   temp=0;
   for(int i=0;i<10;i++)
     {
      if(touchedline[i]>temp && i!=highest)
        {
         previoushighest=i;
         temp=touchedline[i];
        }
     }
   Print("act_highest :",highest);
   Print("prv_highest :",previoushighest);
 
angevoyageur:

Нехватка времени.

Кстати, я решил найти время и проверить это, вот 1 решение.


Я протестировал его некоторое время и, кажется, он работает правильно.

Вы сэкономили мое время, я определенно в долгу перед вами... большое спасибо!

Хорошего дня.

исправление

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

 
dr.house7:


Я протестировал его некоторое время и, кажется, он работает правильно.

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

Хорошего дня.

исправление

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


Последний код, который я привел, должен работать. Не могли бы вы опубликовать ваш код.

 
angevoyageur:


Последний приведенный мной код должен работать. Не могли бы вы опубликовать ваш код.

Проблемы возникают, когда в одном и том же минутном баре задействованы разные линии касания.

 
это видно, например, при бэктесте EURUSD 10 янв 2014 в 16:30 на каждом тике в режиме M1.
 

это сложно?

OMG

 

Есть ли какое-нибудь простое решение?

Должен ли я использовать arraymaximum вместо этого?

Спасибо ;)

 

Дорогая Алена,

Я решил выбрать новый способ, я удаляю цикл и пытаюсь получить что-то до правильного.

Теперь touchx (это фактическое касание) правильное, каждый тик изменяется правильно... вместо этого previoustouchx (это предыдущее касание) после второго тика становится неправильным (потому что принимает то же значение, что и текущее)...

как мне поступить?

спасибо, хорошего вечера

док

int highest,touchx,previoustouchx;

if(ema1[1] > ema2[1] && ema1[0]< ema2[0]) 
          {
           if(TouchTime1 != emacross1_TouchTime) 
           {
           drawArrow1(TouchTime1,ema1[0],"Wingdings 3",ArrowSize,"p",ArrowColor); 
           emacross1_TouchTime= TouchTime1;
           highest=emacross1_TouchTime;
           previoustouchx=touchx;
           touchx=1;
           }        
          }
Файлы:
mecca.mq5  14 kb
 
dr.house7:

Дорогая Алена,

Я решил выбрать новый способ, я удаляю цикл и пытаюсь получить что-то до правильного.

Теперь touchx (это фактическое касание) правильное, каждый тик изменяется правильно... вместо этого previoustouchx (это предыдущее касание) после второго тика становится неправильным (потому что принимает то же значение, что и текущее)...

как мне поступить?

спасибо, хорошего вечера

док

Привет, док,

Это зависит от вашей цели, извините, но она мне не ясна. Вы обнаруживаете пересечение двух эма, но когда вы хотите обнаружить это пересечение, на каждом баре?

Конечно, с тем кодом, который есть, он обнаруживает это на каждом тике.

 
angevoyageur:

Привет, док,

Это зависит от вашей цели, извините, но она мне не ясна. Вы обнаруживаете пересечение двух эма, но когда вы хотите обнаружить это пересечение, на каждом баре?

Конечно, с тем кодом, который есть, он обнаруживает это на каждом тике.

Добрый вечер Алена,

ea должна проверять каждый тик (как она и делает), но изменять 2 целых числа (touchx и previoustouchx) только при изменении сигнала...вот так:

пример:

1-й тик

touchx =3; previoustouchx=-1 (-1 потому что нет предыдущих данных)

2-й тик

touchx =5; previoustouchx=3

3-й тик

touchx =5; previoustouchx=3

и т.д.