CFB Channel MTF
Сообщите нам, если считаете, что материал размещён без разрешения.
Сообщить о материале
Обращение по товару «cfb channel mtf.mq5» отправится на рассмотрение. Укажите контакт для ответа и опишите причину.
О программе
Индикатор CFB Channel MTF рассчитывает аналитические каналы на основе ценовых данных и отображает их на графике. Поддерживает работу на нескольких таймфреймах, что позволяет анализировать данные старших периодов на текущем графике.
Индикатор формирует три буфера: верхнюю границу канала, среднюю линию и нижнюю границу. Расчётные значения проходят сглаживание и нормализацию для построения канала.
Имеются специальные режимы работы — расчёт числового значения и возврат количества баров, — которые используются для межтаймфреймовых вычислений. При необходимости значения интерполируются на текущий таймфрейм.
Настройки программы
| Настройка | Описание |
|---|---|
| TimeFrame | Таймфрейм — Выбранный таймфрейм для расчёта индикатора. Может быть задан как название периода (например, H1, D1) или специальными значениями для режимов расчёта. |
| ShortLimit | Краткий лимит — Нижняя граница диапазона ширины канала, используемая для масштабирования отображения. |
| LongLimit | Длинный лимит — Верхняя граница диапазона ширины канала, используемая для масштабирования отображения. |
| CfbPrice | Тип цены CFB — Тип ценовых данных, используемых для расчёта основного значения индикатора. |
| CfbDepth | Глубина CFB — Глубина расчёта основного показателя, определяющая объём анализируемой истории. |
| CfbSmooth | Сглаживание CFB — Параметр сглаживания, влияющий на стабильность расчётных значений. |
| CfbNormLength | Длина нормализации CFB — Длина нормализационного периода, используемая для определения диапазона канала. |
| Interpolate | Интерполяция — Включает или отключает интерполяцию значений при работе на межтаймфреймах. |
Поиск по коду файла
#property indicator_chart_window
#property indicator_buffers 3
#property indicator_color1 PaleVioletRed
#property indicator_color2 Gold
#property indicator_color3 DeepSkyBlue
#property indicator_style1 STYLE_DOT
#property indicator_style2 STYLE_DASH
#property indicator_style3 STYLE_DOT
extern string TimeFrame = "current time frame";
extern double ShortLimit = 5;
extern double LongLimit = 50;
extern int CfbPrice = 8;
extern int CfbDepth = 5;
extern int CfbSmooth = 8;
extern int CfbNormLength = 50;
extern bool Interpolate = true;
double buffer1[];
double buffer2[];
double buffer3[];
double cfb[];
string indicatorFileName;
bool calculateValue;
bool returnBars;
int timeFrame;
int init()
{
// код доступен только после оплаты
}
int deinit() { return(0); }
int start()
{
// код доступен только после оплаты
}
int counted_bars=IndicatorCounted();
int i,limit;
if(counted_bars<0) return(-1);
if(counted_bars>0) counted_bars--;
limit = MathMin(Bars-counted_bars,Bars-1);
if (returnBars) { buffer1[0] = limit+1; return(0); }
if (calculateValue || timeFrame==Period())
{
for (i=limit; i>=0; i--)
{
cfb[i] = iCfb(getPrice(CfbPrice,i),CfbDepth,CfbSmooth,i);
double max = cfb[ArrayMaximum(cfb,CfbNormLength,i)];
double min = cfb[ArrayMinimum(cfb,CfbNormLength,i)];
double denominator = max-min;
if (denominator> 0)
double ratio = (cfb[i]-min)/denominator;
else ratio = 0.5;
double depth = MathCeil(ShortLimit+ratio*(LongLimit-ShortLimit));
if (High[i] > buffer1[i+1])
buffer1[i] = High[i];
else buffer1[i] = (High[iHighest(NULL,0,MODE_HIGH,depth,i)] + buffer1[i+1])/2.0;
if (Low[i] < buffer3[i+1])
buffer3[i] = Low[i];
else buffer3[i] = (Low[iLowest(NULL,0,MODE_LOW,depth,i)] + buffer3[i+1])/2.0;
buffer2[i] = (buffer1[i]+buffer3[i])/2.0;
}
return(0);
}
limit = MathMax(limit,MathMin(Bars-1,iCustom(NULL,timeFrame,indicatorFileName,"returnBars",0,0)*timeFrame/Period()));
for (i=limit; i>=0; i--)
{
int y = iBarShift(NULL,timeFrame,Time[i]);
buffer1[i] = iCustom(NULL,timeFrame,indicatorFileName,"calculateValue",ShortLimit,LongLimit,CfbPrice,CfbDepth,CfbSmooth,CfbNormLength,0,y);
buffer2[i] = iCustom(NULL,timeFrame,indicatorFileName,"calculateValue",ShortLimit,LongLimit,CfbPrice,CfbDepth,CfbSmooth,CfbNormLength,1,y);
buffer3[i] = iCustom(NULL,timeFrame,indicatorFileName,"calculateValue",ShortLimit,LongLimit,CfbPrice,CfbDepth,CfbSmooth,CfbNormLength,2,y);
if (timeFrame <= Period() || y==iBarShift(NULL,timeFrame,Time[i-1])) continue;
if (!Interpolate) continue;
datetime time = iTime(NULL,timeFrame,y);
for(int n = 1; i+n < Bars && Time[i+n] >= time; n++) continue;
for(int k = 1; k < n; k++)
{
buffer1[i+k] = buffer1[i] + (buffer1[i+n] - buffer1[i]) * k/n;
buffer2[i+k] = buffer2[i] + (buffer2[i+n] - buffer2[i]) * k/n;
Показано первые 50% кода (символов: 5468)
Открыть по тарифу
Купите тариф с пакетом открытий или войдите, если тариф уже есть. Открытый файл останется в вашем кабинете навсегда.
Разовая покупка файла
На этой странице откроется полный исходный код файла вместо ознакомительного фрагмента.
Зачем нужен email? После подтверждения оплаты файл сохранится в кабинете на этот email. Если аккаунта ещё нет, мы создадим его и пришлём ссылку для задания пароля. Если аккаунт уже есть, покупка добавится в него. Укажите адрес, к которому у вас есть доступ.
Чтобы оформить заказ, введите email и перейдите к оплате.