Бета-тестирование MetaTrader 5 началось! - страница 132
![MQL5 - Язык торговых стратегий для клиентского терминала MetaTrader 5](https://c.mql5.com/i/registerlandings/logo-2.png)
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Вопрос по классу памяти input. "Изменять значение переменной с модификатором input внутри mql5-программы нельзя, такие переменные доступны только для чтения."
А если очень надо. И в большом количестве. Если одна переменная определяет видимость группы объектов, которые сами каждый имеет свою собственную переменную видимости. И таких групп десяток. Неужели придется плодить десятки клонов переменных?
Неужели неприкасаемость input переменных так важна и нужна? Как МТ4 жил без этого?
Неужели неприкасаемость input переменных так важна и нужна? Как МТ4 жил без этого?
Изменение входных параметров считается дурным тоном в программировании.
Клоны десятков переменных не нужны. Создайте массив.
Вопрос по классу памяти input. "Изменять значение переменной с модификатором input внутри mql5-программы нельзя, такие переменные доступны только для чтения."
А если очень надо. И в большом количестве. Если одна переменная определяет видимость группы объектов, которые сами каждый имеет свою собственную переменную видимости. И таких групп десяток. Неужели придется плодить десятки клонов переменных?
Неужели неприкасаемость input переменных так важна и нужна? Как МТ4 жил без этого?
Кто мешает сразу же в ините переприсвоить похожим клонам и делать с ними всё что вздумается?
Честно не пойму
Вопрос по классу памяти input. "Изменять значение переменной с модификатором input внутри mql5-программы нельзя, такие переменные доступны только для чтения."
А если очень надо. И в большом количестве. Если одна переменная определяет видимость группы объектов, которые сами каждый имеет свою собственную переменную видимости. И таких групп десяток. Неужели придется плодить десятки клонов переменных?
Неужели неприкасаемость input переменных так важна и нужна? Как МТ4 жил без этого?
lea писал(а) >>
Изменение входных параметров считается дурным тоном в программировании.
Клоны десятков переменных не нужны. Создайте массив.
Sorento писал(а) >>
Кто мешает сразу же в ините переприсвоить похожим клонам и делать с ними всё что вздумается?
Честно не поймуХочется вот что сказать:
1. Если речь о возможности изменения входных параметров при помощи "клонов", то на мой взгляд это вполне обоснованное решение.
С этой точки зрения реализация при помощи массива конечно интересное решение, но на мой взгляд (вы меня уж извините) с точки зрения программирование более дурной тон чем переменные.
2. С точки зрения реализации алгоритма советника или другого кода в котором много входных параметров - Вот это какраз то к чему не стоит стремится, по крайней мере количество входных параметров нужно контролировать в НЕОБХОДИМЫХ границах.
Больное количество входных параметров на мой взгляд конечному пользователю необходимо оставить только необходимый минимум, на основе которого эксперт сам определит все остальные вводные.
Поверьте мне на слово, поскольку у меня самого почти 100 вводных...
PS
По идеи наилучшим решением будет в параметрах оставить самое необходимое (то, что трейдер в состоянии проконтролировать).
Для контроля остальных параметров создаем набор переменных и одну процедуру, эту процедуру следует вызывать из инициализации и по событию таймера.
Всем спасибо! Сам знаю, что не хорошо трогать входные параметры. А совет Sorento я еще вчера начал реализовывать. Ну очень много переприсваиваний . Одной из причин изменения входных переменных была необходимость скрыть\показать большую группу объектов с помощью перемещения объекта Text, ввиду отсутсвия в МТ4 управляющих объектов типа Button или CheckBox. Для этого пришлось создать клоны и запоминать в них входные параметры, чтобы вернуть потом начальное состояние. А во входные переменные видимости записывать false. Все прекрасно работает в МТ4. А теперь, если ничего кардинально в духе МТ5 не менять в коде, то количество клонов увеличится вдвое.
Надо было все-таки не пользоваться поблажками МТ4.
В Опциях установлено значение, допустим, Max bars in chart: 50 000.
Такое количество баров может быть выведено на чарт. Независимо от таймфрейма.
Выбираем на месячном таймфрейме какой-то бар за 2000 год. Допустим, за февраль 2000 года.
На минутках мы не можем вывести историю за тот период на график.
Но в терминале минутная история за тот период имеется. Все периоды формируются из минуток.
Задача такая. Найти на минутках время бара, у которого максимум будет равен максимуму бара за февраль 2000 года.
Функция CopyHigh не позволяет скопировать в массив минутки за февраль 2000 года. А почему?
Почему не позволяет это сделать? Минутки за тот период в терминале имеются.
=====
Каким образом можно скопировать в массив минутки за февраль 2000 года? без изменения Max bars in chart.
Похоже ответа не будет.
Тогда продолжим.
Ставлю Max bars in chart: Unlimited.
И что бы ни делал, перезагружал терминал, пытался подкачивать данные все равно получается такое:
-------
2009.12.01 12:44:38 ATL (GBPUSD,M1) SERIES_SYNCRONIZED = 1
2009.12.01 12:44:38 ATL (GBPUSD,M1) SERIES_TERMINAL_FIRSTDATE = 1993.05.12 00:00
2009.12.01 12:44:38 ATL (GBPUSD,M1) SERIES_SERVER_FIRSTDATE = 1993.05.12 00:00
2009.12.01 12:44:38 ATL (GBPUSD,M1) SERIES_FIRSTDATE = 2006.06.28 08:17
2009.12.01 12:44:38 ATL (GBPUSD,M1) SERIES_BARS_COUNT = 1000019
--------
Какая-то недоработка. Если есть минутная история, то к этой миниутной истории должен быть программный доступ. Ко всей истории.
Сейчас мы не имеем доступ к этой истории.
Похоже ответа не будет.
Тогда продолжим.
Ставлю Max bars in chart: Unlimited.
И что бы ни делал, перезагружал терминал, пытался подкачивать данные все равно получается такое:
-------
2009.12.01 12:44:38 ATL (GBPUSD,M1) SERIES_SYNCRONIZED = 1
2009.12.01 12:44:38 ATL (GBPUSD,M1) SERIES_TERMINAL_FIRSTDATE = 1993.05.12 00:00
2009.12.01 12:44:38 ATL (GBPUSD,M1) SERIES_SERVER_FIRSTDATE = 1993.05.12 00:00
2009.12.01 12:44:38 ATL (GBPUSD,M1) SERIES_FIRSTDATE = 2006.06.28 08:17
2009.12.01 12:44:38 ATL (GBPUSD,M1) SERIES_BARS_COUNT = 1000019
--------
Какая-то недоработка. Если есть минутная история, то к этой миниутной истории должен быть программный доступ. Ко всей истории.
Сейчас мы не имеем доступ к этой истории.
1. Параметр "Max bars in charts" фактически указывает какое количество баров по каждому из периодов будет доступно для чартов и экспертов. Эти данные будут кэшироваться в памяти и находиться в "боеготовом" состоянии для последующих обращений. Держать постоянно все доступные минутные данные по всем символам в готовом для обращения виде нельзя - у терминала просто кончится память.
Для регулирования потребляемой памяти и используется параметр "Max bars in charts"
Если необходимо обращаться к миллиону минуток из эксперта нужно выставить значение "Max bars in charts" в 1000000.
2. Изменение параметра "Max bars in charts" с 1M до Unlimited не означает, что терминал автоматически подкачает все доступные данные с сервера. На терминале уже был закачан 1М минуток
то так и останется 1М минуток. Для того чтобы получить остальные данные их нужно подкачать прокручивая чарт (если нужны большие объёмы минуток то проще это сделать на месяцовках).
1. Параметр "Max bars in charts" фактически указывает какое количество баров по каждому из периодов будет доступно для чартов и экспертов. Эти данные будут кэшироваться в памяти и находиться в "боеготовом" состоянии для последующих обращений. Держать постоянно все доступные минутные данные по всем символам в готовом для обращения виде нельзя - у терминала просто кончится память.
Для регулирования потребляемой памяти и используется параметр "Max bars in charts"
Если необходимо обращаться к миллиону минуток из эксперта нужно выставить значение "Max bars in charts" в 1000000.
2. Изменение параметра "Max bars in charts" с 1M до Unlimited не означает, что терминал автоматически подкачает все доступные данные с сервера. На терминале уже был закачан 1М минуток
то так и останется 1М минуток. Для того чтобы получить остальные данные их нужно подкачать прокручивая чарт (если нужны большие объёмы минуток то проще это сделать на месяцовках).
Обратите внимание на строчку:
2009.12.01 12:44:38 ATL (GBPUSD,M1) SERIES_TERMINAL_FIRSTDATE = 1993.05.12 00:00
==========
Данные по минуткам с 1993 года имеются на компьютере. Их что, еще раз необходимо закачивать?
Минутки, если они закачаны, вторично будут закачиваться?
Нестыковка какая-то получается.
Каким образом получать доступ к минуткам в 1993 году?
Для эксперта это необходимо.
Каким образом получать доступ к минуткам в 1993 году?
Для эксперта это необходимо.
Уточню :
Правила работы с M1 аналогично работе с другими периодами.
Для того чтобы данные доступные для чартов и экспертов построились (основная база истории и база с которой работают эксперты разные базы), нужно либо проскролить чарт или вызвать из эксперта CopyRates так чтобы текущих данных не хватило.