Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
//| mac.mq5 |
//| Copyright 2016, MetaQuotes Software Corp. |
//| https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2016, MetaQuotes Software Corp."
#property link "https://www.mql5.com"
#property version "1.00"
#property indicator_chart_window
#property indicator_buffers 2
#property indicator_plots 2
//--- plot UP
#property indicator_label1 "UP"
#property indicator_type1 DRAW_ARROW
#property indicator_color1 clrRed
#property indicator_style1 STYLE_SOLID
#property indicator_width1 2
//--- plot DW
#property indicator_label2 "DW"
#property indicator_type2 DRAW_ARROW
#property indicator_color2 clrGreen
#property indicator_style2 STYLE_SOLID
#property indicator_width2 2
//--- indicator buffers
double UPBuffer[];
double DWBuffer[];
double OL_Buffer[];
double SP_Buffer[];
int Handle;
//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
//--- indicator buffers mapping
SetIndexBuffer(0,UPBuffer,INDICATOR_DATA);
SetIndexBuffer(1,DWBuffer,INDICATOR_DATA);
SetIndexBuffer(2,OL_Buffer,INDICATOR_CALCULATIONS);
Handle=iMACD(_Symbol,PERIOD_CURRENT,12,26,9,PRICE_CLOSE);
//---
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Custom indicator iteration function |
//+------------------------------------------------------------------+
int OnCalculate (const int rates_total, // размер массива price[];
const int prev_calculated,// количество доступных баров ;
// на предыдущем вызове;
const int begin,// с какого индекса в массиве
// price[] начинаются достоверные данные;
const double &price[]) // массив, по которому и будет считаться индикатор;
{
//---
static bool error=true;
int start;
if(prev_calculated==0) // Первое выполнение функции OnCalculate() после запуска индикатора
{
error=true; // Установим значение true, что бы индикатор был рассчитан для всех баров
}
if(error) // Значение переменной error=true, значит это первое выполнение функции после
// запуска индикатора, или на предыдущем запуске была ошибка копирования данных
{
start=begin+1;
error=false;
}
else
{
start=prev_calculated-1;
}
if(CopyBuffer(Handle,0,0,rates_total-start,OL_Buffer)==-1) // Копирования данных главной лини индикатора
{
error=true; // Не удалось скопировать данные, устанавливаем переменной error значение true, чтобы полностью пересчитать
// индикатор при следующем вызове функции OnCalculate()
return(0); // Завершаем работу функции
}
for(int i=start;i<rates_total;i++)
{
Print(DoubleToString(OL_Buffer[i]));
}
//--- return value of prev_calculated for next call
return(rates_total);
}
//+------------------------------------------------------------------+