jma_cci (wpr).mq5
Сообщите нам, если считаете, что материал размещён без разрешения.
Сообщить о материале
Обращение по товару «jma_cci (wpr).mq5» отправится на рассмотрение. Укажите контакт для ответа и опишите причину.
О программе
Данный продукт представляет собой пользовательский индикатор для платформы MetaTrader 5, который рассчитывает значение CCI (Commodity Channel Index) и применяет к нему алгоритм сглаживания JMA. Результат отображается в отдельном окне в виде линейного графика с уровнями 100, -100, 200, -200 и 0.
Индикатор использует четыре настраиваемых параметра: период CCI, длину сглаживания, фазу и количество баров для начального расчёта. Внутри используется встроенная функция iCCI для получения значений CCI по типу цены Typical.
Продукт предназначен для аналитической оценки динамики CCI сглаженным методом, что позволяет выявлять трендовые и циклические сигналы на основе скользящего среднего с настраиваемой фазой. Индикатор не содержит встроенной торговой логики и работает исключительно как аналитический инструмент.
Настройки программы
| Настройка | Описание |
|---|---|
| CCIPeriod | Период расчёта индикатора CCI (Commodity Channel Index), используемого в качестве исходных данных для алгоритма сглаживания. |
| Len | Длина сглаживания, определяющая параметр алгоритма JMA. Влияет на скорость реакции и степень сглаживания результирующей линии. |
| phase | Фаза сглаживания, задающая коэффициент, влияющий на характеристики алгоритма JMA. Принимает числовое значение, которое интерпретируется как параметр фазы. |
| BarCount | Количество баров, используемых для начальной инициализации расчёта индикатора. Определяет, сколько исторических данных будет обработано перед началом основного расчёта. |
Поиск по коду файла
#property indicator_separate_window
#property indicator_buffers 1
#property indicator_color1 Red
#property indicator_level1 100.0
#property indicator_level2 -100.00
#property indicator_level3 200.0
#property indicator_level4 -200.0
#property indicator_level5 0.0
#property indicator_levelcolor DodgerBlue
#property indicator_levelstyle STYLE_DASH
#property indicator_maximum 350.0
#property indicator_minimum -350.0
extern int CCIPeriod = 21;
extern int Len=8;
extern int phase=0;
extern int BarCount=200;
double ExtMapBuffer1[];
int init()
{
// код доступен только после оплаты
}
int deinit()
{
return(0);
}
int start()
{
// код доступен только после оплаты
}
int counted_bars=IndicatorCounted();
bool firstTime=True;
int AccountedBars=0;
int jj=0;
int ii=0;
int shift=0;
double series=0;
double vv=0;
double v1=0;
double v2=0;
double v3=0;
double v4=0;
double s8=0;
double s10=0;
double s18=0;
double s20=0;
int v5=0;
int v6=0;
double s28=0;
double s30=0;
int s38=0;
int s40=0;
int s48=0;
int s50=0;
int s58=0;
int s60=0;
double s68=0;
double s70=0;
double f8=0;
double f10=0;
double f18=0;
double f20=0;
double f28=0;
double f30=0;
double f38=0;
double f40=0;
double f48=0;
double f50=0;
double f58=0;
double f60=0;
double f68=0;
double f70=0;
double f78=0;
double f80=0;
double f88=0;
double f90=0;
double f98=0;
double fA0=0;
double fA8=0;
double fB0=0;
double fB8=0;
double fC0=0;
double fC8=0;
double fD0=0;
double f0=0;
double fD8=0;
double fE0=0;
double fE8=0;
int fF0=0;
double fF8=0;
int value2=0;
double JMA=0;
double list[127];
double ring1[127];
double ring2[10];
double buffer[61];
ArrayInitialize(list,0);
ArrayInitialize(ring1,0);
ArrayInitialize(ring2,0);
ArrayInitialize(buffer,0);
if (firstTime)
{
AccountedBars=Bars-BarCount;
firstTime=False;
}
{
s28=63;
s30=64;
for( ii=1;ii<=s28;ii++)
{
list[ii]=-1000000;
}
for( ii=s30;ii<=127 ;ii++ )
{
list[ii]=1000000;
}
f0=1;
}
for( shift=BarCount;shift>=0;shift-- )
{
series=iCCI(NULL,0,CCIPeriod,PRICE_TYPICAL,shift);
if (fF0 < 61)
{
fF0= fF0 + 1;
buffer[fF0]=series;
} //{ main cycle }
if (fF0 > 30)
{
if (Len < 1.0000000002)
{
f80=0.0000000001; //{1.0e-10}
}
else
{
f80=(Len - 1)/2.0;
}
if (phase < -100)
{
f10=0.5;
}
else
{
if (phase > 100)
{
f10=2.5;
}
else
{
f10=phase/100 + 1.5;
}
}
v1=MathLog(MathSqrt(f80));
v2=v1;
if (v1/MathLog(2.0) + 2.0 < 0.0)
{
v3=0;
}
else
{
v3=v2/MathLog(2.0) + 2.0;
}
f98=v3;
if (0.5<=f98 - 2.0)
{
f88=f98 - 2.0;
}
else
{
f88=0.5;
}
f78=MathSqrt(f80) * f98;
f90=f78/(f78 + 1.0);
f80=f80 * 0.9;
f50=f80/(f80 + 2.0);
if (f0!=0)
{
f0=0;
v5=0;
for( ii=1;ii <=29;ii++)
{
if (buffer[ii+1]!=buffer[ii])
{
v5=1.0;
}
}
fD8=v5*30.0;
if (fD8==0)
{
f38=series;
}
else
{
f38=buffer[1];
}
f18=f38;
if (fD8 > 29)
fD8=29;
}
else
fD8=0;
for( ii=fD8;ii>=0;ii-- )
{ //{ another bigcycle...}
value2=31-ii;
if (ii==0)
{
f8=series;
}
else
{
f8=buffer[value2];
}
f28=f8 - f18;
f48=f8 - f38;
if (MathAbs(f28) > MathAbs(f48))
{
v2=MathAbs(f28);
}
else
{
v2=MathAbs(f48);
}
fA0=v2;
vv=fA0 + 0.0000000001; //{1.0e-10;}
if (s48<=1)
{
s48=127;
}
else
{
s48=s48 - 1;
}
if (s50<=1)
{
s50=10;
}
else
{
s50=s50 - 1;
}
if (s70 < 128)
s70=s70 + 1;
s8=s8 + vv - ring2[s50];
ring2[s50]=vv;
if (s70 > 10)
{
s20=s8/10;
}
else
s20=s8/s70;
if (s70 > 127)
{
s10=ring1[s48];
ring1[s48]=s20;
s68=64;
s58=s68;
while(s68 > 1)
{
if (list[s58] < s10)
{
s68=s68 *0.5;
s58=s58 + s68;
}
else
if (list[s58]<=s10)
{
s68=1;
}
else
{
s68=s68 *0.5;
s58=s58 - s68;
}
}
}
else
{
ring1[s48]=s20;
if (s28 + s30 > 127)
{
s30=s30 - 1;
s58=s30;
}
else
{
s28=s28 + 1;
s58=s28;
}
if (s28 > 96)
{
s38=96;
}
else
s38=s28;
if (s30 < 32)
{
Показано первые 50% кода (символов: 5160)
Открыть по тарифу
Купите тариф с пакетом открытий или войдите, если тариф уже есть. Открытый файл останется в вашем кабинете навсегда.
Разовая покупка файла
На этой странице откроется полный исходный код файла вместо ознакомительного фрагмента.
Зачем нужен email? После подтверждения оплаты файл сохранится в кабинете на этот email. Если аккаунта ещё нет, мы создадим его и пришлём ссылку для задания пароля. Если аккаунт уже есть, покупка добавится в него. Укажите адрес, к которому у вас есть доступ.
Чтобы оформить заказ, введите email и перейдите к оплате.