Moving MinMax
Похожие материалы по тегам
Сообщите нам, если считаете, что материал размещён без разрешения.
Сообщить о материале
Обращение по товару «moving minmax shifted mtf.mq5» отправится на рассмотрение. Укажите контакт для ответа и опишите причину.
О программе
Moving MinMax — это пользовательский индикатор для MetaTrader 5, рассчитывающий осциллятор на основе анализа минимальных и максимальных значений ценовых данных с применением экспоненциального сглаживания. Индикатор отображает несколько буферов: гистограммы верхней и нижней границ, маркеры разворотов тренда и линии экстремумов в отдельном подокне графика.
Поддерживается многотаймфреймовый анализ — индикатор способен получать данные с любого выбранного таймфрейма через встроенный механизм переключения. Параметр сдвига позволяет визуально сдвинуть отображаемые значения относительно текущего графика.
Индикатор работает в отдельном окне и использует семь буферов для отрисовки. Расчёт выполняется на каждом тике с использованием ценового типа, заданного пользователем. Внутренние вычисления включают сглаживание, нормализацию и определение текущего тренда на основе соотношения верхней и нижней линий.
Настройки программы
| Настройка | Описание |
|---|---|
| TimeFrame | Таймфрейм, на котором выполняется расчёт индикатора. Можно выбрать любой доступный таймфрейм или текущий график. |
| Smoothing | Период сглаживания, используемый при расчёте индикатора. Определяет глубину усреднения ценовых данных. |
| Window | Размер окна расчёта — количество баров, используемых для анализа и построения индикаторных линий. |
| Price | Тип цены для расчётов (например, цена закрытия или другой доступный тип цены). |
| ShiftValues | Переключатель сдвига значений индикатора. При активации значения сдвигаются на величину, зависящую от параметра сглаживания. |
Поиск по коду файла
#property indicator_separate_window
#property indicator_buffers 7
#property indicator_color1 DeepSkyBlue
#property indicator_color2 PaleVioletRed
#property indicator_color3 Yellow
#property indicator_color4 DeepSkyBlue
#property indicator_color5 PaleVioletRed
#property indicator_color6 DeepSkyBlue
#property indicator_color7 PaleVioletRed
#property indicator_width1 2
#property indicator_width2 2
#property indicator_width3 2
#property indicator_width4 1
#property indicator_width5 1
#property indicator_width6 2
#property indicator_width7 2
extern string TimeFrame = "Current time frame";
extern int Smoothing = 5;
extern int Window = 300;
extern int Price = PRICE_CLOSE;
extern bool ShiftValues = false;
double mmUp[];
double mmDn[];
double mmUph[];
double mmDnh[];
double mmUpa[];
double mmDna[];
double mmYeh[];
double prices[];
int shifted=0;
string indicatorFileName;
bool calculateValue;
int timeFrame;
int init()
{
// код доступен только после оплаты
}
int deinit() { return(0); }
double S[];
double work[][11];
#define sQiip1 0
#define sQiim1 1
#define sPiip1 2
#define sPiim1 3
#define dQiip1 4
#define dQiim1 5
#define dPiip1 6
#define dPiim1 7
#define sui 8
#define dui 9
#define trend 10
int start()
{
// код доступен только после оплаты
}
int scount = Window+2*Smoothing;
int i,k,limit,counted_bars=IndicatorCounted();
if(counted_bars<0) return(-1);
if(counted_bars>0) counted_bars--;
limit = MathMin(Bars-counted_bars,Bars-1);
for (i=0; i<7; i++) SetIndexDrawBegin(i,Bars-(Window-shifted)*timeFrame/Period());
if (calculateValue || timeFrame == Period())
{
if (ArrayRange(work,0) != Window) ArrayResize(work,Window);
if (ArrayRange(S,0) != scount) ArrayResize(S ,scount);
for(i=limit; i>=0; i--) prices[i] = iMA(NULL,0,1,0,MODE_SMA,Price,i);
ArrayCopy(S,prices,0,0,scount);
for (i=0; i<Window; i++)
{
work[i][sQiip1]=0;
work[i][sQiim1]=0;
work[i][dQiip1]=0;
work[i][dQiim1]=0;
for(k=0; k<Smoothing; k++)
{
work[i][sQiip1] += MathExp( 2.0*(S[Smoothing-1+i+k]-S[i])/(S[Smoothing-1+i+k]+S[i]));
work[i][sQiim1] += MathExp( 2.0*(S[Smoothing-1+i-k]-S[i])/(S[Smoothing-1+i-k]+S[i]));
work[i][dQiip1] += MathExp(-2.0*(S[Smoothing-1+i+k]-S[i])/(S[Smoothing-1+i+k]+S[i]));
work[i][dQiim1] += MathExp(-2.0*(S[Smoothing-1+i-k]-S[i])/(S[Smoothing-1+i-k]+S[i]));
}
}
for(i=0; i<Window; i++)
{
work[i][sPiip1] = work[i][sQiip1] / (work[i][sQiip1] + work[i][sQiim1]);
work[i][sPiim1] = work[i][sQiim1] / (work[i][sQiip1] + work[i][sQiim1]);
work[i][dPiip1] = work[i][dQiip1] / (work[i][dQiip1] + work[i][dQiim1]);
work[i][dPiim1] = work[i][dQiim1] / (work[i][dQiip1] + work[i][dQiim1]);
}
double uSum = 1;
double dSum = 1;
work[0][sui] = 1;
work[0][dui] = 1;
for(i=1; i<Window; i++)
{
work[i][sui] = (work[i][sPiim1]/work[i][sPiip1])*work[i-1][sui];
work[i]Показано первые 50% кода (символов: 6097)
Открыть по тарифу
Купите тариф с пакетом открытий или войдите, если тариф уже есть. Открытый файл останется в вашем кабинете навсегда.
Разовая покупка файла
На этой странице откроется полный исходный код файла вместо ознакомительного фрагмента.
Зачем нужен email? После подтверждения оплаты файл сохранится в кабинете на этот email. Если аккаунта ещё нет, мы создадим его и пришлём ссылку для задания пароля. Если аккаунт уже есть, покупка добавится в него. Укажите адрес, к которому у вас есть доступ.
Чтобы оформить заказ, введите email и перейдите к оплате.