Top.Mail.Ru
Пишем себе индикатор на языке MQL4 с помощью конструктора. | ForexOlReal

Привет!

Сайт по торговле на рынке FOREX и инвестициям. Полезен как для новичков,так и для тех, кто уже торгует. От трейдера и разработчика продуктов на языке MQL для MetaTrader и могу рассказать много полезного и практического.

Курс рубля на межбанковском рынке

Курсы валют

Покупка Продажа
USD/RUB 0.00 0.00
EUR/RUB 0.00 0.00
Данные на


Форекс-форумы с оплатой постов

Зарегистрироваться на Форуме myForex.ru

Forex Club - один из ведущих брокеров

Графики валютных пар

Здесь можно увидеть курс доллара(USD) к рублю(RUB) и др. на рынке Forex(Форекс) и фондовых биржах

<a href="https://www.mt5.com/ru/">Форекс портал</a>

Техническое резюме

Техническое резюме - Виджет от Investing.com Россия.

Никогда не пробовали написать себе индикатор на языке MQL4 для торговой платформы MetaTrader 4. Нет? А может попробуем?

“Я не знаю языка” –  скажете вы. И об этом подумали. Фирма MetaQuotes, когда делала платформу MetaTrader 4, подумала и о разработчиках на этом языке. Сделала в комплекте компилятор этого языка. И называется он MetaEditor 4. А вот в этой программулине есть конструктор индикаторов и есть возможность сконструировать себе индикатор самому, с помощью конструктора индикаторов и мастера, который проведет по всем пунктам конструирования индикатора.

Итак, попробуем.

Запускаем компилятор. Пуск – MetaTrader – MetaEditor.

Нажимаем кнопку “Создать”.

Кнопка "Создать" в компилляторе

Открывается окно.

Окно мастера Создать

Нажимаем “Далее”.

Окно настройки создания в MetaEditor 4

Нажимаем “Далее”.

Окно подключаемых процедур

Нажимаем “Далее”. Индикатор линия 1,2,3 и 4.

Окно настроек вывода на экран у индикатора

Нажимаем “Готово” и получаем в Редакторе кода в компиляторе такой текст. Это не готовый индикатор. Это его оболочка.

Исходный вариант:

//+——————————————————————+
//| My-Proba.mq4 |
//| Copyright 2019, My Podpis |
//| https://My-site.ru |
//+——————————————————————+
#property copyright “Copyright 2019, My Podpis”
#property link “https://My-site.ru”
#property version “1.00”
#property strict
#property indicator_chart_window //индикатор будет в главном окне
#property indicator_buffers 4 //количество линий вывода на экран
#property indicator_plots 4 //отрисовываться будут все 4
//— plot MALine1
#property indicator_label1 “MALine1” //метка, название линии 1
#property indicator_type1 DRAW_LINE //в виде линии
#property indicator_color1 clrOrange //цветом оранжевым
#property indicator_style1 STYLE_SOLID //сплошная линия
#property indicator_width1 1 //толшиной 1
//— plot Bol1
#property indicator_label2 “Bol1” //метка, название линии 2
#property indicator_type2 DRAW_LINE //в виде линии
#property indicator_color2 clrTeal //цвет линии
#property indicator_style2 STYLE_SOLID //сплошная линия
#property indicator_width2 1 //толшиной 1
//— plot Bol2
#property indicator_label3 “Bol2” //метка, название линии 3
#property indicator_type3 DRAW_LINE //в виде линии
#property indicator_color3 clrLimeGreen //цвет линии
#property indicator_style3 STYLE_SOLID //сплошная линия
#property indicator_width3 1 //толшиной 1
//— plot Bol3
#property indicator_label4 “Bol3” //метка, название линии 4
#property indicator_type4 DRAW_LINE //в виде линии
#property indicator_color4 clrTeal //цвет линии
#property indicator_style4 STYLE_SOLID //сплошная линия
#property indicator_width4 1 //толшиной 1
//— input parameters
input int Input1; //входной параметр 1
input int Input2; //входной параметр 2
//— indicator buffers
double MALine1Buffer[]; //массив-таймсерия для средней
double Bol1Buffer[]; //массив-таймсерия для Bollinger Bands1
double Bol2Buffer[]; //массив-таймсерия для Bollinger Bands2
double Bol3Buffer[]; //массив-таймсерия для Bollinger Bands3
//+——————————————————————+
//| Custom indicator initialization function |
//+——————————————————————+
int OnInit() //обязательная процедура инициализации индикатора
{
//— indicator buffers mapping
SetIndexBuffer(0,MALine1Buffer); //присоединение линий к массиву1
SetIndexBuffer(1,Bol1Buffer); //присоединение линий к массиву2
SetIndexBuffer(2,Bol2Buffer); //присоединение линий к массиву3
SetIndexBuffer(3,Bol3Buffer); //присоединение линий к массиву4

//—
return(INIT_SUCCEEDED);
}
//+——————————————————————+
//| Custom indicator iteration function |
//+——————————————————————+
int OnCalculate(const int rates_total, //
const int prev_calculated,
const datetime &time[],
const double &open[],
const double &high[],
const double &low[],
const double &close[],
const long &tick_volume[],
const long &volume[],
const int &spread[])
{
//—

//— return value of prev_calculated for next call
return(rates_total);
}
//+——————————————————————+

 

