Допустим, есть 2 индикатора, у первого 4 буфера, у второго 2. Кидаю их на график, открываю окно данных (CTRL+D), в списке 6 буферов от 0 до 5. Как мне из этого списка на MQL прочитать значение, допустим, 5 буфера? Через iCustom по нужному индикатору не совсем удобно. Удобнее из этого списка. Знаю, что так делают, но как?
Изучаю примеры в справке, там создание объекта постоянно делается с проверкой:
//--- сбросим значение ошибки ResetLastError();
//--- создадим кнопку if(!ObjectCreate(chart_ID,name,OBJ_BUTTON,sub_window,0,0))
{
Print(__FUNCTION__,
": не удалось создать кнопку! Код ошибки = ",GetLastError());
return(false);
}
Зачем это делается для объектов? Какова вероятность того что объект не удастся создать?
В целом интересует где можно почитать о правилах хорошего тона в программировании на mql, чтобы знать в каких кустах лежат грабли, посоветуйте.
Изучаю примеры в справке, там создание объекта постоянно делается с проверкой:
Зачем это делается для объектов? Какова вероятность того что объект не удастся создать?
В целом интересует где можно почитать о правилах хорошего тона в программировании на mql, чтобы знать в каких кустах лежат грабли, посоветуйте.
Например, объект с таким именем уже есть.
А правила хорошего тона - они для любого языка одни. Получаете данные - проверьте что получили, создаёт объект, проверьте что создали, и создали-ли... И т.д.
Как заполнить значениями 4ёх мерный массив такого формата int Mas[1][2][2][2], как присвоить значение каждой ячейке данного массива, имеется в виду такая запись например есть 2умернй массив int Arr[1][2]={3,4};, как заполнится 4ёхмерный?
Artyom Trishkin: Например, объект с таким именем уже есть.
А правила хорошего тона - они для любого языка одни. Получаете данные - проверьте что получили, создаёт объект, проверьте что создали, и создали-ли... И т.д.
Когда я создаю кнопку внутри функции, то получаю ругань на
return(false);
'return' - 'void' function returns a valuebreakeven_fish.mq511216
Seric29: Как заполнить значениями 4ёх мерный массив такого формата int Mas[1][2][2][2], как присвоить значение каждой ячейке данного массива, имеется в виду такая запись например есть 2умернй массив int Arr[1][2]={3,4};, как заполнится 4ёхмерный?
многомерные массивы обычно в циклах заполняют нужными значениями - так сложнее ошибиться, для четырехмерного массива что то такое должно быть, но могу ошибиться:
Товарищи - посмотрите индикатор на правильность. Там одна формула Значение = (Open[0]-SMA(P,n))/SMA(P,n))*100%.
Набрасываю на график - все считает и рисует. Начинаю проверять на каком либо баре на калькуляторе его значение - не совпадает с нарисованным...
Вот пример, считаю на калькуляторе Опен 1,0178, МА(13) 1,0182 по формуле ((1,0178-1,0182)/1,0182) * 100% - в итоге на калькуляторе -0,0393. А на графике МТ4 -0,0929. Ошибка в коде или калькулятор не правильно там какие-нибудь значения считает? Просьба помочь. Индикатор прилагаю.
#property indicator_separate_window#property indicator_buffers1// Количество буферов#property indicator_color1 Blue // Цвет линии 0 буфера#property indicator_level11#property indicator_level2 -1//--------------------------------------------------------------- 2 --//---- indicator parameters externint History =5000; // Колич.баров в расчётной историиexternint Period_SMA =13;
double
Line_0[]; // Инд. массив ravi //--------------------------------------------------------------- 4 --int init() // Специальная функция init()
{
SetIndexBuffer(0,Line_0); // Назначение массива буферу
SetIndexStyle (0,DRAW_LINE,STYLE_SOLID,2);// Стиль линии
IndicatorShortName("KRI");
//--------------------------------------------------------------- 5 --return(0); // Выход из спец. функции init()
}
//--------------------------------------------------------------- 8 --int start() // Специальная функция start()
{
//--------------------------------------------------------------- 9 --double
SMA; // МА для расчета значений индикатора // формyла (PRICE-SMA/SMA)*100); int
i, // Индекс бара
n, // Формальн. параметр(индекс бара)
Counted_bars; // Количество просчитанных баров //-------------------------------------------------------------- 10 --
Counted_bars=IndicatorCounted(); // Количество просчитанных баров
i=Bars-Counted_bars-1; // Индекс первого непосчитанногоif (i>History-1) // Если много баров то ..
i=History-1; // ..рассчитывать заданное колич.//-------------------------------------------------------------- 11 --while(i>=0) // Цикл по непосчитанным барам
{
//-------------------------------------------------------- 12 --
SMA=iMA(NULL,0,Period_SMA,0,MODE_SMA,PRICE_CLOSE,i); // Значение SМА
Line_0[i] =0;
if (SMA>0) Line_0[i] = ((Open[0]-SMA)/SMA)*100; // Индик. массив линии KPI//-------------------------------------------------------- 13 --
i--; // Расчёт индекса следующего бара//-------------------------------------------------------- 14 --
}
return(0); // Выход из спец. ф-ии start()
}
//-------------------------------------------------------------- 15 --
Для авторизации и пользования сайтом MQL5.com необходимо разрешить использование файлов Сookie.
Пожалуйста, включите в вашем браузере данную настройку, иначе вы не сможете авторизоваться.
Вы вошли в аккаунт. Двухфакторная аутентификация отключена. Настройте её заново и отсканируйте новый QR-код или продолжите с отключённой двухфакторной аутентификацией.
Здравствуйте.
Допустим, есть 2 индикатора, у первого 4 буфера, у второго 2. Кидаю их на график, открываю окно данных (CTRL+D), в списке 6 буферов от 0 до 5. Как мне из этого списка на MQL прочитать значение, допустим, 5 буфера? Через iCustom по нужному индикатору не совсем удобно. Удобнее из этого списка. Знаю, что так делают, но как?
Изучаю примеры в справке, там создание объекта постоянно делается с проверкой:
Зачем это делается для объектов? Какова вероятность того что объект не удастся создать?
В целом интересует где можно почитать о правилах хорошего тона в программировании на mql, чтобы знать в каких кустах лежат грабли, посоветуйте.
Изучаю примеры в справке, там создание объекта постоянно делается с проверкой:
Зачем это делается для объектов? Какова вероятность того что объект не удастся создать?
В целом интересует где можно почитать о правилах хорошего тона в программировании на mql, чтобы знать в каких кустах лежат грабли, посоветуйте.
Например, объект с таким именем уже есть.
Когда я создаю кнопку внутри функции, то получаю ругань на
'return' - 'void' function returns a value breakeven_fish.mq5 112 16
Как в таком случае быть?
Как заполнить значениями 4ёх мерный массив такого формата int Mas[1][2][2][2], как присвоить значение каждой ячейке данного массива, имеется в виду такая запись например есть 2умернй массив int Arr[1][2]={3,4};, как заполнится 4ёхмерный?
многомерные массивы обычно в циклах заполняют нужными значениями - так сложнее ошибиться, для четырехмерного массива что то такое должно быть, но могу ошибиться:
Когда я создаю кнопку внутри функции, то получаю ругань на
'return' - 'void' function returns a value breakeven_fish.mq5 112 16
Как в таком случае быть?
начать читать справку https://www.mql5.com/ru/docs/basis/function
это основы языка, если справки мало, тогда любую книгу по С++, в первой главе должно быть объяснено что такое функции
Когда я создаю кнопку внутри функции, то получаю ругань на
'return' - 'void' function returns a value breakeven_fish.mq5 112 16
Как в таком случае быть?
Товарищи - посмотрите индикатор на правильность. Там одна формула Значение = (Open[0]-SMA(P,n))/SMA(P,n))*100%.
Набрасываю на график - все считает и рисует. Начинаю проверять на каком либо баре на калькуляторе его значение - не совпадает с нарисованным...
Вот пример, считаю на калькуляторе Опен 1,0178, МА(13) 1,0182 по формуле ((1,0178-1,0182)/1,0182) * 100% - в итоге на калькуляторе -0,0393. А на графике МТ4 -0,0929. Ошибка в коде или калькулятор не правильно там какие-нибудь значения считает? Просьба помочь. Индикатор прилагаю.
Если делаете возврат из функции значения типа bool, то и тип функции не нужно делать void, а догадайтесь какой.
А если нужно из функции данные возвращать?
Можно ли перебирать позции только по заданному символу не используя каждый раз PositionsTotal?
Пока единственное что я придумал это записывать тикеты в массив и работать с ними отдельно, но может быть есть более простой вариант?
А если нужно из функции данные возвращать?
Можно ли перебирать позции только по заданному символу не используя каждый раз PositionsTotal?
Пока единственное что я придумал это записывать тикеты в массив и работать с ними отдельно, но может быть есть более простой вариант?
Не понятно что нужно в итоге - какие-то разрозненные мысли.