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

super scalping future.mq5

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

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

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

О программе

Данный индикатор для MetaTrader 5 рассчитывает корреляцию рангов Спирмена (Spearman Rank Correlation) ценовых данных за 14 баров. Основное значение индикатора (буфер 0) отображает коэффициент корреляции, ограниченный диапазоном от -1.0 до 1.0, и отрисовывается в виде линии на графике. Для расчёта используются вспомогательные буферы: сначала вычисляется сглаженная скользящая средняя LWMA с дополнительным весовым сглаживанием, затем применяется собственная сглаживающая формула, после чего производится ранжирование значений и расчёт корреляции Спирмена.

Индикатор генерирует визуальные сигналы при пересечении пороговых уровней 0.8 и -0.8: при переходе корреляции через 0.8 рисуется стрелка продажи, при переходе через -0.8 — стрелка покупки. Также на графике выводится текстовая метка с текущим состоянием сигнала (Ожидание/Покупка/Продажа). При появлении сигнала на текущем баре вызывается функция уведомлений с информацией о цене и стоп-лоссе.

Дополнительно индикатор рисует горизонтальные уровни 0.8 и -0.8 для наглядности пороговых значений. Параметр FilterPeriod влияет на период фильтрации при сглаживании, а параметр SL_distance_pips задаёт расстояние стоп-лосса в пунктах, используемое при формировании сигнала.

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

НастройкаОписание
FilterPeriod Период фильтрации — Период фильтрации, используемый при сглаживании вспомогательного буфера индикатора (по умолчанию 22).
SL attaalums no kanaala aarmalaam (SL_distance_pips) Расстояние стоп-лосса в пунктах — Расстояние стоп-лосса в пунктах, применяемое при формировании торговых сигналов (по умолчанию 20).
Получить полный код

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

#property indicator_chart_window
#property indicator_minimum -1.2
#property indicator_maximum 1.2
#property indicator_buffers 1 // bija 1
#property indicator_color1 Blue
#property indicator_width1 3
#property indicator_style1 STYLE_SOLID

#property indicator_levelcolor Lime // bija OrangeRed
#property indicator_level1 0.8
#property indicator_level2 -0.8

  int pomul = 22;
extern   int FilterPeriod = 22;
  double ulinop = 1.0;
  int cilik = 0;

extern int SL_distance_pips = 20; // SL attaalums no kanaala aarmalaam

double indic_buffer0[];
double indic_buffer1[];
double indic_buffer2[];
int iConst_14 = 14;
double dArray1[];
double dConst_pipDigits;
int iArray1[];
int iArray2[];
int iSignFlag = 0;
int iTimeBar0 = 0;

string indPrefix="www.mql54.com";
string nosaukums;

datetime lastAlertTime;

void displayAlert(string strMsg, double tp, double sl, double currPrice) {
   if (Time[0] != lastAlertTime) {
      lastAlertTime = Time[0];

      string strSL, strTP, strCurr; 
      if (currPrice!=0) strCurr= " - price "+DoubleToStr(currPrice,4); else strCurr="";
      if (tp!=0) strTP= ", TakeProfit on "+DoubleToStr(tp,4); else strTP="";
      if (sl!=0) strSL= ", StopLoss on "+DoubleToStr(sl,4); else strSL="";

      Alert("www.mql54.com "+strMsg+strCurr+strTP+strSL+" ", Symbol(), ", ", Period(), " minute chart");

   }
}

