Но вот как вы собрались делать конструкторы с неизвестными заранее аргументами - тут я немного не понял. Попробуйте это пояснить
Создание объектов типа CIsNewBar для каждого используемого таймфрейма по каждому символу. Символы задаются одной строкой с разделителями в input-параметре, поэтому нельзя заранее создать все объекты перед OnInit(). Т.е. первый неизвестный параметр конструктора - символ. Второй неизвестный параметр конструктора - таймфрейм, т.к. для каждого символа будет свой набор таймфреймов, аналогично передаётся строкой с разделителями в input-параметре.
З.Ы. С классом CArrayObj была проблемка: при обращении к элементам типа CArrayObj* ArrayObj.At(0) недоступны члены класса объекта, который At(0), хотя эти члены класса точно публичные, т.е. конструкция типа ArrayObj.At(0).method(parameter) не работает. И еще боюсь использовать эти библиотеки, вдруг что-то изменят в них при обновлении терминала и мой эксперт вдруг перестанет работать...
Создание объектов типа CIsNewBar для каждого используемого таймфрейма по каждому символу. Символы задаются одной строкой с разделителями в input-параметре, поэтому нельзя заранее создать все объекты перед OnInit(). Т.е. первый неизвестный параметр конструктора - символ. Второй неизвестный параметр конструктора - таймфрейм, т.к. для каждого символа будет свой набор таймфреймов, аналогично передаётся строкой с разделителями в input-параметре.
З.Ы. С классом CArrayObj была проблемка: при обращении к элементам типа CArrayObj* ArrayObj.At(0) недоступны члены класса объекта, который At(0), хотя эти члены класса точно публичные, т.е. конструкция типа ArrayObj.At(0).method(parameter) не работает. И еще боюсь использовать эти библиотеки, вдруг что-то изменят в них при обновлении терминала и мой эксперт вдруг перестанет работать...
Всё как-то не так...
Напишите простыми словами что хотите сделать. Без всяких упоминаний своих попыток закодить это всё.
Напишите простыми словами что хотите сделать. Без всяких упоминаний своих попыток закодить это всё.
Мультивалютный эксперт. Список символов задается через input-параметр, строка с разделителем "AUDUSD,EURUSD,GBPUSD...", количество символов заранее не определено. Для каждого символа есть два таймфрейма, на которых работает его "собственная" торговая система. Соответственно два input-параметра, строки с разделителем : короткий таймфрейм для соответствующего символа "M1,M30,M5..." длинный таймфрейм для соответствующего символа "Н1,D1,H4..." Т.е. для AUDUSD таймфреймы М1 и Н1, для EURUSD М30 и D1, и т.д. В OnTick() по каждому символу нужно отслеживать появление нового бара на обоих (коротком и длинном) таймфреймах для принятия торговых решений. Старался написать как можно проще)
Мультивалютный эксперт. Список символов задается через input-параметр, строка с разделителем "AUDUSD,EURUSD,GBPUSD...", количество символов заранее не определено. Для каждого символа есть два таймфрейма, на которых работает его "собственная" торговая система. Соответственно два input-параметра, строки с разделителем : короткий таймфрейм для соответствующего символа "M1,M30,M5..." длинный таймфрейм для соответствующего символа "Н1,D1,H4..." Т.е. для AUDUSD таймфреймы М1 и Н1, для EURUSD М30 и D1, и т.д. В OnTick() по каждому символу нужно отслеживать появление нового бара на обоих (коротком и длинном) таймфреймах для принятия торговых решений. Старался написать как можно проще)
intOnInit()
{
// Переменная NB_M1 - объект для контроля нового бара по символу currSymbol для таймфрейма M1
CIsNewBar* NB_M1=new CIsNewBar(currSymbol,PERIOD_M1);
}
voidOnTick()
{
if (NB_M1.IsNewBar()) // (1) Если появился новый бар M1
{....}
......
}
Спасибо за ответ) Сначала я так и сделал. Таким образом, объект создается два раза, сначала пустой, потом, как положено, конструктором с параметрами. Но ... Компилятор при этом на строку в OnInit() выводит предупреждение:
declaration of 'var1' hides global variable -> на строку в OnInit() see previous declaration of 'var1'
Таким образом, локальная переменная скрывает глобальную ... и что при этом происходит ? Какую переменную видит тогда другая функция, OnTick(), например? Глобальная у нас =NULL, локальная проинициализирована правильно, но её не может видеть другая функция ...
Из входных параметров нужно извлечь все подстроки, из них составить наименования символов и соответствующих им таймфреймов.
Далее из этих списков создать объекты-новые бары и указатель на каждый создаваемый объект "Новый бар" поместить в CArrayObj, который объявлен на глобальном уровне.
Далее - в OnTimer() в цикле по этому списку получать указатель на очередной объект в нём и проверять наличие нового бара. Если нету - переходим к следующему, если есть - делаем то, что нужно делать при открытии нового этого бара.
Таймер сделать по своим потребностям - миллисекундный, секундный, минутный - в общем, с той частотой, которую считаете достаточной для реакции на новый бар на нетекущем символе.
Спасибо за ответ) Сначала я так и сделал. Таким образом, объект создается два раза, сначала пустой, потом, как положено, конструктором с параметрами. Но ... Компилятор при этом на строку в OnInit() выводит предупреждение:
declaration of 'var1' hides global variable -> на строку в OnInit() see previous declaration of 'var1'
Таким образом, локальная переменная скрывает глобальную ... и что при этом происходит ? Какую переменную видит тогда другая функция, OnTick(), например? Глобальная у нас =NULL, локальная проинициализирована правильно, но её не может видеть другая функция ...
Но вот как вы собрались делать конструкторы с неизвестными заранее аргументами - тут я немного не понял. Попробуйте это пояснить
Создание объектов типа CIsNewBar для каждого используемого таймфрейма по каждому символу.
З.Ы. С классом CArrayObj была проблемка: при обращении к элементам типа CArrayObj* ArrayObj.At(0) недоступны члены класса объекта, который At(0), хотя эти члены класса точно публичные, т.е. конструкция типа ArrayObj.At(0).method(parameter) не работает.Символы задаются одной строкой с разделителями в input-параметре, поэтому нельзя заранее создать все объекты перед OnInit().
Т.е. первый неизвестный параметр конструктора - символ.
Второй неизвестный параметр конструктора - таймфрейм, т.к. для каждого символа будет свой набор таймфреймов, аналогично передаётся строкой с разделителями в input-параметре.
И еще боюсь использовать эти библиотеки, вдруг что-то изменят в них при обновлении терминала и мой эксперт вдруг перестанет работать...
Создание объектов типа CIsNewBar для каждого используемого таймфрейма по каждому символу.
З.Ы. С классом CArrayObj была проблемка: при обращении к элементам типа CArrayObj* ArrayObj.At(0) недоступны члены класса объекта, который At(0), хотя эти члены класса точно публичные, т.е. конструкция типа ArrayObj.At(0).method(parameter) не работает.Символы задаются одной строкой с разделителями в input-параметре, поэтому нельзя заранее создать все объекты перед OnInit().
Т.е. первый неизвестный параметр конструктора - символ.
Второй неизвестный параметр конструктора - таймфрейм, т.к. для каждого символа будет свой набор таймфреймов, аналогично передаётся строкой с разделителями в input-параметре.
И еще боюсь использовать эти библиотеки, вдруг что-то изменят в них при обновлении терминала и мой эксперт вдруг перестанет работать...
Всё как-то не так...
Напишите простыми словами что хотите сделать. Без всяких упоминаний своих попыток закодить это всё.
Всё как-то не так...
Напишите простыми словами что хотите сделать. Без всяких упоминаний своих попыток закодить это всё.
Мультивалютный эксперт.
Список символов задается через input-параметр, строка с разделителем "AUDUSD,EURUSD,GBPUSD...", количество символов заранее не определено.
Для каждого символа есть два таймфрейма, на которых работает его "собственная" торговая система.
Соответственно два input-параметра, строки с разделителем : короткий таймфрейм для соответствующего символа "M1,M30,M5..."
длинный таймфрейм для соответствующего символа "Н1,D1,H4..."
Т.е. для AUDUSD таймфреймы М1 и Н1, для EURUSD М30 и D1, и т.д.
В OnTick() по каждому символу нужно отслеживать появление нового бара на обоих (коротком и длинном) таймфреймах для принятия торговых решений.
Старался написать как можно проще)
Мультивалютный эксперт.
Список символов задается через input-параметр, строка с разделителем "AUDUSD,EURUSD,GBPUSD...", количество символов заранее не определено.
Для каждого символа есть два таймфрейма, на которых работает его "собственная" торговая система.
Соответственно два input-параметра, строки с разделителем : короткий таймфрейм для соответствующего символа "M1,M30,M5..."
длинный таймфрейм для соответствующего символа "Н1,D1,H4..."
Т.е. для AUDUSD таймфреймы М1 и Н1, для EURUSD М30 и D1, и т.д.
В OnTick() по каждому символу нужно отслеживать появление нового бара на обоих (коротком и длинном) таймфреймах для принятия торговых решений.
Старался написать как можно проще)
Класс нового бара уже есть?
И как именно выглядят входные параметры?
Перекопал документацию и форум ...
Как сделать глобальными переменные типа указатель на объект [в примере var], если они создаются в OnInit() строкой:
причем количество объектов и параметры конструкторов заранее неизвестны и вычисляются в OnInit() ?
Легко.
Здравствуйте
в мт5 есть кнопка перекрестие
когда нажимаеш на графике то показывается информация сколько баров сколько пунктов и процент
помогите как правильно высчитать это значение чтоб можно было привязать его к роботу
спасибо
Класс нового бара уже есть?
И как именно выглядят входные параметры?
Класс позаимствован на сайте: https://www.mql5.com/ru/code/768, сделаны незначительные изменения
Предполагается применять следующим образом:
Легко.
Спасибо за ответ)
Сначала я так и сделал.
Таким образом, объект создается два раза, сначала пустой, потом, как положено, конструктором с параметрами.
Но ... Компилятор при этом на строку в OnInit() выводит предупреждение:
declaration of 'var1' hides global variable -> на строку в OnInit()
see previous declaration of 'var1'
Таким образом, локальная переменная скрывает глобальную ... и что при этом происходит ?
Какую переменную видит тогда другая функция, OnTick(), например? Глобальная у нас =NULL, локальная проинициализирована правильно, но её не может видеть другая функция ...
Класс позаимствован на сайте: https://www.mql5.com/ru/code/768, сделаны незначительные изменения
Предполагается применять следующим образом:
Из входных параметров нужно извлечь все подстроки, из них составить наименования символов и соответствующих им таймфреймов.
Далее из этих списков создать объекты-новые бары и указатель на каждый создаваемый объект "Новый бар" поместить в CArrayObj, который объявлен на глобальном уровне.
Далее - в OnTimer() в цикле по этому списку получать указатель на очередной объект в нём и проверять наличие нового бара. Если нету - переходим к следующему, если есть - делаем то, что нужно делать при открытии нового этого бара.
Таймер сделать по своим потребностям - миллисекундный, секундный, минутный - в общем, с той частотой, которую считаете достаточной для реакции на новый бар на нетекущем символе.
Спасибо за ответ)
Сначала я так и сделал.
Таким образом, объект создается два раза, сначала пустой, потом, как положено, конструктором с параметрами.
Но ... Компилятор при этом на строку в OnInit() выводит предупреждение:
declaration of 'var1' hides global variable -> на строку в OnInit()
see previous declaration of 'var1'
Таким образом, локальная переменная скрывает глобальную ... и что при этом происходит ?
Какую переменную видит тогда другая функция, OnTick(), например? Глобальная у нас =NULL, локальная проинициализирована правильно, но её не может видеть другая функция ...
Смотрите внимательнее. Вы делали не так.