Вопросы - ответы

RegXRay

Участник
Регистрация
11 Июл 2018
Сообщения
480
Поблагодарили
2
Поинты
0.00
Пол
Муж.
Задаем и отвечаем на вопросы, касающиеся самого языка MQL5. Думаю, новичкам для изучения основ языка тема будет полезной. Более опытные соратники на нелегком трейдерском поприще помогают советами, рекомендации или даже отрывками программного кода.
 

RegXRay

Участник
Регистрация
11 Июл 2018
Сообщения
480
Поблагодарили
2
Поинты
0.00
Пол
Муж.
Сам задался сейчас вопросом, как программно создать трендовую линию по двум известным точкам.
Определил две точки таким образом.
Код:
class Dot
{
public:
double Price;
datetime Time;
};
      Dot Dot0,Dot1;//Точки
Для определения точки нужны две координаты - ценовая координата и координата времени. Вот теперь изучаю справочник на предмет создания трендовой линии. Может кто подскажет, как лучше ее создать?
 

Croco

Общаюсь с выгодой
Регистрация
3 Июл 2018
Сообщения
11,626
Поблагодарили
899
Поинты
41.00
Пол
Муж.
языка MQL5

Нужно бы добавить в заголовок темы.
 

AlexeyVik

Участник
Регистрация
22 Ноя 2018
Сообщения
216
Поблагодарили
22
Поинты
0.00
Пол
Муж.
Сам задался сейчас вопросом, как программно создать трендовую линию по двум известным точкам.
Определил две точки таким образом.
Код:
class Dot
{
public:
double Price;
datetime Time;
};
Dot Dot0,Dot1;//Точки
Для определения точки нужны две координаты - ценовая координата и координата времени. Вот теперь изучаю справочник на предмет создания трендовой линии. Может кто подскажет, как лучше ее создать?

Для трендовой линии нужны не две координаты - ценовая координата и координата времени, а четыре, две координаты цены и две координаты времени.
 

RegXRay

Участник
Регистрация
11 Июл 2018
Сообщения
480
Поблагодарили
2
Поинты
0.00
Пол
Муж.
Для трендовой линии нужны не две координаты - ценовая координата и координата времени, а четыре, две координаты цены и две координаты времени.
Ну это понятно. Через две точки обычно проводятся линия. Ну а точка на двумерном графике чарта котировки, определяется через две координаты ( координата времени, координата цены). Кстати вопрос с созданием трендовой линии по двум точкам успешно решил. Если кому-то понадобиться, могу поделиться кодом.
 

AlexeyVik

Участник
Регистрация
22 Ноя 2018
Сообщения
216
Поблагодарили
22
Поинты
0.00
Пол
Муж.
Да чем тут делиться?
PHP:
ObjectCreate(0, "name", OBJ_TREND, 0, time1, price1, time2, price2);

Ну, разве-что добавить контроль наличия такого имени объекта и контроль ошибки создания.
Дальше уже можно назначать параметры по вкусу, цвет, луч, толщину и прочее.
 

RegXRay

Участник
Регистрация
11 Июл 2018
Сообщения
480
Поблагодарили
2
Поинты
0.00
Пол
Муж.
Да чем тут делиться?
PHP:
ObjectCreate(0, "name", OBJ_TREND, 0, time1, price1, time2, price2);

