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

  • Автор темы Автор темы RegXRay
  • Дата начала Дата начала

RegXRay

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

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

Для трендовой линии нужны не две координаты - ценовая координата и координата времени, а четыре, две координаты цены и две координаты времени.
 
Для трендовой линии нужны не две координаты - ценовая координата и координата времени, а четыре, две координаты цены и две координаты времени.
Ну это понятно. Через две точки обычно проводятся линия. Ну а точка на двумерном графике чарта котировки, определяется через две координаты ( координата времени, координата цены). Кстати вопрос с созданием трендовой линии по двум точкам успешно решил. Если кому-то понадобиться, могу поделиться кодом.
 
Да чем тут делиться?
PHP:
ObjectCreate(0, "name", OBJ_TREND, 0, time1, price1, time2, price2);

Ну, разве-что добавить контроль наличия такого имени объекта и контроль ошибки создания.
Дальше уже можно назначать параметры по вкусу, цвет, луч, толщину и прочее.
 
Да чем тут делиться?
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() устанавливаются различные свойства линии. Просто сходу, как-то сложновато для меня было сразу написать нужный код. Пришлось лезть в справочник. Вспоминать все подзабытое.
 
Пришлось лезть в справочник. Вспоминать все подзабытое.
Я вот уже десятый год программирую на mql и даже не собираюсь запоминать последовательность параметров функций, да и названия функций не все помню. Так-что мне не приходится вспоминать подзабытое. Для этого есть отличная документация по языку. Я без неё не работаю.
 
Я вот уже десятый год программирую на mql и даже не собираюсь запоминать последовательность параметров функций, да и названия функций не все помню. Так-что мне не приходится вспоминать подзабытое. Для этого есть отличная документация по языку. Я без неё не работаю.
Здравствуйте вижу вы тут пишете что есть документация какая-то ,а где ее взять что=бы немного почитать и изучить я просто хочу переучиться с MQL4 на MQL5 или точнее доучить другой язык для переделки своих алгоритмов.
 
Здравствуйте вижу вы тут пишете что есть документация какая-то ,а где ее взять что=бы немного почитать и изучить я просто хочу переучиться с MQL4 на MQL5 или точнее доучить другой язык для переделки своих алгоритмов.

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

На метатрейдере 4 пользовался просто я не знал что тут также, язык программирования MQL4 я более мене знаю так что понятия кое какие есть научусь и MQL5 просто со временем как всегда туговато. Спасибо за отклик.
 
Приветствую! Может кто подскажет. Хочу написать советник 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;
}
 
Приветствую! Может кто подскажет. Хочу написать советник MQL5, Но никак не получается инициализировать пользовательский индикатор MACD который в списке терминала по дефолту. Функция iCustom не срабатывает, в журнале выдает ошибку, что индикатор не удалось инициализировать. Хендл создал. Функцию Copy buffer которую использую покажу, может, что-то неправильно написал

Хендл создать можно двумя способами.
  1. iCustom()
  2. IndicatorCreate()
каким способом ты создал хендл и проверял-ли его значение?
 
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
Последнее редактирование:
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);
 
Спасибо, Большое, все получилось! Через iCustom делаю, потому, что немного модифицировал MACD.
 
Пользовательский индикатор MACD находится в папке Examples.
Следовательно в функцию iCustom должно быть вставлено имя индикатора с указанием подпапки.
Код:
iCustom(_Symbol, PERIOD_CURRENT, "Examples\\MACD", 12, 26, 9);
А лучше, на мой взгляд создать технический индикатор
Код:
iMACD(_Symbol, PERIOD_CURRENT, 12, 26, 9, PRICE_CLOSE);

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

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

Спасибо, учту!