А вы не знаете почему очень многие и вы в том числе отвечают тем кто в mql сам плавает как топор. А советы знающих игнорируют? В вашем случае вот этот совет:
Здравствуйте. Начните с отслеживания состояния графика в OnChartEvent() https://www.mql5.com/ru/docs/event_handlers/onchartevent Есть несколько событий, которые вам потребуются: CHARTEVENT_OBJECT_CREATE Создание графического объекта CHARTEVENT_OBJECT_CHANGE Изменение свойств графического объекта через диалог свойств CHARTEVENT_OBJECT_DELETE Удаление графического объекта https://www.mql5.com/ru/docs/constants/chartconstants/enum_chartevents Выведите все параметры обработчика OnChartEvent() в журнал и поглядите их значения при добавлении/изменении/удалении графических объектов. Это даст вам направление куда двигаться.
Спасибо за совет, я об этих функциях знаю. Но как с их помощью реализовать автоматическое нахождение советником объекта на чарте и считывание его параметров, если априори не известно его имя? Ведь при нанесении объекта на график мышью имя дает система.
Естественно, не сложно организовать ручной ввод в советник всех необходимых данных объекта из таблицы его свойств, но тогда при чем здесь автоматизация? А вот как программно передать в советник имя объекта, после чего все указанные вами функции можно задействовать, мне пока не понятно...
Как выше отметили, работайте с событиями чарта:
//+------------------------------------------------------------------+//| |//+------------------------------------------------------------------+bool applyObject(conststring _objName) {
if(MessageBox("Сохранить параметры объекта \"" + _objName + "\" для эксперта?", "ObjChange", MB_YESNO) == IDYES) {
objName = _objName; // Запись имени изменяемого объекта// Запись других параметров изменяемого объекта ...returntrue;
}
returnfalse;
}
//+------------------------------------------------------------------+//| ChartEvent function |//+------------------------------------------------------------------+voidOnChartEvent(constint id,
constlong &lparam,
constdouble &dparam,
conststring &sparam
) {
//---if(id == CHARTEVENT_OBJECT_CREATE || id == CHARTEVENT_OBJECT_DRAG || id == CHARTEVENT_OBJECT_CHANGE) {
applyObject(sparam);
}
}
Artyom Trishkin: Здравствуйте. Начните с отслеживания состояния графика в OnChartEvent() https://www.mql5.com/ru/docs/event_handlers/onchartevent Есть несколько событий, которые вам потребуются: CHARTEVENT_OBJECT_CREATE Создание графического объекта CHARTEVENT_OBJECT_CHANGE Изменение свойств графического объекта через диалог свойств CHARTEVENT_OBJECT_DELETE Удаление графического объекта https://www.mql5.com/ru/docs/constants/chartconstants/enum_chartevents Выведите все параметры обработчика OnChartEvent() в журнал и поглядите их значения при добавлении/изменении/удалении графических объектов. Это даст вам направление куда двигаться.
Спасибо большое, уже воспользовался вашим советом!
Найти и вывести в журнал объекты заданного типа с их координатами можно так:
Можно сохранить любые данные в файл. А в эксперте сделать загрузчик, который будет добавлять соответствующие объекты, а потом загружать в них данные из файла. Но Вы хотя бы набросайте исходник под Вашу конкретную задачу и опубликуйте его здесь.
Теперь осталось разобраться, как найти точку пересечения графика цены и найденного объекта, в данном случае, линии тренда.
Алгоритм я себе представляю так: 1. По считанным координатам линии тренда вычисляется коэффициент приращения тренда в расчете на 1 бар выбранного ТФ. 2. Вычисляется ценовая координата линии тренда на текущем баре и в течение выбранного ТФ отслеживается факт пересечения графиком этой точки. 3. Если факт имеет место, переходим к обработке этого события, например, открываем ордер. Если нет, процедура повторяется для следующего бара.
Но, может быть, в МТ4(5), в силу специфики этой системы, все решается гораздо проще?
А вы не знаете почему очень многие и вы в том числе отвечают тем кто в mql сам плавает как топор. А советы знающих игнорируют? В вашем случае вот этот совет:
Уважаемый Алексей, вы совершенно правы относительно меня в части знания MQL. Но ошибаетесь в том, что я не прислушиваюсь к советам знающих людей, потому что первым делом я обратился в личку к человеку, которого считаю одним из выдающихся профессионалов MQL и которого и вы прекрасно знаете - это @Artyom Trishkin.
Именно его советы позволили мне сразу понять, как решить свою проблему, и открыли глаза, куда двигаться дальше. А @Mihail Matkovskij еще больше упростил мне жизнь!
Теперь осталось разобраться, как найти точку пересечения графика цены и найденного объекта, в данном случае, линии тренда.
Алгоритм я себе представляю так: 1. По считанным координатам линии тренда вычисляется коэффициент приращения тренда в расчете на 1 бар выбранного ТФ. 2. Вычисляется ценовая координата линии тренда на текущем баре и в течение выбранного ТФ отслеживается факт пересечения графиком этой точки. 3. Если факт имеет место, переходим к обработке этого события, например, открываем ордер. Если нет, процедура повторяется для следующего бара.
Но, может быть, в МТ4(5), в силу специфики этой системы, все решается гораздо проще?
Как я уже говорил выше, набросайте исходник, чтобы было от чего отталкиваться. Тем более, кое-какие знания о том как получить данные объекта на графике у Вас уже есть. Делать за Вас всё с нуля никому не охота. А так, то чего не хватает для работы эксперта можно будет дополнить...
Теперь осталось разобраться, как найти точку пересечения графика цены и найденного объекта, в данном случае, линии тренда.
Алгоритм я себе представляю так: 1. По считанным координатам линии тренда вычисляется коэффициент приращения тренда в расчете на 1 бар выбранного ТФ. 2. Вычисляется ценовая координата линии тренда на текущем баре и в течение выбранного ТФ отслеживается факт пересечения графиком этой точки. 3. Если факт имеет место, переходим к обработке этого события, например, открываем ордер. Если нет, процедура повторяется для следующего бара.
Но, может быть, в МТ4(5), в силу специфики этой системы, все решается гораздо проще?
Не очень понятно что хотите найти. Точку пересечения трендовой линии ценой на каком-либо баре? Для этого есть функции получения значения линии на баре. Но я бы использовал уравнение прямой:
Указываете номер и цену бара точки слева, указываете номер и цену бара точки справа (по этим точкам строится виртуальная линия) и указываете искомый бар. Функция вернёт цену искомого бара.
..... Для этого есть функции получения значения линии на баре. Но я бы использовал уравнение прямой:
.....
Артём, а вот тут поподробнее, пожалуйста.
Я или раньше не очень внимателен был, или документацию подправили... Не знаю.
Но я всегда считал, что ObjectGetDouble возвращал цену линии на конкретном баре (я о цене именно). А тут решил маленький скриптик чиркануть для проверки, и что я увидел?
1. Нет в параметрах номера бара, на котором нужно считать значение.
Да, по большому счёту, если я в коде рисую эту линию, то эти точки у меня и так уже есть! Нафига мне их узнавать? Да и вообще, какой в этом смысл?
А как взять значение цены этой линии в другом месте?
Получается, что это
prop_modifier
[in] Модификатор указанного свойства. Для первого варианта по умолчанию значение модификатора равно 0. Большинство свойств не требуют модификатора. Означает номер уровня в инструментах Фибоначчи и в графическом объекте Вилы Эндрюса. Нумерация уровней начинается с нуля.
тоже вооще никакого смысла не несёт? Это что, ищем точки привязки ЛЮБОЙ линии веера? Бред. Пардон.
Все объекты, используемые в техническом анализе, имеют привязку на графиках по координатам цены и времени – трендовая линия, каналы, инструменты Фибоначчи и т.д. Но есть ряд вспомогательных объектов, предназначенных для улучшения интерфейса, которые имеют привязку к видимой всегда части графика (основное окно графика или подокна индикаторов...
Я или раньше не очень внимателен был, или документацию подправили... Не знаю.
Но я всегда считал, что ObjectGetDouble возвращал цену линии на конкретном баре (я о цене именно). А тут решил маленький скриптик чиркануть для проверки, и что я увидел?
1. Нет в параметрах номера бара, на котором нужно считать значение.
Да, по большому счёту, если я в коде рисую эту линию, то эти точки у меня и так уже есть! Нафига мне их узнавать? Да и вообще, какой в этом смысл?
А как взять значение цены этой линии в другом месте?
Получается, что это
prop_modifier
[in] Модификатор указанного свойства. Для первого варианта по умолчанию значение модификатора равно 0. Большинство свойств не требуют модификатора. Означает номер уровня в инструментах Фибоначчи и в графическом объекте Вилы Эндрюса. Нумерация уровней начинается с нуля.
тоже вооще никакого смысла не несёт? Это что, ищем точки привязки ЛЮБОЙ линии веера? Бред. Пардон.
С такими объектами мало работал. Вот эта функция что вернёт для трендовой по указанному времени бара? Мне нет времени проверять. Пусть и маленьким скриптом...
Функция использует синхронный вызов – это означает, что функция дожидается выполнения всех команд, которые были помещены в очередь графика перед её вызовом, и поэтому данная функция может быть затратной по времени. Нужно иметь это обстоятельство в виду...
Для авторизации и пользования сайтом MQL5.com необходимо разрешить использование файлов Сookie.
Пожалуйста, включите в вашем браузере данную настройку, иначе вы не сможете авторизоваться.
Вы вошли в аккаунт. Двухфакторная аутентификация отключена. Настройте её заново и отсканируйте новый QR-код или продолжите с отключённой двухфакторной аутентификацией.
Спасибо за совет, я об этих функциях знаю.
А вы не знаете почему очень многие и вы в том числе отвечают тем кто в mql сам плавает как топор. А советы знающих игнорируют? В вашем случае вот этот совет:
Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий
Любые вопросы новичков по MQL4 и MQL5, помощь и обсуждение по алгоритмам и кодам
Artyom Trishkin, 2020.06.29 00:03
Здравствуйте.Начните с отслеживания состояния графика в OnChartEvent() https://www.mql5.com/ru/docs/event_handlers/onchartevent
Есть несколько событий, которые вам потребуются:
CHARTEVENT_OBJECT_CREATE Создание графического объекта
CHARTEVENT_OBJECT_CHANGE Изменение свойств графического объекта через диалог свойств
CHARTEVENT_OBJECT_DELETE Удаление графического объекта
https://www.mql5.com/ru/docs/constants/chartconstants/enum_chartevents
Выведите все параметры обработчика OnChartEvent() в журнал и поглядите их значения при добавлении/изменении/удалении графических объектов. Это даст вам направление куда двигаться.
Спасибо за совет, я об этих функциях знаю.
Но как с их помощью реализовать автоматическое нахождение советником объекта на чарте и считывание его параметров, если априори не известно его имя?
Ведь при нанесении объекта на график мышью имя дает система.
Естественно, не сложно организовать ручной ввод в советник всех необходимых данных объекта из таблицы его свойств, но тогда при чем здесь автоматизация?
А вот как программно передать в советник имя объекта, после чего все указанные вами функции можно задействовать, мне пока не понятно...
Как выше отметили, работайте с событиями чарта:
Здравствуйте.
Начните с отслеживания состояния графика в OnChartEvent() https://www.mql5.com/ru/docs/event_handlers/onchartevent
Есть несколько событий, которые вам потребуются:
CHARTEVENT_OBJECT_CREATE Создание графического объекта
CHARTEVENT_OBJECT_CHANGE Изменение свойств графического объекта через диалог свойств
CHARTEVENT_OBJECT_DELETE Удаление графического объекта
https://www.mql5.com/ru/docs/constants/chartconstants/enum_chartevents
Выведите все параметры обработчика OnChartEvent() в журнал и поглядите их значения при добавлении/изменении/удалении графических объектов. Это даст вам направление куда двигаться.
Спасибо большое, уже воспользовался вашим советом!
Найти и вывести в журнал объекты заданного типа с их координатами можно так:
Можно сохранить любые данные в файл. А в эксперте сделать загрузчик, который будет добавлять соответствующие объекты, а потом загружать в них данные из файла. Но Вы хотя бы набросайте исходник под Вашу конкретную задачу и опубликуйте его здесь.
Как выше отметили, работайте с событиями чарта:
Михаил, Ваша и @Artyom Trishkin помощь оказалась очень кстати!
Теперь осталось разобраться, как найти точку пересечения графика цены и найденного объекта, в данном случае, линии тренда.
Алгоритм я себе представляю так:
1. По считанным координатам линии тренда вычисляется коэффициент приращения тренда в расчете на 1 бар выбранного ТФ.
2. Вычисляется ценовая координата линии тренда на текущем баре и в течение выбранного ТФ отслеживается факт пересечения графиком этой точки.
3. Если факт имеет место, переходим к обработке этого события, например, открываем ордер. Если нет, процедура повторяется для следующего бара.
Но, может быть, в МТ4(5), в силу специфики этой системы, все решается гораздо проще?
А вы не знаете почему очень многие и вы в том числе отвечают тем кто в mql сам плавает как топор. А советы знающих игнорируют? В вашем случае вот этот совет:
Уважаемый Алексей, вы совершенно правы относительно меня в части знания MQL. Но ошибаетесь в том, что я не прислушиваюсь к советам знающих людей, потому что первым делом я обратился в личку к человеку, которого считаю одним из выдающихся профессионалов MQL и которого и вы прекрасно знаете - это @Artyom Trishkin.
Именно его советы позволили мне сразу понять, как решить свою проблему, и открыли глаза, куда двигаться дальше. А @Mihail Matkovskij еще больше упростил мне жизнь!
Михаил, Ваша и @Artyom Trishkin помощь оказалась очень кстати!
Теперь осталось разобраться, как найти точку пересечения графика цены и найденного объекта, в данном случае, линии тренда.
Алгоритм я себе представляю так:
1. По считанным координатам линии тренда вычисляется коэффициент приращения тренда в расчете на 1 бар выбранного ТФ.
2. Вычисляется ценовая координата линии тренда на текущем баре и в течение выбранного ТФ отслеживается факт пересечения графиком этой точки.
3. Если факт имеет место, переходим к обработке этого события, например, открываем ордер. Если нет, процедура повторяется для следующего бара.
Но, может быть, в МТ4(5), в силу специфики этой системы, все решается гораздо проще?
Как я уже говорил выше, набросайте исходник, чтобы было от чего отталкиваться. Тем более, кое-какие знания о том как получить данные объекта на графике у Вас уже есть. Делать за Вас всё с нуля никому не охота. А так, то чего не хватает для работы эксперта можно будет дополнить...
Михаил, Ваша и @Artyom Trishkin помощь оказалась очень кстати!
Теперь осталось разобраться, как найти точку пересечения графика цены и найденного объекта, в данном случае, линии тренда.
Алгоритм я себе представляю так:
1. По считанным координатам линии тренда вычисляется коэффициент приращения тренда в расчете на 1 бар выбранного ТФ.
2. Вычисляется ценовая координата линии тренда на текущем баре и в течение выбранного ТФ отслеживается факт пересечения графиком этой точки.
3. Если факт имеет место, переходим к обработке этого события, например, открываем ордер. Если нет, процедура повторяется для следующего бара.
Но, может быть, в МТ4(5), в силу специфики этой системы, все решается гораздо проще?
Не очень понятно что хотите найти. Точку пересечения трендовой линии ценой на каком-либо баре? Для этого есть функции получения значения линии на баре. Но я бы использовал уравнение прямой:
Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий
Вопросы от начинающих MQL5 MT5 MetaTrader 5
Artyom Trishkin, 2020.05.02 12:27
Используйте уравнение прямой:
Указываете номер и цену бара точки слева, указываете номер и цену бара точки справа (по этим точкам строится виртуальная линия) и указываете искомый бар.
Функция вернёт цену искомого бара.
..... Для этого есть функции получения значения линии на баре. Но я бы использовал уравнение прямой:
Артём, а вот тут поподробнее, пожалуйста.
Я или раньше не очень внимателен был, или документацию подправили... Не знаю.
Но я всегда считал, что ObjectGetDouble возвращал цену линии на конкретном баре (я о цене именно). А тут решил маленький скриптик чиркануть для проверки, и что я увидел?
1. Нет в параметрах номера бара, на котором нужно считать значение.
2. Индентификатор свойства:
OBJPROP_PRICE
Координата цены
double модификатор=номер точки привязки
это только точка привязки!
Да, по большому счёту, если я в коде рисую эту линию, то эти точки у меня и так уже есть! Нафига мне их узнавать? Да и вообще, какой в этом смысл?
А как взять значение цены этой линии в другом месте?
Получается, что это
prop_modifier
[in] Модификатор указанного свойства. Для первого варианта по умолчанию значение модификатора равно 0. Большинство свойств не требуют модификатора. Означает номер уровня в инструментах Фибоначчи и в графическом объекте Вилы Эндрюса. Нумерация уровней начинается с нуля.
тоже вооще никакого смысла не несёт? Это что, ищем точки привязки ЛЮБОЙ линии веера? Бред. Пардон.
Артём, а вот тут поподробнее, пожалуйста.
Я или раньше не очень внимателен был, или документацию подправили... Не знаю.
Но я всегда считал, что ObjectGetDouble возвращал цену линии на конкретном баре (я о цене именно). А тут решил маленький скриптик чиркануть для проверки, и что я увидел?
1. Нет в параметрах номера бара, на котором нужно считать значение.
2. Индентификатор свойства:
OBJPROP_PRICE
Координата цены
double модификатор=номер точки привязки
это только точка привязки!
Да, по большому счёту, если я в коде рисую эту линию, то эти точки у меня и так уже есть! Нафига мне их узнавать? Да и вообще, какой в этом смысл?
А как взять значение цены этой линии в другом месте?
Получается, что это
prop_modifier
[in] Модификатор указанного свойства. Для первого варианта по умолчанию значение модификатора равно 0. Большинство свойств не требуют модификатора. Означает номер уровня в инструментах Фибоначчи и в графическом объекте Вилы Эндрюса. Нумерация уровней начинается с нуля.
тоже вооще никакого смысла не несёт? Это что, ищем точки привязки ЛЮБОЙ линии веера? Бред. Пардон.
С такими объектами мало работал. Вот эта функция что вернёт для трендовой по указанному времени бара? Мне нет времени проверять. Пусть и маленьким скриптом...
ObjectGetValueByTime()