Ну, разве-что добавить контроль наличия такого имени объекта и контроль ошибки создания.
Дальше уже можно назначать параметры по вкусу, цвет, луч, толщину и прочее.
У меня своя функция
Код:
//+------------------------------------------------------------------+
//| Создает линию тренда по заданным координатам |
//+------------------------------------------------------------------+
bool TrendCreate(Dot &Dot0,Dot &Dot1)
{

И создание происходит так.
Код:
ObjectCreate(chart_ID,NameLine,OBJ_TREND,sub_window,Dot0.Time,Dot0.Price,Dot1.Time,Dot1.Price)
А в остальном Вы правы - через ObjectSetInteger() устанавливаются различные свойства линии. Просто сходу, как-то сложновато для меня было сразу написать нужный код. Пришлось лезть в справочник. Вспоминать все подзабытое.
 

AlexeyVik

Участник
Регистрация
22 Ноя 2018
Сообщения
216
Поблагодарили
22
Поинты
0.00
Пол
Муж.
Пришлось лезть в справочник. Вспоминать все подзабытое.
Я вот уже десятый год программирую на mql и даже не собираюсь запоминать последовательность параметров функций, да и названия функций не все помню. Так-что мне не приходится вспоминать подзабытое. Для этого есть отличная документация по языку. Я без неё не работаю.
 

Yra

Общаюсь с выгодой
Регистрация
25 Дек 2018
Сообщения
1,856
Поблагодарили
214
Поинты
1.10
Пол
Муж.
Я вот уже десятый год программирую на mql и даже не собираюсь запоминать последовательность параметров функций, да и названия функций не все помню. Так-что мне не приходится вспоминать подзабытое. Для этого есть отличная документация по языку. Я без неё не работаю.
Здравствуйте вижу вы тут пишете что есть документация какая-то ,а где ее взять что=бы немного почитать и изучить я просто хочу переучиться с MQL4 на MQL5 или точнее доучить другой язык для переделки своих алгоритмов.
 

AlexeyVik

Участник
Регистрация
22 Ноя 2018
Сообщения
216
Поблагодарили
22
Поинты
0.00
Пол
Муж.
Здравствуйте вижу вы тут пишете что есть документация какая-то ,а где ее взять что=бы немного почитать и изучить я просто хочу переучиться с MQL4 на MQL5 или точнее доучить другой язык для переделки своих алгоритмов.

А F1 никогда не нажимал находясь в редакторе кодов? В MetaEditor есть встроенная документация вызываемая клавишей F1 как для mql4 так и для mql5. Ну, на худой конец есть на сайте mql5.com
 

Yra

Общаюсь с выгодой
Регистрация
25 Дек 2018
Сообщения
1,856
Поблагодарили
214
Поинты
1.10
Пол
Муж.
А F1 никогда не нажимал находясь в редакторе кодов? В MetaEditor есть встроенная документация вызываемая клавишей F1 как для mql4 так и для mql5. Ну, на худой конец есть на сайте mql5.com

На метатрейдере 4 пользовался просто я не знал что тут также, язык программирования MQL4 я более мене знаю так что понятия кое какие есть научусь и MQL5 просто со временем как всегда туговато. Спасибо за отклик.
 

Aksi

Участник
Регистрация
2 Июл 2019
Сообщения
59
Поблагодарили
3
Поинты
0.00
Пол
Муж.
Приветствую! Может кто подскажет. Хочу написать советник MQL5, Но никак не получается инициализировать пользовательский индикатор MACD который в списке терминала по дефолту. Функция iCustom не срабатывает, в журнале выдает ошибку, что индикатор не удалось инициализировать. Хендл создал. Функцию Copy buffer которую использую покажу, может, что-то неправильно написал
///+------------------------------------------------------------------+
//|
//+------------------------------------------------------------------+
double GetIndicator(int handle, int buffer_num, int index)
{
//--- array for the indicator values
double arr[];
//--- obtain the indicator value in the last two bars
if (CopyBuffer(handle, buffer_num, 0, index+1, arr) <= 0)
{
Sleep(200);
for(int i=0; i<100; i++)
{
if (BarsCalculated(handle) > 0)
break;
Sleep(50);
}
int copied = CopyBuffer(handle, buffer_num, 0, index+1, arr);
if (copied <= 0)
{
Print("CopyBuffer failed. Maybe history has not download yet? Error = ", GetLastError());
return -1;
}
else
return (arr[index]);
}
else
{
return (arr[index]);
}

return 0;
}
 

AlexeyVik

Участник
Регистрация
22 Ноя 2018
Сообщения
216
Поблагодарили
22
Поинты
0.00
Пол
Муж.
Приветствую! Может кто подскажет. Хочу написать советник MQL5, Но никак не получается инициализировать пользовательский индикатор MACD который в списке терминала по дефолту. Функция iCustom не срабатывает, в журнале выдает ошибку, что индикатор не удалось инициализировать. Хендл создал. Функцию Copy buffer которую использую покажу, может, что-то неправильно написал

Хендл создать можно двумя способами.
  1. iCustom()
  2. IndicatorCreate()
каким способом ты создал хендл и проверял-ли его значение?
 

Aksi

Участник
Регистрация
2 Июл 2019
Сообщения
59
Поблагодарили
3
Поинты
0.00
Пол
Муж.
bandicam 2019-07-16.jpg
Хендл создать можно двумя способами.
  1. iCustom()
  2. IndicatorCreate()
каким способом ты создал хендл и проверял-ли его значение?

Хендл создал через iCustom:

int handle1 = 0;
//---
int OnInit()
{
//---
NDigits = Digits();
if (NDigits == 3 || NDigits == 5) PipValue = 10;

if (AccountInfoInteger(ACCOUNT_TRADE_EXPERT) == false)
{
Print("Check terminal options because option is set to not allowed.");
Comment("Check terminal options because option is set to not allowed.");
}

if (false) ObjectsDeleteAll(0); // clear the chart

handle1 = iCustom(NULL, PERIOD_CURRENT, "MACD",12,26,9);

Comment(""); // clear the chart
//---
return(0);
}

В журнале такая ошибка:
 

Вложения

  • bandicam 2019-07-16.jpg
    bandicam 2019-07-16.jpg
    76 KB · Просмотры: 223
Последнее редактирование:

AlexeyVik

Участник
Регистрация
22 Ноя 2018
Сообщения
216
Поблагодарили
22
Поинты
0.00
Пол
Муж.
bandicam 2019-07-16.jpg

Хендл создал через iCustom:

В журнале такая ошибка:

Пользовательский индикатор MACD находится в папке Examples.
Следовательно в функцию iCustom должно быть вставлено имя индикатора с указанием подпапки.
Код:
iCustom(_Symbol, PERIOD_CURRENT, "Examples\\MACD", 12, 26, 9);
А лучше, на мой взгляд создать технический индикатор
Код:
iMACD(_Symbol, PERIOD_CURRENT, 12, 26, 9, PRICE_CLOSE);
 

Aksi

Участник
Регистрация
2 Июл 2019
Сообщения
59
Поблагодарили
3
Поинты
0.00
Пол
Муж.
Спасибо, Большое, все получилось! Через iCustom делаю, потому, что немного модифицировал MACD.
 

Aksi

Участник
Регистрация
2 Июл 2019
Сообщения
59
Поблагодарили
3
Поинты
0.00
Пол
Муж.
Пользовательский индикатор MACD находится в папке Examples.
Следовательно в функцию iCustom должно быть вставлено имя индикатора с указанием подпапки.
Код:
iCustom(_Symbol, PERIOD_CURRENT, "Examples\\MACD", 12, 26, 9);
А лучше, на мой взгляд создать технический индикатор
Код:
iMACD(_Symbol, PERIOD_CURRENT, 12, 26, 9, PRICE_CLOSE);

Спасибо, Большое, все получилось! Через iCustom делаю, потому, что немного модифицировал MACD.
 

AlexeyVik

Участник
Регистрация
22 Ноя 2018
Сообщения
216
Поблагодарили
22
Поинты
0.00
Пол
Муж.
Спасибо, Большое, все получилось! Через iCustom делаю, потому, что немного модифицировал MACD.

Я-бы поостерёгся модифицировать индикаторы идущие в поставке терминала. При первом-же обновлении он будет переписан. Лучше изменить ему имя. Или скопировать в другую папку.
 

Aksi

Участник
Регистрация
2 Июл 2019
Сообщения
59
Поблагодарили
3
Поинты
0.00
Пол
Муж.
Я-бы поостерёгся модифицировать индикаторы идущие в поставке терминала. При первом-же обновлении он будет переписан. Лучше изменить ему имя. Или скопировать в другую папку.

Спасибо, учту!
 
Сверху