void MartAxis(int ai_0) {
   int li_4;
   int l_count_8;
   int li_12;
   int li_16;
   double ld_24;
   switch (cilik) {
   case 0:
      indic_buffer1[ai_0] = iMA(NULL, 0, pomul + 1, 0, MODE_LWMA, PRICE_CLOSE, ai_0);
      break;
   case 1:
      indic_buffer1[ai_0] = iMA(NULL, 0, pomul + 1, 0, MODE_LWMA, PRICE_OPEN, ai_0);
      break;
   case 2:
      indic_buffer1[ai_0] = iMA(NULL, 0, pomul + 1, 0, MODE_LWMA, PRICE_HIGH, ai_0);
      break;
   case 3:
      indic_buffer1[ai_0] = iMA(NULL, 0, pomul + 1, 0, MODE_LWMA, PRICE_LOW, ai_0);
      break;
   case 4:
      indic_buffer1[ai_0] = iMA(NULL, 0, pomul + 1, 0, MODE_LWMA, PRICE_MEDIAN, ai_0);
      break;
   case 5:
      indic_buffer1[ai_0] = iMA(NULL, 0, pomul + 1, 0, MODE_LWMA, PRICE_TYPICAL, ai_0);
      break;
   case 6:
      indic_buffer1[ai_0] = iMA(NULL, 0, pomul + 1, 0, MODE_LWMA, PRICE_WEIGHTED, ai_0);
      break;
   default:
      indic_buffer1[ai_0] = iMA(NULL, 0, pomul + 1, 0, MODE_LWMA, PRICE_WEIGHTED, ai_0);
   }
   for (int li_20 = ai_0 + pomul + 2; li_20 > ai_0; li_20--) {
      ld_24 = 0.0;
      li_4 = 0;
      l_count_8 = 0;
      li_12 = li_20 + pomul;
      li_16 = li_20 - pomul;
      if (li_16 < ai_0) li_16 = ai_0;
      while (li_12 >= li_20) {
         l_count_8++;
         ld_24 += l_count_8 * SnakePrice(li_12);
         li_4 += l_count_8;
         li_12--;
      }
      while (li_12 >= li_16) {
         l_count_8--;
         ld_24 += l_count_8 * SnakePrice(li_12);
         li_4 += l_count_8;
         li_12--;
      }
      indic_buffer1[li_20] = ld_24 / li_4;
   }
}

double SnakePrice(int ai_0) {
   switch (cilik) {
   case 0:
      return (Close[ai_0]);
   case 1:
      return (Open[ai_0]);
   case 2:
      return (High[ai_0]);
   case 3:
      return (Low[ai_0]);
   case 4:
      return ((High[ai_0] + Low[ai_0]) / 2.0);
   case 5:
      return ((Close[ai_0] + High[ai_0] + Low[ai_0]) / 3.0);
   case 6:
      return ((2.0 * Close[ai_0] + High[ai_0] + Low[ai_0]) / 4.0);
   }
   return (Close[ai_0]);
}

void SmoothOverMart(int ai_0) {
   double ld_4 = indic_buffer1[ArrayMaximum(indic_buffer1, FilterPeriod, ai_0)];
   double ld_12 = indic_buffer1[ArrayMinimum(indic_buffer1, FilterPeriod, ai_0)];
   indic_buffer2[ai_0] = (2.0 * (ulinop + 2.0) * indic_buffer1[ai_0] - (ld_4 + ld_12)) / 2.0 / (ulinop + 1.0);
}

double SpearmanRankCorrelation(double ada_0[], int ai_4) {
   double ld_16;
   for (int l_index_24 = 0; l_index_24 < ai_4; l_index_24++) ld_16 += MathPow(ada_0[l_index_24] - l_index_24 - 1.0, 2);
   double ld_ret_8 = 1 - 6.0 * ld_16 / (MathPow(ai_4, 3) - ai_4);
   return (ld_ret_8);
}

void RankPrices(int aia_0[]) {
   double ld_4;
   double ld_12;
   int l_index_24;
   int li_32;
   int li_36;
   int li_40;
   double lda_44[];
   ArrayResize(lda_44, iConst_14);
   ArrayCopy(iArray2, aia_0);
   for (int l_index_20 = 0; l_index_20 < iConst_14; l_index_20++) lda_44[l_index_20] = l_index_20 + 1;
   ArraySort(iArray2, WHOLE_ARRAY, 0, MODE_DESCEND);
   for (l_index_20 = 0; l_index_20 < iConst_14 - 1; l_index_20++) {
      if (iArray2[l_index_20] == iArray2[l_index_20 + 1]) {
         li_32 = iArray2[l_index_20];
         l_index_24 = l_index_20 + 1;
         li_36 = 1;
         ld_12 = l_index_20 + 1;
         while (l_index_24 < iConst_14) {
            if (iArray2[l_index_24] != li_32) break;
            li_36++;
            ld_12 += l_index_24 + 1;
            l_index_24++;
         }
         ld_4 = li_36;
         ld_12 /= ld_4;
         for (int li_28 = l_index_20; li_28 < l_index_24; li_28++) lda_44[li_28] = ld_1

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

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

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

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

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

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

Стоимость полного кода
749,40₽ ≈ $9.16