← К каталогу
Исходный код · ID 2926

Point Zero Oscillator

pointzerooscillator.mq5
Вы автор или правообладатель?

Сообщите нам, если считаете, что материал размещён без разрешения.

Краткий обзор

О программе

Point Zero Oscillator — это пользовательский индикатор для MetaTrader 5, отображающий два гистограммных столбца в отдельном окне. Индикатор рассчитывает сглаженные скользящие средние (SMMA) по ценам Close, Low, Open и High с заданным периодом, а затем формирует осцилляционные значения на основе соотношения промежуточных средних значений.

В первом проходе вычисляются четыре линии SMMA и на их основе определяются верхние и нижние границы текущего диапазона. Во втором проходе рассчитываются SMMA от промежуточных буферов с периодом, равным трети от OsPeriod (с минимумом 2), и формируются два столбца гистограммы, отражающие направление изменения разницы между средними значениями.

Индикатор имеет два настраиваемых параметра: период расчёта OsPeriod и переключатель CalculateOnBarClose, определяющий момент пересчёта. Название индикатора в графике формируется автоматически с указанием установленного периода.

Настройки программы

НастройкаОписание
CalculateOnBarClose Переключатель, определяющий, будет ли индикатор пересчитываться при закрытии бара. При значении TRUE расчёт выполняется только на закрытии свечи, при FALSE — на каждом тике.
OsPeriod Целочисленный параметр, задающий период для расчёта сглаженных скользящих средних (SMMA) по ценовым данным. Используется как основа для формирования осцилляционных значений индикатора.
Получить полный код

Поиск по коду файла

#property indicator_separate_window
#property indicator_buffers 2
#property indicator_color1 DodgerBlue
#property indicator_color2 Red

int gia_76[] = {33, 42, 39, 40, 41, 59, 58, 64, 38, 61, 43, 36, 47, 63, 35, 91, 93};
extern bool CalculateOnBarClose = TRUE;
extern int OsPeriod = 20;
double g_ibuf_88[];
double g_ibuf_92[];
double g_ibuf_96[];
double g_ibuf_100[];
double g_ibuf_104[];
double g_ibuf_108[];
double g_ibuf_112[];
double g_ibuf_116[];
int g_period_120 = 2;

string f0_5(string as_0) {
   int lia_36[16];
   int lia_40[16];
   int lia_52[16];
   string ls_64;
   int li_72;
   int str_len_8 = StringLen(as_0);
   int li_12 = str_len_8 % 64;
   int li_16 = (str_len_8 - li_12) / 64;
   datetime lt_20 = D'26.11.2024 02:23:13';
   int li_24 = -271733879;
   int li_28 = -1732584194;
   int li_32 = 271733878;
   for (int count_44 = 0; count_44 < li_16; count_44++) {
      ls_64 = StringSubstr(as_0, count_44 * 64, 64);
      f0_3(lia_36, ls_64);
      f0_10(lt_20, li_24, li_28, li_32, lia_36);
   }
   ArrayInitialize(lia_40, 0);
   ArrayInitialize(lia_52, 0);
   int li_56 = 0;
   if (li_12 > 0) {
      li_72 = li_12 % 4;
      li_16 = li_12 - li_72;
      if (li_16 > 0) {
         ls_64 = StringSubstr(as_0, count_44 * 64, li_16);
         li_56 = f0_3(lia_40, ls_64);
      }
      for (int index_48 = 0; index_48 < li_72; index_48++) lia_52[index_48] = StringGetChar(as_0, count_44 * 64 + li_16 + index_48);
   }
   lia_52[index_48] = 128;
   lia_40[li_56] = f0_16(lia_52);
   if (li_12 >= 56) {
      f0_10(lt_20, li_24, li_28, li_32, lia_40);
      ArrayInitialize(lia_40, 0);
   }
   lia_40[14] = str_len_8 * 8;
   lia_40[15] = str_len_8 >> 1 & EMPTY_VALUE >> 28;
   f0_10(lt_20, li_24, li_28, li_32, lia_40);
   return (StringConcatenate(f0_4(lt_20), f0_4(li_24), f0_4(li_28), f0_4(li_32)));
}