Теперь, нам необходимо воспользоваться переменными и массивами, которые были заведены мастером и определить какой, к примеру, из стандартных индикаторов будет использоваться внутри. Мы взяли стандартные Bollinger Bands и индикатор средней MA.

Для этого мы ввели два периода в исходных настройках. Первый период Input1 – это для Bollinger Bands. Второй –  Input2 – это для индикатора средней. Средняя MA будет рисоваться не на основе данных курса, а на основе серединой линии индикатора Bollinger Bands. Усреднять ее так скажем.

Не буду комментировать: как, где, что вставлял и правил. Приведу просто листинг результата. Можно посмотреть, как изменился исходный вариант. Там каждому действию есть комментарий.

//+——————————————————————+
//| My-Proba.mq4 |
//| Copyright 2019, My Podpis |
//| https://My-site.ru |
//+——————————————————————+
#property copyright “Copyright 2019, My Podpis”
#property link “https://My-site.ru”
#property version “1.00”
#property strict
#property indicator_chart_window //индикатор будет в главном окне
#property indicator_buffers 4 //количество линий вывода на экран
#property indicator_plots 4 //отрисовываться будут все 4
//— plot MALine1
#property indicator_label1 “MALine1” //метка, название линии 1
#property indicator_type1 DRAW_LINE //в виде линии
#property indicator_color1 clrOrange //цветом оранжевым
#property indicator_style1 STYLE_SOLID //сплошная линия
#property indicator_width1 2 //толщиной 2
//— plot Bol1
#property indicator_label2 “Bol1” //метка, название линии 2
#property indicator_type2 DRAW_LINE //в виде линии
#property indicator_color2 clrLimeGreen //цвет линии
#property indicator_style2 STYLE_SOLID //сплошная линия
#property indicator_width2 2 //толшиной 2
//— plot Bol2
#property indicator_label3 “Bol2” //метка, название линии 3
#property indicator_type3 DRAW_LINE //в виде линии
#property indicator_color3 clrTeal //цвет линии
#property indicator_style3 STYLE_SOLID //сплошная линия
#property indicator_width3 1 //толшиной 1
//— plot Bol3
#property indicator_label4 “Bol3” //метка, название линии 4
#property indicator_type4 DRAW_LINE //в виде линии
#property indicator_color4 clrTeal //цвет линии
#property indicator_style4 STYLE_SOLID //сплошная линия
#property indicator_width4 1 //толшиной 1
//— input parameters
input int Input1 = 14; //Период индикатора Bollinger Bands
input int Input2 = 5; //Период индикатора MA
//— indicator buffers
double MALine1Buffer[]; //массив-таймсерия для средней
double Bol1Buffer[]; //массив-таймсерия для Bollinger Bands1 средняя
double Bol2Buffer[]; //массив-таймсерия для Bollinger Bands2 вехняя
double Bol3Buffer[]; //массив-таймсерия для Bollinger Bands3 нижняя
int i, pos, limit, counted_bars; //заводим, объявляем рабочие переменные

 

