Любые вопросы новичков по MQL4 и MQL5, помощь и обсуждение по алгоритмам и кодам - страница 1328

 
Alexey Viktorov:

Вопрос видимо о МТ5. Ответ: программно никак. Вопрос можно закрывать.

Спасибо

 

Всем добрый день! Как и обещал вернулся за новыми наставлениямиJ ;-) Грааль машину я конечно же запустил, но она сильно медленно тестиласьL поэтому начал искать варианты того как выполнять код внутри он тика только при наступлении нового бара. Нашёл вот такой вариант. На глобальном уровне определяется переменная

int intBars;// ГЛОБАЛЬНО ОПРЕДЕЛЁННАЯ ПЕРЕМЕННАЯ ДЛЯ ОПРЕДЕЛЕНИЯ НАСТУПЛЕНИЯ

Затем написал функцию, которая и проверяет наступил ли новый бар- вот этот шедевр 


bool f_IsNewBar()
{
   if(intBars != Bars) 
   {
      intBars = Bars;
      return(true);
   } 
return(false);
}

Там где нашёл этот вариант пишут что далее создаём функцию, в которую просто запихиваем всю логику из он тика. Мне такой подход с функциями честно говоря совсем не нравится поэтому я сделал просто проверку условия на появление нового бара, и если оно истинно то полетели выполнять код в он тик. В упрощённом виде- без всего реального дела это дело выглядит так

void OnTick()
{//НАЧАЛО ОН ТИК
   // если появился новый бар:
   if(f_IsNewBar()) // ЕСЛИ ПОЯВИЛСЯ НОВЫЙ БАР
    {// ВЫПОЛНЯЕМ ВЕСЬ КОД В ОН ТИК
/*
МНОГО МНОГО СЕКРЕТНОГО ГРААЛЬНОГО КОДА😃😃😃
*/

    }
}// КОНЕЦ ОН ТИК

У меня-то другой вопрос. Грааль конечно же будет работать на реале. Так вот потом в версии грааля которая не в тестере гонятся будет, а будет на реале трубить эту проверку надо будет убрать, чтобы советник работал на каждом тике или в для реала эту проверку тоже нужно оставить? Просто если эта проверка будет и в версии для реала то каким образом впихнуть повторную попытку открытия ордеров, если они с первого раза не открылись ?

 
DanilaMactep:

Всем добрый день! Как и обещал вернулся за новыми наставлениямиJ ;-) Грааль машину я конечно же запустил, но она сильно медленно тестиласьL поэтому начал искать варианты того как выполнять код внутри он тика только при наступлении нового бара. Нашёл вот такой вариант. На глобальном уровне определяется переменная

Затем написал функцию, которая и проверяет наступил ли новый бар- вот этот шедевр 


Там где нашёл этот вариант пишут что далее создаём функцию, в которую просто запихиваем всю логику из он тика. Мне такой подход с функциями честно говоря совсем не нравится поэтому я сделал просто проверку условия на появление нового бара, и если оно истинно то полетели выполнять код в он тик. В упрощённом виде- без всего реального дела это дело выглядит так

У меня-то другой вопрос. Грааль конечно же будет работать на реале. Так вот потом в версии грааля которая не в тестере гонятся будет, а будет на реале трубить эту проверку надо будет убрать, чтобы советник работал на каждом тике или в для реала эту проверку тоже нужно оставить? Просто если эта проверка будет и в версии для реала то каким образом впихнуть повторную попытку открытия ордеров, если они с первого раза не открылись ?

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

Новый бар еще по времени открытия нулевого бара отслеживают.

FlagNewBar=false;   // глобальная или статик булева переменная
   if(BarTime!=Time[0])
     {
      BarTime=Time[0];
      FlagNewBar=true;
     }


 

 
Artyom Trishkin:

В этой ветке я хочу начать свою помощь тем, кто действительно хочет разобраться и научиться программированию на новом MQL4 и желает легко перейти на MQL5 - языки очень похожи.

Здесь можно будет обсудить задачи, алгоритмы их решения, да и впрочем, любые вопросы, так или иначе касающиеся программирования для МТ.

Надеюсь, что к решению вопросов подтянутся другие опытные участники нашего форума, и ветка будет интересна всем.

Задача MQL4: Определить номер позиции заглавной буквы в строке. Спасибо.

 
Mikhail Nazarenko:

Задача MQL4: Определить номер позиции заглавной буквы в строке. Спасибо.

string str="preved mEdved";
string uppercase="ABCDEF.....ZАБВГД....Я";

int finish=StringLen(str)-1;
int pos=-1;
for(int i=0; i<=finish; i++)
   {
   pos=StringFind(uppercase,StringSubstr(str,i,1));
   if(pos>=0) break;
   }
printf(pos);
 
Aleksei Stepanenko:

Спасибо.

 
Mikhail Nazarenko:

Спасибо.

Ошибся, не результат StringFind нам нужен, а i.

Так:

string str="preved mEdved";
string uppercase="ABCDEF.....ZАБВГД....Я";

int finish=StringLen(str)-1;
int pos=-1;
for(int i=0; i<=finish; i++)
   {
   if(StringFind(uppercase,StringSubstr(str,i,1))>=0)
      {
      pos=i;
      break;
      }
   }
printf(pos);
 
Mikhail Nazarenko:

Задача MQL4: Определить номер позиции заглавной буквы в строке. Спасибо.

Можно использовать StringGetCharacter() Символ «A» равен 65, а «a» на 32 больше - 97. И так все символы. Следовательно если код символа > 90 и <= 122 — значит это символ латиницы в вернем регистре. Символы кириллицы отличаются так-же на 32

 
Alexey Viktorov:

Можно

Точно, хороший вариант.

 
Привет.Как здесь сделать лидерский счет?