int f0_6(int ai_0, int ai_4, int ai_8) {
   return (ai_0 & ai_4 | ai_0 & ai_8);
}

int f0_17(int ai_0, int ai_4, int ai_8) {
   return (ai_0 & ai_8 | ai_4 & ai_8);
}

int f0_14(int ai_0, int ai_4, int ai_8) {
   return (ai_0 ^ ai_4 ^ ai_8);
}

int f0_15(int ai_0, int ai_4, int ai_8) {
   return (ai_4 ^ ai_0 | ai_8);
}

int f0_9(int ai_0, int ai_4) {
   int li_ret_8 = ai_0 + ai_4;
   return (li_ret_8);
}

int f0_1(int ai_0, int ai_4, int ai_8, int ai_12, int ai_16, int ai_20, int ai_24) {
   ai_0 = f0_9(ai_0, f0_9(f0_9(f0_6(ai_4, ai_8, ai_12), ai_16), ai_24));
   return (f0_9(f0_8(ai_0, ai_20), ai_4));
}

int f0_7(int ai_0, int ai_4, int ai_8, int ai_12, int ai_16, int ai_20, int ai_24) {
   ai_0 = f0_9(ai_0, f0_9(f0_9(f0_17(ai_4, ai_8, ai_12), ai_16), ai_24));
   return (f0_9(f0_8(ai_0, ai_20), ai_4));
}

int f0_18(int ai_0, int ai_4, int ai_8, int ai_12, int ai_16, int ai_20, int ai_24) {
   ai_0 = f0_9(ai_0, f0_9(f0_9(f0_14(ai_4, ai_8, ai_12), ai_16), ai_24));
   return (f0_9(f0_8(ai_0, ai_20), ai_4));
}

int f0_2(int ai_0, int ai_4, int ai_8, int ai_12, int ai_16, int ai_20, int ai_24) {
   ai_0 = f0_9(ai_0, f0_9(f0_9(f0_15(ai_4, ai_8, ai_12), ai_16), ai_24));
   return (f0_9(f0_8(ai_0, ai_20), ai_4));
}

int f0_8(int ai_0, int ai_4) {
   if (ai_4 == 32) return (ai_0);
   int li_ret_8 = ai_0 << ai_4 | ai_0 >> 1 & EMPTY_VALUE >> (31 - ai_4);
   return (li_ret_8);
}

int f0_3(int &aia_0[16], string as_4) {
   int li_12 = StringLen(as_4);
   if (li_12 % 4 != 0) li_12 -= li_12 % 4;
   int arr_size_24 = ArraySize(aia_0);
   if (arr_size_24 < li_12 / 4) ArrayResize(aia_0, li_12 / 4);
   int index_16 = 0;
   for (int li_20 = 0; li_20 < li_12; li_20 += 4) {
      aia_0[index_16] = StringGetChar(as_4, li_20) | (StringGetChar(as_4, li_20 + 1) * 256) | StringGetChar(as_4, li_20 + 2) << 16 | StringGetChar(as_4, li_20 + 3) << 24;
      index_16++;
   }
   return (li_12 / 4);
}

string f0_4(int ai_0) {
   string ls_12;
   int lia_20[4];
   string str_concat_4 = "";
   lia_20[0] = ai_0 & 255;
   for (int li_24 = 1; li_24 < 4; li_24++) lia_20[li_24] = ai_0 >> 1 & EMPTY_VALUE >> (li_24 * 8 - 1) & 255;
   for (int index_28 = 0; index_28 < 4; index_28++) {
      ls_12 = f0_12(lia_20[index_28]);
      str_concat_4 = StringConcatenate(str_concat_4, ls_12);
   }
   return (str_concat_4);
}

