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

 
leonerd:


Как перебрать в терминале все чарт ID? current_chart_id  в моем коде равно 1662429437, first_chart_id равно 1859831371. ChartNext() уже возвращает -1. Что же такое ChartFirst()? 

Что значит первый? Открытый первым? Почему его ID больше, чем ID текущего графика (открытого позднее, кстати)?

По всей видимости это из-за преобразование long -> int.

 
Artyom Trishkin:

Спасибо, да раньше так было.

 
Кто знает как созданы циклы for while и т.д. я хотел бы создать цикл по своей технологии, что можно изучить?
 
leonerd:

По всей видимости это из-за преобразование long -> int.

там нет такой логики, посмотрите пример из справки https://www.mql5.com/ru/docs/chart_operations/chartnext

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


Seric29:
Кто знает как созданы циклы for while и т.д. я хотел бы создать цикл по своей технологии, что можно изучить?

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

вот операторы языка MQL4  https://docs.mql4.com/ru/basis/operators  - они "просто вот такие" - это база любого языка программирования

 
Igor Makanu:

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

вот операторы языка MQL4  https://docs.mql4.com/ru/basis/operators  - они "просто вот такие" - это база любого языка программирования

Так вот и плохо что они не описываются что половину нужной информации скрыто. Да мне интересно как они устроены. Я хочу создать свои циклы, также как оказалось в mql упощено как минимум 3 цикла которые есть в с++ и в паскале, и эти циклы могли бы тоже облегчить работу уменьшить количество проверок и инициализацию лишних флагов и переменных, но я хотел создать свои но не могу понять как эти итерации происходят как оно так сделано что в любом блоке кода можно записать цикл и открыть фигурные скобки в которые тоже вписывается код. Очень интересно ребята если кто что будет напишите плиз.

 
Seric29:

также как оказалось в mql упощено как минимум 3 цикла которые есть в с++ и в паскале

не выдумывайте, я в Универе изучал и Паскаль и С++, там все до сих пор так и осталось:

С++ : for ,  while , do...while

Pascal : for, while, repeat

MQL: for ,  while , do...while

????


Seric29:

Так вот и плохо что они не описываются что половину нужной информации скрыто. Да мне интересно как они устроены.

даже не знаю как объяснить абсурдность Вашего вопроса, но все равно попробую, вот Вы говорите:

Вы: - "Я изучаю русский язык, и мне нужно знать как устроен алфавит"

Я:  "алфавит, ни как не устроен, это просто буквы, и они формируют слова"  (в MQL порядка десятка операторов и они формируют программу)  https://docs.mql4.com/ru/basis/operators

Вы: "не может быть! я знаю, что буквы алфавита в Зимбабвийском языке многое что значат!"

Я : "к сожалению, я не знаю этого языка, но в русском языке буква значит только что это буква, можно конечно заняться фонетическим разбором, но от этого буква не перестанет быть элементарным элементов слова"

Вы:  "хм, странно, но ведь в Зимбабвийском языке если сказать "а" - это будет буква, а если "А"- это мир Вашему дому, а если "аАаАаАа!" - это значит у меня самая большая пиписька!" - не может быть, чтобы в русском языке буквы нельзя было посмотреть как устроены! - там находится скрытая технология....


в общем примерно так я вижу наш с Вами диалог, уж извините за мой англиЦкий- по другому уже не могу  

)))

 
Igor Makanu:

там нет такой логики, посмотрите пример из справки https://www.mql5.com/ru/docs/chart_operations/chartnext

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

ChartFirst() возвращает наименьший ID из открытых чартов?

 
leonerd:

ChartFirst() возвращает наименьший ID из открытых чартов?

еще раз нет! - числовое значение ChartFirst() не имеет смысла

ЗЫ: ......могу ошибаться, но где то читал, что ChartFirst() возвращает идентификатор графика который был открыт первым, причем не тот который стоит у Вас первым по очереди расположения чартов  (Вы можете переместить их) , а тот который был открыт первым в терминале - в общем не факт, что я прав в этом


ChartFirst() дает Вам отправную точку, от которой Вы можете перебирать графики с помощью ChartNext(), это выглядит так: получили первый идентификатор ChartFirst() - запомнили значение , передали это значение в ChartNext() - и так до тех пор пока не повторится первое значение ChartFirst() - что будет означать, что Вы перебрали все возможные графики ,

вот из моего индикатора в КБ код - это же я в справке нашел, проверил и использую для поиска своего графика:

//+------------------------------------------------------------------+
//| поиск  идентификатора графика                                    |
//+------------------------------------------------------------------+
long CheckChart(string sym,int period,int &wh)
  {
   long result=0,id=ChartFirst();
   while(id>=0)
     {
      if(ChartSymbol(id)==sym && ChartPeriod(id)==period && ChartGetInteger(id,CHART_IS_OFFLINE))
        {
         result=id;
         ChartSetInteger(id,CHART_AUTOSCROLL,true);
         ChartSetInteger(id,CHART_SHIFT,true);
         ChartNavigate(id,CHART_END);
         ChartRedraw(id);
         wh=WindowHandle(sym,period);
         PrintFormat("Найдено окно графика: [%s,%d]",sym,period);
         break;
        }
      id=ChartNext(id);
     }
   return(result);
  }
//+------------------------------------------------------------------+
 
Igor Makanu:

еще раз нет! - числовое значение ChartFirst() не имеет смысла

ЗЫ: ......могу ошибаться, но где то читал, что ChartFirst() возвращает идентификатор графика который был открыт первым, причем не тот который стоит у Вас первым по очереди расположения чартов  (Вы можете переместить их) , а тот который был открыт первым в терминале - в общем не факт, что я прав в этом


ChartFirst() дает Вам отправную точку, от которой Вы можете перебирать графики с помощью ChartNext(), это выглядит так: получили первый идентификатор ChartFirst() - запомнили значение , передали это значение в ChartNext() - и так до тех пор пока не повторится первое значение ChartFirst() - что будет означать, что Вы перебрали все возможные графики ,

вот из моего индикатора в КБ код - это же я в справке нашел, проверил и использую для поиска своего графика:

Странно. В справке про "пока не повторится первое значение ChartFirst()" не написано. При окончании списка графиков возвращается -1

Возвращаемое значение

Идентификатор графика. Если список графиков закончился, функция возвращает -1.

Документация по MQL5: Операции с графиками / ChartNext
Документация по MQL5: Операции с графиками / ChartNext
  • www.mql5.com
Операции с графиками / ChartNext - справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
Artyom Trishkin:

Странно. В справке про "пока не повторится первое значение ChartFirst()" не написано. При окончании списка графиков возвращается -1

каюсь - грешен! справку не читал, в нетрезвом виде на форуме писал! 

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