Перейти к содержанию

Обучение языку MQL4 под MetaTrader 4


Рекомендуемые сообщения

Обучение языку MQL4 под MetaTrader 4 Опубликовано

Народ подскажите пожалуйста.У меня при нажатии определенной кнопки рисуются прямоугольники,мне надо чтоб верхняя и нижняя границы прямоугольника подсвечивались ценовой меткой.Что прописать в коде надо?

Ссылка на сообщение
Поделиться на другие сайты

  • Ответов 6,8k
  • Создано
  • Последний ответ

Популярные авторы

Популярные авторы

Популярные посты

Смотрим видео-уроки, изучаем MQL:       Скачать видеокурс «MQL программирование. Как самому написать форекс советник/ индикатор/ скрипт»   P.S. Тема про Обучение MQ

Перейти

Циклы цикл for Иногда необходимо повторять одно и то же действие несколько раз подряд. Для этого используют циклы. К примеру, мы хотим проанализировать последние 10 баров и выяснить наименьшую цен

Перейти

Речь идет о том, что не будет значимых нововведений. А только баги периодически будут править. А вот все новое мол - в МТ5. Когда они вживую сказали то же самое на конференции в Москве, я уточнил: "То

Перейти
Обучение языку MQL4 под MetaTrader 4 Опубликовано

не совсем, гораздо ниже Bid


Ну тем более! Нельзя ставить тейкпрофит buy-ордера ниже цены его открытия! Допустим, цена открытия buy-ордера 1.0450. Не даст Вам МТ поставить тейк ниже 1.0450. Ну это же абсурд получается: купили дороже - продали дешевле. Не может такой вариант быть тейкпрофитом. Это уже стоплосс.
Ссылка на сообщение
Поделиться на другие сайты

Обучение языку MQL4 под MetaTrader 4 Опубликовано


Есть пользовательский индикатор который рисует трендовую линию (луч). Периодически перерисовывает ее. Луч создается на основе двух точек, индексы массива 0 и 1 прыгают с бара на бар, поэтому стандартная функция iCustom не подходит.(Язык mql4)
Вопрос такой: Как в током случае перенести луч в советник?

Вроде разобрался, через ChartApplyTemplate, по другому никак.
Вся бяка была в том что при тесте надо на график кидать индюк и применять визуализацию, жутко не удобно, особенно при оптимизации.

Ни чего не выйдет, если будет загружен из советника шаблон, он загрузится со своими настройками.

Что делааать?



А если разобрать и понять логику работы индикатора, и просто в сове прописать алгоритм действий по этой логике, без использования внешнего индикатора ?
  • Лайк 1
Ссылка на сообщение
Поделиться на другие сайты

Обучение языку MQL4 под MetaTrader 4 Опубликовано


Народ подскажите пожалуйста.У меня при нажатии определенной кнопки рисуются прямоугольники,мне надо чтоб верхняя и нижняя границы прямоугольника подсвечивались ценовой меткой.Что прописать в коде надо?



Нужно в подходящем Вам способе вывода информации прописать значение функции:
ObjectGet( string object_name, // имя объекта
int index // идентификатор свойства );
где в качестве свойства объекта указываем вначале OBJPROP_PRICE1, а затем OBJPROP_PRICE2

Как-то так ...
Ссылка на сообщение
Поделиться на другие сайты

Обучение языку MQL4 под MetaTrader 4 Опубликовано



Народ подскажите пожалуйста.У меня при нажатии определенной кнопки рисуются прямоугольники,мне надо чтоб верхняя и нижняя границы прямоугольника подсвечивались ценовой меткой.Что прописать в коде надо?



Нужно в подходящем Вам способе вывода информации прописать значение функции:
ObjectGet( string object_name, // имя объекта
int index // идентификатор свойства );
где в качестве свойства объекта указываем вначале OBJPROP_PRICE1, а затем OBJPROP_PRICE2

Как-то так ...
Ничего не понял)
Ссылка на сообщение
Поделиться на другие сайты

Обучение языку MQL4 под MetaTrader 4 Опубликовано




Народ подскажите пожалуйста.У меня при нажатии определенной кнопки рисуются прямоугольники,мне надо чтоб верхняя и нижняя границы прямоугольника подсвечивались ценовой меткой.Что прописать в коде надо?



Нужно в подходящем Вам способе вывода информации прописать значение функции:
ObjectGet( string object_name, // имя объекта
int index // идентификатор свойства );
где в качестве свойства объекта указываем вначале OBJPROP_PRICE1, а затем OBJPROP_PRICE2

Как-то так ...
Ничего не понял)


Прямого, простого способа нет для решения Вашего вопроса. (или может конечно я его не знаю)
Я вижу два пути решения -
1) У объекта прямоугольник есть Описание, которое можно вывести на объект, включив опцию терминала показывать описание объекта, соответсвенно в описание мы программно вписываем ценовые координаты
прямоугольника
2) Размещаем где то текст с указанием ценовых координат, при чем еще надо будет думать как этот текст
разместить рядом с нужны объектом (или просто его печатать например в углу графика, правда если прямоугольников несколько, то тут тоже надо думать как быть)

