Macd high/low multi time frame version
Сообщите нам, если считаете, что материал размещён без разрешения.
Сообщить о материале
Обращение по товару «macd_highlow_mtf.mq5» отправится на рассмотрение. Укажите контакт для ответа и опишите причину.
О программе
Индикатор «Macd high/low multi time frame version» для MetaTrader 5 рассчитывает MACD-подобное значение на основе экспоненциальных скользящих средних выбранной цены, а затем определяет верхний, нижний и средний уровни за настраиваемый период обзора. Дополнительно вычисляются «ранние» верхний и нижний уровни, задаваемые в процентах от размаха.
В многотаймфреймовом режиме индикатор отображает данные с более высокого таймфрейма на текущем графике. Для этого он внутренне вызывает сам себя через iCustom на выбранном таймфрейме, считывает рассчитанные буферы и при необходимости применяет интерполяцию для сглаживания переходов между барами.
Индикатор отображает семь графиков: верхний и нижний экстремальные уровни, ранние верхний и нижний уровни, средний (нулевой) уровень, значение MACD с цветовой индикацией и сигнальную линию. Цвета меняются в зависимости от соотношения значения с сигнальной линией и границами уровней.
Расчёт выполняется в отдельном окне. В режиме текущего таймфрейма все вычисления производятся непосредственно по ценовым данным графика; при переходе на другой таймфрейм используется внутренний вызов и копирование буферов.
Настройки программы
| Настройка | Описание |
|---|---|
| inpTimeFrame | Таймфрейм, с которого берутся данные для расчёта индикатора. Доступны варианты от 1 минуты до месячного таймфрейма, а также ссылки на более высокие таймфреймы. |
| inpFastPeriod | Период экспоненциальной скользящей средней для быстрого расчёта MACD-значения (первая EMA). |
| inpSlowPeriod | Период экспоненциальной скользящей средней для медленного расчёта MACD-значения (вторая EMA). |
| inpSignalPeriod | Период экспоненциальной скользящей средней для расчёта сигнальной линии на основе MACD-значений. |
| inpLookBackPeriod | Количество баров, используемых для определения максимального и минимального значений MACD при расчёте верхнего, нижнего и среднего уровней. |
| inpEarlyLevel | Процент, определяющий положение ранних верхнего и нижнего уровней относительно среднего уровня в процентах от размаха между максимальным и минимальным значениями за период обзора. |
| inpPrice | Тип цены, используемой для расчёта: Close, Open, High, Low, Median, Typical или Weighted. |
| inpInterpolate | Переключатель интерполяции значений при отображении данных с более высокого таймфрейма на текущем графике. При включении значения плавно пересчитываются между барами таймфрейма. |
Поиск по коду файла
???/*
*/
#property description "Macd high/low multi time frame version"
#property indicator_separate_window
#property indicator_height 120
#property indicator_buffers 10
#property indicator_plots 7
#property indicator_label1 "Level up"
#property indicator_type1 DRAW_LINE
#property indicator_color1 C'0,144,0' //clrDodgerBlue
#property indicator_style1 STYLE_DOT
#property indicator_label2 "Early level up"
#property indicator_type2 DRAW_LINE
#property indicator_color2 CLR_NONE //clrDodgerBlue
#property indicator_style2 STYLE_DOT
#property indicator_label3 "Zero level"
#property indicator_type3 DRAW_LINE
#property indicator_color3 CLR_NONE //clrDarkGray
#property indicator_style3 STYLE_DOT
#property indicator_label4 "Early level down"
#property indicator_type4 DRAW_LINE
#property indicator_color4 CLR_NONE //clrCrimson
#property indicator_style4 STYLE_DOT
#property indicator_label5 "Level down"
#property indicator_type5 DRAW_LINE
#property indicator_color5 C'144,0,0' //clrCrimson
#property indicator_style5 STYLE_DOT
#property indicator_label6 "Macd value"
#property indicator_type6 DRAW_COLOR_ARROW //DRAW_COLOR_LINE
#property indicator_color6 clrDimGray,C'0,255,0',C'0,123,0',C'123,0,0',C'255,0,0' //clrDarkGray,clrDodgerBlue,clrDeepSkyBlue,clrCrimson,clrRed
#property indicator_width6 2
#property indicator_label7 "Macd signal"
#property indicator_type7 DRAW_NONE //DRAW_COLOR_LINE
#property indicator_color7 clrDimGray,C'0,255,0',C'0,123,0',C'123,0,0',C'255,0,0' //clrDarkGray,clrDodgerBlue,clrDeepSkyBlue,clrCrimson,clrRed
#property indicator_width7 1
enum enTimeFrames
{
tf_cu = PERIOD_CURRENT, // Current time frame
tf_m1 = PERIOD_M1, // 1 minute
tf_m2 = PERIOD_M2, // 2 minutes
tf_m3 = PERIOD_M3, // 3 minutes
tf_m4 = PERIOD_M4, // 4 minutes
tf_m5 = PERIOD_M5, // 5 minutes
tf_m6 = PERIOD_M6, // 6 minutes
tf_m10 = PERIOD_M10, // 10 minutes
tf_m12 = PERIOD_M12, // 12 minutes
tf_m15 = PERIOD_M15, // 15 minutes
tf_m20 = PERIOD_M20, // 20 minutes
tf_m30 = PERIOD_M30, // 30 minutes
tf_h1 = PERIOD_H1, // 1 hour
tf_h2 = PERIOD_H2, // 2 hours
tf_h3 = PERIOD_H3, // 3 hours
tf_h4 = PERIOD_H4, // 4 hours
tf_h6 = PERIOD_H6, // 6 hours
tf_h8 = PERIOD_H8, // 8 hours
tf_h12 = PERIOD_H12, // 12 hours
tf_d1 = PERIOD_D1, // daily
tf_w1 = PERIOD_W1, // weekly
tf_mn = PERIOD_MN1, // monthly
tf_cp1 = -1, // Next higher time frame
tf_cp2 = -2, // Second higher time frame
tf_cp3 = -3 // Third higher time frame
};
input enTimeFrames inpTimeFrame = tf_m15; // Time frame
input int inpFastPeriod = 19; // Fast DEMA period
input int inpSlowPeriod = 39; // Slow DEMA period
input int inpSignalPeriod = 9; // Signal period
input int inpLookBackPeriod = 50; // Lookback period
input double inpEarlyLevel = 25; // Early levels %
input ENUM_APPLIED_PRICE inpPrice = PRICE_CLOSE; // Price
input bool inpInterpolate = true; // Interpolate in multi time frame mode?
double val[],valc[],signal[],signalc[],levelm[],levelu1[],levelu2[],leveld1[],leveld2[],count[];
int _mtfHandle=INVALID_HANDLE; ENUM_TIMEFRAMES timeFrame;
#define _mtfCall iCustom(_Symbol,timeFrame,getIndicatorName(),0,inpFastPeriod,inpSlowPeriod,inpSignalPeriod,inpLookBackPeriod,inpEarlyLevel,inpPrice)
int OnInit()
{
// код доступен только после оплаты
}
void OnDeinit(const int reason)
{
}
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[])
{
// код доступен только после оплаты
}
if(Bars(_Symbol,_Period)<rates_total) return(prev_calculated);
if(timeFrame!=_Period)
{
double result[];
if(BarsCalculated(_mtfHandle)<0) return(prev_calculated);
if(!timeFrameCheck((ENUM_TIMEFRAMES)timeFrame,time)) return(prev_calculated);
if(CopyBuffer(_mtfHandle,9,0,1,result)==-1) return(prev_calculated);
#define _mtfRatio PeriodSeconds((ENUM_TIMEFRAMES)timeFrame)/PeriodSeconds(_Period)
int k,n,i=MathMin(MathMax(prev_calculated-1,0),MathMax(rates_total-(int)result[0]*_mtfRatio-1,0)),_prevMark=0,_seconds=PeriodSeconds(timeFrame);
for(; i<rates_total && !_StopFlag; i++)
{
int _currMark = int(time[i]/_seconds);
if (_currMark!=_prevMark)
{Показано первые 50% кода (символов: 9107)
Открыть по тарифу
Купите тариф с пакетом открытий или войдите, если тариф уже есть. Открытый файл останется в вашем кабинете навсегда.
Разовая покупка файла
На этой странице откроется полный исходный код файла вместо ознакомительного фрагмента.
Зачем нужен email? После подтверждения оплаты файл сохранится в кабинете на этот email. Если аккаунта ещё нет, мы создадим его и пришлём ссылку для задания пароля. Если аккаунт уже есть, покупка добавится в него. Укажите адрес, к которому у вас есть доступ.
Чтобы оформить заказ, введите email и перейдите к оплате.