phase_accumulation_macd_2_1_floating_levels.mq5
Похожие материалы по тегам
Сообщите нам, если считаете, что материал размещён без разрешения.
Сообщить о материале
Обращение по товару «phase_accumulation_macd_2_1_floating_levels.mq5» отправится на рассмотрение. Укажите контакт для ответа и опишите причину.
О программе
Индикатор рассчитывает MACD-подобный сигнал с использованием адаптивных экспоненциальных скользящих средних, периоды которых определяются через анализ фазы преобразования Гильберта. Это позволяет автоматически подстраивать чувствительность под текущий цикл цены.
Отображает гистограмму MACD, разделённую на четыре категории в зависимости от направления тренда и знака значения, что позволяет визуально различать бычий и медвежий импульсы в разных квадрантах. Также строятся плавающие уровни на основе процентилей диапазона MACD за заданный период.
Поддерживается выбор различных типов цен, включая стандартные OHLC, медианные, типичные, взвешенные, а также цены Хейкин Аши. Доступна работа на разных таймфреймах с возможностью интерполяции значений между барами.
Настройки программы
| Настройка | Описание |
|---|---|
| TimeFrame | Временной интервал для расчёта индикатора. |
| ForSymbol | Символ инструмента для расчёта индикатора. Пустая строка означает текущий символ графика. |
| price | Тип цены, используемый для расчёта индикатора. |
| filter | Параметр фильтра сглаживания, влияющий на адаптивный период преобразования Гильберта. |
| cyclesFast | Количество циклов для расчёта адаптивного периода быстрой экспоненциальной средней. |
| cyclesSlow | Количество циклов для расчёта адаптивного периода медленной экспоненциальной средней. |
| inverted | Переключатель инверсии направления MACD: при включении медленная EMA вычитается из быстрой. |
| MinMaxPeriod | Количество баров для определения минимума и максимума MACD при расчёте плавающих уровней. |
| LevelUp | Процентиль верхнего уровня от диапазона MACD за период MinMaxPeriod. |
| LevelDown | Процентиль нижнего уровня от диапазона MACD за период MinMaxPeriod. |
| Interpolate | Переключатель интерполяции значений между барами при работе на мультитаймфрейме. |
Поиск по коду файла
#property indicator_separate_window
#property indicator_buffers 8
#property indicator_color1 clrSandyBrown
#property indicator_color2 clrSandyBrown
#property indicator_color3 clrDeepSkyBlue
#property indicator_color4 clrDeepSkyBlue
#property indicator_color5 clrDimGray
#property indicator_color6 clrDeepSkyBlue
#property indicator_color7 clrDimGray
#property indicator_color8 clrSandyBrown
#property indicator_width1 1
#property indicator_width2 2
#property indicator_width3 1
#property indicator_width4 2
#property indicator_width5 2
#property indicator_style6 STYLE_DOT
#property indicator_style7 STYLE_DOT
#property indicator_style8 STYLE_DOT
#property indicator_level1 0
enum enPrices
{
pr_close, // Close
pr_open, // Open
pr_high, // High
pr_low, // Low
pr_median, // Median
pr_typical, // Typical
pr_weighted, // Weighted
pr_average, // Average (high+low+open+close)/4
pr_medianb, // Average median body (open+close)/2
pr_tbiased, // Trend biased price
pr_haclose, // Heiken ashi close
pr_haopen , // Heiken ashi open
pr_hahigh, // Heiken ashi high
pr_halow, // Heiken ashi low
pr_hamedian, // Heiken ashi median
pr_hatypical, // Heiken ashi typical
pr_haweighted, // Heiken ashi weighted
pr_haaverage, // Heiken ashi average
pr_hamedianb, // Heiken ashi median body
pr_hatbiased // Heiken ashi trend biased price
};
extern ENUM_TIMEFRAMES TimeFrame = PERIOD_CURRENT;
extern string ForSymbol = "";
extern enPrices price = pr_median;
extern double filter = 1;
extern double cyclesFast = 0.5;
extern double cyclesSlow = 1.0;
extern bool inverted = false;
extern int MinMaxPeriod = 50;
extern double LevelUp = 90;
extern double LevelDown = 10;
extern bool Interpolate = true;
double macd[];
double macdhUpa[];
double macdhUpb[];
double macdhDna[];
double macdhDnb[];
double levelUp[];
double levelMi[];
double levelDn[];
double emaFast[];
double emaSlow[];
double trend[];
string indicatorFileName;
bool returnBars;
int init()
{
// код доступен только после оплаты
}
int deinit(){return (0);}
int start()
{
// код доступен только после оплаты
}
int i,limit,counted_bars=IndicatorCounted();
if(counted_bars<0) return(-1);
if(counted_bars>0) counted_bars--;
limit = MathMin(Bars-counted_bars,Bars-1);
if (returnBars) { macdhDna[0] = limit+1; return(0); }
if (ForSymbol == Symbol() && TimeFrame == Period())
{
for(i=limit; i>=0; i--)
{
double prc = getPrice(price,Open,Close,High,Low,i);
if (i==Bars-1)
{
emaFast[i] = prc;
emaSlow[i] = prc;
continue;
}
double alphaFast = 2.0/(1.0+iHilbertPhase(prc,filter,cyclesFast,i,0));
double alphaSlow = 2.0/(1.0+iHilbertPhase(prc,filter,cyclesSlow,i,1));
emaFast[i] = emaFast[i+1]+alphaFast*(prc-emaFast[i+1]);
emaSlow[i] = emaSlow[i+1]+alphaSlow*(prc-emaSlow[i+1]);
if (inverted)
macd[i] = emaSlow[i]-emaFast[i];
else macd[i] = emaFast[i]-emaSlow[i];
macdhDna[i] = EMPTY_VALUE;
macdhDnb[i] = EMPTY_VALUE;
macdhUpa[i] = EMPTY_VALUE;
macdhUpb[i] = EMPTY_VALUE;
trend[i] = trend[i+1];
if (macd[i]>macd[i+1]) trend[i] = 1;
if (macd[i]<macd[i+1]) trend[i] = -1;
if (macd[i]>0)
if (trend[i] == 1)
macdhUpb[i] = macd[i];
else macdhUpa[i] = macd[i];
if (macd[i]<0)
if (trend[i] == -1)
macdhDnb[i] = macd[i];
else macdhDna[i] = macd[i];
double valMin = macd[ArrayMinimum(macd,MinMaxPeriod,i)];
double valMax = macd[ArrayMaximum(macd,MinMaxPeriod,i)];
double range = valMax-valMin;
levelUp[i] = valMin+range*LevelUp/100.0;
levelMi[i] = valMin+range*0.5;
levelDn[i] = valMin+range*LevelDown/100.0;
}
return (0);
}
limit = MathMax(limit,MathMin(Bars-1,iCustom(ForSymbol,TimeFrame,indicatorFileName,-99,0,0)*TimeFrame/Period()));
for (i=limit; i>=0; i--)
{
int y = iBarShift(ForSymbol,TimeFrame,Time[i]);
macdhDna[i] = iCustom(ForSymbol,TimeFrame,indicatorFileName,PERIOD_CURRENT,"",price,filter,cyclesFast,cyclesSlow,inverted,MinMaxPeriod,LevelUp,LevelDown,0,y);
macdhDnb[i] = iCustom(ForSymbol,TimeFrame,indicatorFileName,PERIOD_CURRENT,"",price,filter,cyclesFast,cyclesSlow,inverted,MinMaxPeriod,LevelUp,LevelDown,1,y);
macdhUpa[i] = iCustom(ForSymbol,TimeFrame,indicatorFileName,PERIOD_CURRENT,"",price,filter,cyclesFast,cyclesSlow,inverted,MinMaxPeriod,LevelUp,LevelDown,2,y);
macdhUpb[i] = iCustom(ForSymbol,TimeFrame,indicatorFileName,PERIOD_CURRENT,"",price,filter,cyclesFast,cyclesSlow,inverted,MinMaxPeriod,LevelUp,LevelDown,3,y);
macd[i] = iCustom(ForSymbol,TimeFrame,indicatorFileName,PERIOD_CURRENT,"",price,filter,cyclesFast,cyclesSlow,inverted,MinMaxPeriod,LevelUp,LevelDown,4,y);
levelUp[i] = iCustom(ForSymbol,TimeFrame,indicatorFileName,PERIOD_CURRENT,"",price,filter,cyclesFast,cyclesSlow,inverted,MinMaxPeriod,LevelUp,LevelDown,5,y);
levelMi[i] = iCustom(ForSymbol,TimeFrame,Показано первые 50% кода (символов: 9698)
Открыть по тарифу
Купите тариф с пакетом открытий или войдите, если тариф уже есть. Открытый файл останется в вашем кабинете навсегда.
Разовая покупка файла
На этой странице откроется полный исходный код файла вместо ознакомительного фрагмента.
Зачем нужен email? После подтверждения оплаты файл сохранится в кабинете на этот email. Если аккаунта ещё нет, мы создадим его и пришлём ссылку для задания пароля. Если аккаунт уже есть, покупка добавится в него. Укажите адрес, к которому у вас есть доступ.
Чтобы оформить заказ, введите email и перейдите к оплате.