Какой способ выбрать это Ваш выбор.
И потом в этот способ мы вставляем значения функции ObjectGet, с именем вашего объекта и ценами верхней и нижней линии. Изменено пользователем AndreyGold
Ссылка на сообщение
Поделиться на другие сайты

Обучение языку MQL4 под MetaTrader 4 Опубликовано

Вот код,там прописано описание объекта


Цитата

if (lparam == HotKey3 && !zonaUpdate || zonaUpdate == 3)
{
if (!zonaUpdateInfo)
{
zonaUpdateInfo = Info[InfoKey].NKZ;
if (Info[InfoKey].NKZ }
double NKZ = zonaUpdateInfo;
if (NKZ == 0)
{
Comment("Недельная зона не задана!");
if (sound) PlaySound(sound_Error);
return;
}
price2 = price1 - NKZ * _Point * HiLow;
if (NKZ_mode == 1)
{
price3 = price2 - NKZ * _Point * 0.1 * HiLow;
price4 = price2;
}
else if (NKZ_mode == 2)
{
price3 = price2 + NKZ * _Point * 0.1 * HiLow;
price4 = price2;
}
else
{
price3 = price2 + NKZ * _Point * 0.05 * HiLow;
price4 = price2 - NKZ * _Point * 0.05 * HiLow;
}
DrawZone("NKZ__", "Нкз - " + NKZ + "п.", time1, price1, time1 + NKZ_angle, price2, price3, price4, NKZ_length, NKZ_color, NKZ_timeframe, zonaUpdateInfo);

return;

}



Где надо прописать? Изменено пользователем l33trade
Ссылка на сообщение
Поделиться на другие сайты

Обучение языку MQL4 под MetaTrader 4 Опубликовано


Вот код,там прописано описание объекта


if (lparam == HotKey3 && !zonaUpdate || zonaUpdate == 3)
{
if (!zonaUpdateInfo)
{
zonaUpdateInfo = Info[InfoKey].NKZ;
if (Info[InfoKey].NKZ }
double NKZ = zonaUpdateInfo;
if (NKZ == 0)
{
Comment("Недельная зона не задана!");
if (sound) PlaySound(sound_Error);
return;
}
price2 = price1 - NKZ * _Point * HiLow;
if (NKZ_mode == 1)
{
price3 = price2 - NKZ * _Point * 0.1 * HiLow;
price4 = price2;
}
else if (NKZ_mode == 2)
{
price3 = price2 + NKZ * _Point * 0.1 * HiLow;
price4 = price2;
}
else
{
price3 = price2 + NKZ * _Point * 0.05 * HiLow;
price4 = price2 - NKZ * _Point * 0.05 * HiLow;
}
DrawZone("NKZ__", "Нкз - " + NKZ + "п.", time1, price1, time1 + NKZ_angle, price2, price3, price4, NKZ_length, NKZ_color, NKZ_timeframe, zonaUpdateInfo);

return;

}

Где надо прописать?



Это не весь код - я так понимаю у Вас функция DrawZone() непосредственно чертит. Это не функция MQL4 это пользовательская функция. Если хотите, чтобы цены указывались над объектом, надо понять какая переменная из ("NKZ__", "Нкз - " + NKZ + "п.", time1, price1, time1 + NKZ_angle, price2, price3, price4, NKZ_length, NKZ_color, NKZ_timeframe, zonaUpdateInfo) является именно описанием объекта.
А если просто на графике указать уровень цен, то тут есть цены price2, price3, price4 из них две, скорее всего являются границами прямоугольника, которые вас интересует. Какие - опять же надо смотреть функцию DrawZone. Если доступа нет к ней то просто поперебирайте параметры и вставьте функцию
Comment(price2); или Comment(price3); или Comment(price4); перед return в левом верхнем углу будут
уровни цен прямоугольника.
Есть еще один путь - это программно искать объект на графике и у него пытаться изменить срисовать параметр цены (функция ObjectGetDouble), но для этого надо знать имя объекта там поиск по имени идет. Изменено пользователем AndreyGold
Ссылка на сообщение
Поделиться на другие сайты

Обучение языку MQL4 под MetaTrader 4 Опубликовано

Нашел способ для отображения прямоугольника по конкретным точкам каждого дня.
Отображение происходит по 2-м координатам (p1, t1) и (p2, t2).


Всё работает хорошо, но когда пытаюсь вытащить значения цен р1 и р2 в советник, то значения цен соответствуют первому объекту на истории, а не последнему.

Не могу понять в чем ошибка.
Думал через команду ObjectSet фиксируются значения. Пробовал достать через ObjectGet, но итог тот же - соответствуют 1-му значению.

Как можно зафиксировать эти значения на весь день, а на следующий день - обновить?

Может можно как то по-другому решить проблему - мне просто интересно максимальная и минимальная цены, к примеру, в период с 00:00 до 10:00 и фиксация их на весь день.

Вот часть кода где вычисляю значения координат и тут же отправляю в Comment. Однако на графике одно, а в комменте другое

Цитата


datetime t1, t2, t3;
double p1, p2;
int b1, b2;

t1=StrToTime(TimeToStr(dt, TIME_DATE)+" "+tb); //время начала рисования прямоугольника, к примеру 00:00
t2=StrToTime(TimeToStr(dt, TIME_DATE)+" "+te); //время конца рисования прямоугольника, к примеру 23:55
t3=StrToTime(TimeToStr(dt, TIME_DATE)+" "+tc); //время конца расчета цены для 2-ой координаты, к примеру 10:00 (т.е. прямоугольник перестает обновляться за ценой)

b1=iBarShift(NULL, 0, t1);
b2=iBarShift(NULL, 0, t3);
p1=High[iHighest(NULL, 0, MODE_HIGH, b1-b2+1, b2)];
p2=Low[iLowest (NULL, 0, MODE_LOW , b1-b2+1, b2)];

ObjectSet(no, OBJPROP_TIME1 , t1);
ObjectSet(no, OBJPROP_PRICE1, p1);
ObjectSet(no, OBJPROP_TIME2 , t2);
ObjectSet(no, OBJPROP_PRICE2, p2);

Comment(" p1 = " + p1 + " p2 = " + p2);

25-12-2016_17-27-54.png

Ссылка на сообщение
Поделиться на другие сайты

Обучение языку MQL4 под MetaTrader 4 Опубликовано


Вот что я хочу сделать.



Для этого нужно название объекта знать - имя гляньте на графике прямоугольника судя по тексту он
вот так должен называться "NKZ__". Так нет ?
Ссылка на сообщение
Поделиться на другие сайты

Обучение языку MQL4 под MetaTrader 4 Опубликовано

Да абсолютно верно!


Добавлено: 26-12-2016 17:57:56

Народ помогите кто-нибудь. Изменено пользователем l33trade
Ссылка на сообщение
Поделиться на другие сайты

Обучение языку MQL4 под MetaTrader 4 Опубликовано

Привет! Подскажите, как можно рассчитать максимальную цену за n-баров и обозначить ее на графике, ну хотя бы горизонтальной линией.

Спойлер

Ссылка на сообщение
Поделиться на другие сайты

Обучение языку MQL4 под MetaTrader 4 Опубликовано

Суть есть некий индикатор,который в окно данных при наличии сигнала на селл/бай генерит сигнал.
Как эту цену с буфера окна данных считать?

EURGBPM15.png

Ссылка на сообщение
Поделиться на другие сайты

Обучение языку MQL4 под MetaTrader 4 Опубликовано


Вот код,там прописано описание объекта


Спойлер

if (lparam == HotKey3 && !zonaUpdate || zonaUpdate == 3)
{
if (!zonaUpdateInfo)
{
zonaUpdateInfo = Info[InfoKey].NKZ;
if (Info[InfoKey].NKZ }
double NKZ = zonaUpdateInfo;
if (NKZ == 0)
{
Comment("Недельная зона не задана!");
if (sound) PlaySound(sound_Error);
return;
}
price2 = price1 - NKZ * _Point * HiLow;
if (NKZ_mode == 1)
{
price3 = price2 - NKZ * _Point * 0.1 * HiLow;
price4 = price2;
}
else if (NKZ_mode == 2)
{
price3 = price2 + NKZ * _Point * 0.1 * HiLow;
price4 = price2;
}
else
{
price3 = price2 + NKZ * _Point * 0.05 * HiLow;
price4 = price2 - NKZ * _Point * 0.05 * HiLow;
}
DrawZone("NKZ__", "Нкз - " + NKZ + "п.", time1, price1, time1 + NKZ_angle, price2, price3, price4, NKZ_length, NKZ_color, NKZ_timeframe, zonaUpdateInfo);

//--- создадим ценовые метки
ObjectCreate(0,"ARROW_1",OBJ_ARROW_LEFT_PRICE,0,time1,price1);
ObjectCreate(0,"ARROW_2",OBJ_ARROW_LEFT_PRICE,0,time1,price2);


return;

}



Где надо прописать?


Можно сделать так (под spoiler) Изменено пользователем SilverKZ
  • Лайк 1
Ссылка на сообщение
Поделиться на другие сайты

Обучение языку MQL4 под MetaTrader 4 Опубликовано

1.У Вас прямоугольники рисуются каждый день? Имена прямоугольников новые каждый день? Или имя одинаковое каждый раз?
2.Чтобы фиксировать значения на весь день, сделайте, чтобы значения обновлялись только в определенное время ежедневно.

Честно сказать поверхностно прочитал, в вопрос не вникал досконально. Просто мысли вслух...

  • Лайк 1
Ссылка на сообщение
Поделиться на другие сайты

Обучение языку MQL4 под MetaTrader 4 Опубликовано

Можно так

   //--- находим максимальную цену за n-баров
int n = 1000;
double max_price = High[iHighest(NULL,0,MODE_HIGH,n,0)];
//--- создадим горизонтальную линию
ObjectCreate(0,"HLINE_MAX",OBJ_HLINE,0,0,max_price);

  • Лайк 2
Ссылка на сообщение
Поделиться на другие сайты

Обучение языку MQL4 под MetaTrader 4 Опубликовано

Работает,но небольшой косяк

Спойлер



Добавлено: 26-12-2016 19:55:46

Вот есть еще кусок кода,отвечающий за рисование этой зоны
Цитата

// Рисуем зону
if (price1 > price2) name += "_H"; else name += "_L";
name += "_" + info;
if (price3 bool cr = ObjectCreate(name, OBJ_RECTANGLE, 0, 0, 0, 0, 0);
ObjectSet(name, OBJPROP_TIME1, time2);
ObjectSet(name, OBJPROP_PRICE1, price3);
if (!ObjectGet(name, OBJPROP_TIME2))
ObjectSet(name, OBJPROP_TIME2, correctWeekend(time2, time2 + length)); // Если time2 не задан у объекта, тогда задаем, т.к. это новый объект (иначе у зоны отредктирована длина)
ObjectSet(name, OBJPROP_PRICE2, price4);
ObjectSetText(name, descr); // Описание
if (cr) ObjectSet(name, OBJPROP_COLOR, clr); // Цвет
ObjectSet(name, OBJPROP_TIMEFRAMES, timeframe); // Таймфрейм для отображения
ObjectSet(name, OBJPROP_SELECTED, false); // Снять выделение с объекта
ObjectSet(name, OBJPROP_BACK, true); // Рисовать объект в фоне

Изменено пользователем l33trade
Ссылка на сообщение
Поделиться на другие сайты

Обучение языку MQL4 под MetaTrader 4 Опубликовано

Пробовал.Та метка что косо вставала,встала куда надо,но другая метка вообще исчезла.


Добавлено: 26-12-2016 20:13:58

Все дошарил. Спасибо тебе огромное помог)

Добавлено: 26-12-2016 20:21:41


Работает,но небольшой косяк


Попробуйте использовать price3 и price4.

Слушай сейчас начал наносить зоны для тех анализа и заметил такую штуку.Ценовые метки рисуются только один раз,то есть только для одной зоны.Если нанести вторую,меток нету. Изменено пользователем l33trade
Ссылка на сообщение
Поделиться на другие сайты

Обучение языку MQL4 под MetaTrader 4 Опубликовано

Подскажите как получить значение в советнике с окна данных.а именно sell buffer Buy buffer
?

EURGBPM15.png

Ссылка на сообщение
Поделиться на другие сайты

Обучение языку MQL4 под MetaTrader 4 Опубликовано

//Не считывает данные

IndicatorShortName("CandleType");
datetime some_time=D'2016.12.23 128:30';//Дата сигнала
int shift=iBarShift(Symbol(), Period(),some_time);//высчитываем смещение в барах

Alert(shift);
double val =iCustom(Symbol(), Period(), "PivotPointReversal_x2_1_49","Show_P4_patern", 1,shift );
Alert(val );

double val1 =iCustom(Symbol(), Period(), "Sell Buffer","Show_P4_patern", 1, shift);
Alert(val1 );

EURGBPM15.png
120.jpg

Ссылка на сообщение
Поделиться на другие сайты

Обучение языку MQL4 под MetaTrader 4 Опубликовано

Заработало!!! Спасибо!!!

На решение меня навело имя объекта, которое присваивается каждый день новое.

Такими строчками теперь получаю желаемые цены:

Цитата

double MaxP=ObjectGetDouble(0,"AS"+i,OBJPROP_PRICE1,0); // где AS - название моего прямоугольника

double MinP=ObjectGetDouble(0,"AS"+i,OBJPROP_PRICE2,0);

Ссылка на сообщение
Поделиться на другие сайты

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти

  • Специальное предложение


  • Рекомендуемые брокеры

  • ×
    ×
    • Создать...