Любые вопросы новичков по MQL4 и MQL5, помощь и обсуждение по алгоритмам и кодам - страница 242
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Не могу решить казалось бы простую задачу. Где-то на графике было пересечение МА. Находим бар после пересечения. Как посчитать количество баров от этого бара до текущего?
Не могу решить казалось бы простую задачу. Где-то на графике было пересечение МА. Находим бар после пересечения. Как посчитать количество баров от этого бара до текущего?
Кажется получилось (по крайней мере комментарий на экран выводит правильный). Благодаря "количество баров", кажется нашел решение. Для определения datetime нужного бара использовал функцию iTime. Набросок выглядит так:
void OnTick()
{
int nBarsUp, nBarsDn;
datetime date_dn = iTime(NULL, 0, IntersectionDN());
datetime date_up = iTime(NULL, 0, IntersectionUp());
datetime date_1 = iTime(NULL, 0, 1);
nBarsUp = Bars(Symbol(), 0, date_up, date_1);
nBarsDn = Bars(Symbol(), 0, date_dn, date_1);
Comment("Количество длинных баров: " + nBarsUp + "\n"+
"Количество коротких баров: " + nBarsDn);
}
//+------------------------------------------------------------------+
int IntersectionDN()
{
for(int i = 0; i < 36; i++)
{
if(iMA(Symbol(), 0, 5, 0, MODE_EMA, PRICE_CLOSE, i) > iMA(Symbol(), 0, 21, 0, MODE_EMA, PRICE_CLOSE, i)
&& iMA(Symbol(), 0, 5, 0, MODE_EMA, PRICE_CLOSE, i-1) < iMA(Symbol(), 0, 21, 0, MODE_EMA, PRICE_CLOSE, i-1))
return(i-1);
}
return(-1);
}
int IntersectionUp()
{
for(int i = 0; i < 36; i++)
{
if(iMA(Symbol(), 0, 5, 0, MODE_EMA, PRICE_CLOSE, i) < iMA(Symbol(), 0, 21, 0, MODE_EMA, PRICE_CLOSE, i)
&& iMA(Symbol(), 0, 5, 0, MODE_EMA, PRICE_CLOSE, i-1) > iMA(Symbol(), 0, 21, 0, MODE_EMA, PRICE_CLOSE, i-1))
return(i-1);
}
return(-1);
}
Кажется получилось (по крайней мере комментарий на экран выводит правильный). Благодаря "количество баров", кажется нашел решение. Для определения datetime нужного бара использовал функцию iTime. Набросок выглядит так:
Вы же ищете в цикле пересечение. Причём от нулевого бара вглубь истории. Так вам ф-ция IntersectionXX() возвращает номер бара.
Зачем всё это?
Вы же ищете в цикле пересечение. Причём от нулевого бара вглубь истории. Так вам ф-ция IntersectionXX() возвращает номер бара.
Зачем всё это?
Номер бара, да. Но мне нужно знать количество баров - от этого какого-то бара в глубине истории до 0-ого. Короче мне нужен угол отрыва бара от МА. Но так как его вычислить не возможно, как мне кажется, (по вертикали цена, по горизонтали бары проставленные на каком-то расстоянии друг от друга - величины не совместимые). Когда-то на форуме было предложение ввести коэффициент - разница в цене деленная на количество баров. Идея, мне кажется, здравая. Хочу воплотить ее в жизнь, но так как сам чайник, стараюсь что-то найти и пробую сам методом проб и ошибок.
P.S. Как в текст вставить код на языке MQL4 (как у вас, а не так как я)?Никто не подскажет как бороться с такой проблемой?
после смены ТФ панель коробит
Номер бара, да. Но мне нужно знать количество баров - от этого какого-то бара в глубине истории до 0-ого. Короче мне нужен угол отрыва бара от МА. Но так как его вычислить не возможно, как мне кажется, (по вертикали цена, по горизонтали бары проставленные на каком-то расстоянии друг от друга - величины не совместимые). Когда-то на форуме было предложение ввести коэффициент - разница в цене деленная на количество баров. Идея, мне кажется, здравая. Хочу воплотить ее в жизнь, но так как сам чайник, стараюсь что-то найти и пробую сам методом проб и ошибок.
P.S. Как в текст вставить код на языке MQL4 (как у вас, а не так как я)?Здравствуйте! Неправильно сравниваются два минусовых числа q и w, когда они равны, оператор иф считает, что одно больше другого.В чем ошибка? Когда q = -0,0002 и w тоже -0,0002, то res12=false, почему?
Здравствуйте! Неправильно сравниваются два минусовых числа q и w, когда они равны, оператор иф считает, что одно больше другого.В чем ошибка? Когда q = -0,0002 и w тоже -0,0002, то res12=false, почему?
Здравствуйте! Неправильно сравниваются два минусовых числа q и w, когда они равны, оператор иф считает, что одно больше другого.В чем ошибка? Когда q = -0,0002 и w тоже -0,0002, то res12=false, почему?
мне кажется, надо нормализовать и все, вроде как double между собой без нормализации сравнить нельзя.
if NormalizeDouble (q<=w)мне кажется, надо нормализовать и все, вроде как double между собой без нормализации сравнить нельзя.
спасибо, получилось, только я нормализировал отдельно q и w!