JMA z-score
Сообщите нам, если считаете, что материал размещён без разрешения.
Сообщить о материале
Обращение по товару «jma z-score.mq5» отправится на рассмотрение. Укажите контакт для ответа и опишите причину.
О программе
JMA z-score — это пользовательский индикатор для MetaTrader 5, который рассчитывает Z-score на основе сглаживания по алгоритму JMA (Jurik Moving Average). Индикатор отображает результат в отдельном окне в виде цветной линии: серый цвет — при отсутствии изменения, синий — при росте значения, розовый — при снижении.
Индикатор принимает четыре настраиваемых параметра: период сглаживания JMA, фаза JMA, период расчёта Z-score и тип цены. При заданном периоде Z-score меньше или равном 1 индикатор автоматически использует период JMA, а если значение окажется меньше 2, выводится предупреждение и инициализация завершается с ошибкой.
Внутренняя логика включает вспомогательные функции для расчёта сглаженной цены и статистического Z-score, однако пользователь видит только итоговый график без доступа к промежуточным вычислениям. Индикатор не выполняет торговых операций и не обрабатывает события сделок.
Настройки программы
| Настройка | Описание |
|---|---|
| JMA smooth period (inpPeriod) | Период сглаживания JMA — Период сглаживания JMA. Определяет длину окна для расчёта сглаженной цены. |
| JMA phase (inpPhase) | Фаза JMA — Фаза JMA. Числовой параметр, влияющий на форму сглаживающей кривой. |
| Z-score period (<=1 for same as JMA period) (inpZsPeriod) | Период Z-score — Период расчёта Z-score. Если значение меньше или равно 1, используется период JMA. Если меньше 2, инициализация завершается с ошибкой. |
| Price (inpPrice) | Тип цены — Тип цены, используемый для расчёта. Поддерживаются стандартные варианты: Close, Open, High, Low, Median, Typical, Weighted. |
Поиск по коду файла
#property description "JMA z-score"
#property indicator_separate_window
#property indicator_buffers 2
#property indicator_plots 1
#property indicator_label1 "Z-score"
#property indicator_type1 DRAW_COLOR_LINE
#property indicator_color1 clrDarkGray,clrDodgerBlue,clrDeepPink
#property indicator_width1 2
input int inpPeriod = 14; // JMA smooth period
input double inpPhase = 0; // JMA phase
input int inpZsPeriod = 30; // Z-score period (<=1 for same as JMA period)
input ENUM_APPLIED_PRICE inpPrice = PRICE_CLOSE; // Price
double val[],valc[];
int _zsPeriod;
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[])
{
// код доступен только после оплаты
}
double workZs[];
double iZScore(double value, int period, int i,int bars)
{
if (ArraySize(workZs)!=bars) ArrayResize(workZs,bars); workZs[i]=value;
if (period<=1) return(0);
double sumx=0,sumxx=0,mean=0; for(int k=0; k<period && (i-k)>=0; mean+=workZs[i-k], sumx+=workZs[i-k],sumxx+=workZs[i-k]*workZs[i-k],k++) {}
double deviation = MathSqrt((sumxx-sumx*sumx/(double)period)/(double)period);
mean /= (double)period;
return(deviation!=0 ? (value-mean)/deviation : 0);
}
#define _smoothInstances 1
#define _smoothInstancesSize 10
#define _smoothRingSize 11
double workSmooth[_smoothRingSize][_smoothInstances*_smoothInstancesSize];
#define bsmax 5
#define bsmin 6
#define volty 7
#define vsum 8
#define avolty 9
double iSmooth(double price, double length, double phase, int i, int instance=0)
{
int _indP = (i-1)%_smoothRingSize;
int _indC = (i )%_smoothRingSize;
int _inst = instance*_smoothInstancesSize;
if(i==0 || length<=1) { int k=0; for(; k<volty; k++) workSmooth[_indC][_inПоказано первые 50% кода (символов: 4616)
Открыть по тарифу
Купите тариф с пакетом открытий или войдите, если тариф уже есть. Открытый файл останется в вашем кабинете навсегда.
Разовая покупка файла
На этой странице откроется полный исходный код файла вместо ознакомительного фрагмента.
Зачем нужен email? После подтверждения оплаты файл сохранится в кабинете на этот email. Если аккаунта ещё нет, мы создадим его и пришлём ссылку для задания пароля. Если аккаунт уже есть, покупка добавится в него. Укажите адрес, к которому у вас есть доступ.
Чтобы оформить заказ, введите email и перейдите к оплате.