Вопросы от начинающих MQL4 MT4 MetaTrader 4 - страница 212

 
Aleksei Stepanenko:

Лучше даже сделать структуру

не забывайте обнулять элементы до начала использования

и дальше увеличивайте счёт, где надо

потом сравнивайте

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

Aleksei, попробывал сделать, но что все равно работает не так:

не плюсует по единице к count.up

 for(int i=1;i<=10;i++)              
     {    
     count.up=0;
     count.dn=0;
     double hig10 = iMA (NULL,CP,WPER, 0, MODE_SMA, PRICE_CLOSE, i);                                     
     if (hig10>iClose(Symbol(),CP,i))
     {
     count.up++;
     }
    else
    {
    count.dn++;
    }
    }
    
    
    if (count.up>=8)
    {
    Comment("dsdsD");
    }
 

Надо убрать из цикла

count.up=0;
count.dn=0;

а то на каждой итерации Вы обнуляете предыдущие значения. Напишите это до цикла.

 
Aleksei Stepanenko:

Надо убрать из цикла

а то на каждой итерации Вы обнуляете предыдущие значения. Напишите это до цикл

Спасибо большое теперь считает!

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

  for(int i=1;i<=10;i++)              
     {    
     double hig10 = iMA (NULL,CP,WPER, 0, MODE_SMA, PRICE_CLOSE, i);                                     
     if (hig10>iClose(Symbol(),CP,i))
     {
     J=J+1;
    else
    {
    J=0;
    }
    }
    
    
    if (J>=8)
    {
    Comment("dfdf");

и он начинал плюсовать каждый тик))

 

Со структурой тоже будет тикать. Для работы только в начале новой свечи необходимо отслеживать время этой свечи

datetime LastTime;

if(LastTime!=Time[0])
   {
   LastTime=Time[0];
   //Здесь ваш код
   }
 
Подскажите пожалуйста. У меня есть пользовательские функции в отдельных файлах .mqh прописал их через #include, вызываю в старте по очередности, когда старт переходит в одну функцию, то в зависимости от действий программе нужно обратиться к другому файлу .mqh (к примеру для получения значения по объему ордера) и этого не происходит. Если же прописываю все в одном листе, то работает или если прописываю формулу расчета лота прямо в параметрах открытия ордера. Смотрел уроки по MQL4, читал справку по программе и ничего не нашел в итоге. Это ведь придумано для того, чтобы в программе был порядок и структура, так почему одна функция .mqh не может взаимодействовать с другой функцией .mqh в рамках выполнения расчетов - мне совсем не ясно. Или нужно делать чтобы программа при возникновении такой необходимости возвращалась в start - переходила в функцию расчета лота .mqh та возвращала результат в start и после чего start с этим расчетом шел обратно в функцию открытия ордера .mqh ? Бред какой-то... Или нужно как-то по-другому объявить все имеющиеся функции для их совместного взаимодействия? Спасибо 
 
Добрый день!
Как проще сего избавится в строке от года (2020) и минут? В TimeToStr нет еще другие форматы вывода?
TimeToStr(TimeCurrent(),TIME_DATE|TIME_MINUTES);
 
Nauris Zukas:
Добрый день!
Как проще сего избавится в строке от года (2020) и минут? В TimeToStr нет еще другие форматы вывода?
tm=(string)Hour();
 
Vitaly Muzichenko:

Спасибо!

 
Denis Diakonov:
Подскажите пожалуйста. У меня есть пользовательские функции в отдельных файлах .mqh прописал их через #include, вызываю в старте по очередности, когда старт переходит в одну функцию, то в зависимости от действий программе нужно обратиться к другому файлу .mqh (к примеру для получения значения по объему ордера) и этого не происходит. Если же прописываю все в одном листе, то работает или если прописываю формулу расчета лота прямо в параметрах открытия ордера. Смотрел уроки по MQL4, читал справку по программе и ничего не нашел в итоге. Это ведь придумано для того, чтобы в программе был порядок и структура, так почему одна функция .mqh не может взаимодействовать с другой функцией .mqh в рамках выполнения расчетов - мне совсем не ясно. Или нужно делать чтобы программа при возникновении такой необходимости возвращалась в start - переходила в функцию расчета лота .mqh та возвращала результат в start и после чего start с этим расчетом шел обратно в функцию открытия ордера .mqh ? Бред какой-то... Или нужно как-то по-другому объявить все имеющиеся функции для их совместного взаимодействия? Спасибо 

Обращайтесь из функций не к файлам, а к функциям, если подключились через инклюд. Если я вас правильно понял, конечно.

 
Попытался переписать чужой индюк "olyakish_fractals_01"" под свою идею , мой построен на Зеленых барах Вильямса. Но по причине моего полного не знания MQL4 я что то не то написал и он не отображается на графике. Если кто соображает, помогите, если вам это ничего не стоит.)
Файлы:
18wbguVOL.mq4  13 kb