//+——————————————————————+
//| Custom indicator initialization function |
//+——————————————————————+
int OnInit() //обязательная процедура инициализации индикатора
{
//— indicator buffers mapping
SetIndexBuffer(0,MALine1Buffer); //присоединение линний к массиву1
SetIndexBuffer(1,Bol1Buffer); //присоединение линний к массиву2
SetIndexBuffer(2,Bol2Buffer); //присоединение линний к массиву3
SetIndexBuffer(3,Bol3Buffer); //присоединение линний к массиву4

// Наши добавки —————————————————————–
IndicatorDigits(Digits);
//

//— проверяем входные параметры, вдруг они =0 или меньше нуля
if(Input1<=0 || Input2<=0)
{
Print(“Не правильные входные параметры. Проверьте Input1 = “,Input1, ” Input2 = “, Input2);
return(INIT_FAILED);
}
//—

//— какой из входных периодов больше Input1 или Input2, с того и начать рисовать индикатор

if(Input1 > Input2)

{
SetIndexDrawBegin(0,Input1+Input2);
SetIndexDrawBegin(1,Input1);
SetIndexDrawBegin(2,Input1);
SetIndexDrawBegin(3,Input1);
}
else
{
SetIndexDrawBegin(0,Input2+Input1);
SetIndexDrawBegin(1,Input2);
SetIndexDrawBegin(2,Input2);
SetIndexDrawBegin(3,Input2);
}
//—

return(INIT_SUCCEEDED);
}

 

 

 

int start()
{

//— если неправильные входные данные – то закончить работу индикатора

if( Input1<1 || Input2<1)
return(0);

//—

//—- посчитаем, сколько неизмененных баров
counted_bars=IndicatorCounted();
//—- проверим, есть ли бары
if(counted_bars<0) return(-1);
if(counted_bars>0) counted_bars–;

limit=Bars-counted_bars; //Bars – всего баров доступных

//—- очищаем массивы
for(i=0; i<limit-1; i++)

{
Bol1Buffer[i]=0;
Bol1Buffer[i]=0;
Bol1Buffer[i]=0;
MALine1Buffer[i]=0;

}

for( i = 0; i <=limit-1; i++)
{
//— рассчитываем линию Bol1
Bol1Buffer[i] = iBands(NULL,0, Input1,2,0,PRICE_CLOSE,0,i) ;
//— рассчитываем линию Bol2
Bol2Buffer[i] = iBands(NULL,0, Input1,2,0,PRICE_CLOSE,1,i) ;
//— рассчитываем линию Bol3
Bol3Buffer[i] = iBands(NULL,0, Input1,2,0,PRICE_CLOSE,2,i) ;

//—
}
for( i = 0; i <=limit-1; i++)
{
//— рассчитываем линию MA для средней линии Bollinger Bands
MALine1Buffer[i] = iMAOnArray(Bol1Buffer,0,Input2,0,MODE_SMA,i) ;

}

return(0);
}
//+——————————————————————+

Нажмем на кнопку “Компилировать”. Ошибок нет. Готово.

Посмотрим на сделанный индикатор.

Окошко настройки индикатора Общие

Это наши…

#property copyright “Copyright 2019, My Podpis”
#property link “https://My-site.ru”
#property version “1.00”

Окно параметров.

Окно настрой ки параметров индикатора

Мы писали…

//— input parameters
input int Input1 = 14; //Период индикатора Bollinger Bands
input int Input2 = 5; //Период индикатора MA

Значения 14 и 5 я выставил в качестве исходных. Добавил к первому  варианту.

И, собственно, вот как выглядит сам индикатор на графике.

Индикатор в окне графика

Просто, сейчас нужно разобраться с окончательным листингом программы тщательнее и не останется никаких вопросов.

 

Карта сайта

RoboForex – один из быстрых брокеров!

НОВОСТИ

ИКС и Статистика

Каталог HotLog

Поделиться

Rating Mail.ru & ForexMagazine

Важно!Торговля на валютном рынке Forex сопряжена с финансовыми рисками. Данный сайт не предоставляет услуги торговли на финансовых рынках, носит исключительно информационный характер и не несет ответственности за последствия принимаемых вами торговых решений, либо работу программного обеспечения. Убедитесь, что вы осознаете риски, с которыми сопряжена торговля с использованием кредитного плеча, и что вы имеете достаточный уровень подготовки.

Important! Trading on the Forex currency market involves financial risks. This site does not provide trading services in financial markets and is for informational purposes only, so it is not responsible for the consequences of your trading decisions, or the operation of the software. Make sure that you are aware of the risks involved in trading with leverage, and that you have a sufficient level of training.

Copyright © Oleg Papkoff, 2018-2020. All Rights Reserved.

RotaPost - Эффективная реклама в блогах Catalog.ru.net - Каталог сайтов Каталог webplus.info Добавить сайт Мировые поисковики и поисковые системы Добавить сайт в интернете для рекламы