string f0_12(int ai_0) {
   int li_4;
   string str_concat_8;
   for (int count_16 = 0; count_16 < 2; count_16++) {
      li_4 = ai_0 % 16;
      ai_0 = (ai_0 - li_4) / 16;
      str_concat_8 = StringConcatenate(f0_13(li_4), str_concat_8);
   }
   return (str_concat_8);
}

string f0_13(int ai_0) {
   int li_12;
   string ls_4 = "0";
   if (ai_0 < 10) li_12 = ai_0 + 48;
   else li_12 = ai_0 + 97 - 10;
   return (StringSetChar(ls_4, 0, li_12));
}

int f0_16(int aia_0[4]) {
   return (aia_0[0] | (aia_0[1] * 256) | aia_0[2] << 16 | aia_0[3] << 24);
}

void f0_10(int &ai_0, int &ai_4, int &ai_8, int &ai_12, int aia_16[16]) {
   int li_36 = 7;
   int li_40 = 12;
   int li_44 = 17;
   int li_48 = 22;
   int li_52 = 5;
   int li_56 = 9;
   int li_60 = 14;
   int li_64 = 20;
   int li_68 = 4;
   int li_72 = 11;
   int li_76 = 16;
   int li_80 = 23;
   int li_84 = 6;
   int li_88 = 10;
   int li_92 = 15;
   int li_96 = 21;
   int li_20 = ai_0;
   int li_24 = ai_4;
   int li_28 = ai_8;
   int li_32 = ai_12;
   ai_0 = f0_1(ai_0, ai_4, ai_8, ai_12, aia_16[0], li_36, -680876936);
   ai_12 = f0_1(ai_12, ai_0, ai_4, ai_8, aia_16[1], li_40, -389564586);
   ai_8 = f0_1(ai_8, ai_12, ai_0, ai_4, aia_16[2], li_44, 606105819);
   ai_4 = f0_1(ai_4, ai_8, ai_12, ai_0, aia_16[3], li_48, -1044525330);
   ai_0 = f0_1(ai_0, ai_4, ai_8, ai_12, aia_16[4], li_36, -176418897);
   ai_12 = f0_1(ai_12, ai_0, ai_4, ai_8, aia_16[5], li_40, D'11.01.2008 20:40:26');
   ai_8 = f0_1(ai_8, ai_12, ai_0, ai_4, aia_16[6], li_44, -1473231341);
   ai_4 = f0_1(ai_4, ai_8, ai_12, ai_0, aia_16[7], li_48, -45705983);
   ai_0 = f0_1(ai_0, ai_4, ai_8, ai_12, aia_16[8], li_36, D'02.02.2026 13:30:16');
   ai_12 = f0_1(ai_12, ai_0, ai_4, ai_8, aia_16[9], li_40, -1958414417);
   ai_8 = f0_1(ai_8, ai_12, ai_0, ai_4, aia_16[10], li_44, -42063);
   ai_4 = f0_1(ai_4, ai_8, ai_12, ai_0, aia_16[11], li_48, -1990404162);
   ai_0 = f0_1(ai_0, ai_4, ai_8, ai_12, aia_16[12], li_36, D'09.03.2027 15:48:02');
   ai_12 = f0_1(ai_12, ai_0, ai_4, ai_8, aia_16[13], li_40, -40341101);
   ai_8 = f0_1(ai_8, ai_12, ai_0, ai_4, aia_16[14], li_44, -1502002290);
   ai_4 = f0_1(ai_4, ai_8, ai_12, ai_0, aia_16[15], li_48, D'08.03.2009 20:

Показано первые 50% кода (символов: 10043)

Открыть по тарифу

Купите тариф с пакетом открытий или войдите, если тариф уже есть. Открытый файл останется в вашем кабинете навсегда.

Разовая покупка файла

На этой странице откроется полный исходный код файла вместо ознакомительного фрагмента.

Чтобы оформить заказ, введите email и перейдите к оплате.

Стоимость полного кода
1 004,30₽ ≈ $12.27