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

ichimokusuppres_ad.mq5

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

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

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

О программе

Индикатор рассчитывает уровни поддержки и сопротивления на основе концепции Ichimoku cloud. Он определяет фракталы на ценовых графиках с помощью настраиваемого параметра ранга, а затем проецирует эти фрактальные уровни вперёд, используя значения Senkou Span A и B индикатора Ichimoku, формируя линии тренда поддержки и сопротивления. Индикатор работает в окне графика MetaTrader 4 и использует два буфера для отрисовки верхних и нижних фракталов.

Визуальное оформление полностью настраивается через параметры: цвета, стили и толщина линий поддержки и сопротивления. Отображение фрактальных маркеров включается и отключается отдельным параметром. Индикатор поддерживает конвертацию котировок для 5-значных брокеров и позволяет ограничить количество отображаемых баров.

При инициализации индикатор проверяет корректность входных параметров: ранг фрактала должен быть нечётным числом не менее 3, а значение точки не должно быть нулевым. При ошибках выводятся сообщения на языке терминала (русский или английский).

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

НастройкаОписание
Tenkan-sen period / ?????? ??????? Tenkan-sen (i_tenkanSenPeriod) Период Tenkan-sen — Период Tenkan-sen индикатора Ichimoku, используемый для расчёта значений Senkou Span A и B.
Kijun-sen period / ?????? ??????? Kijun-sen (i_kijunSenPeriod) Период Kijun-sen — Период Kijun-sen индикатора Ichimoku, используемый для расчёта горизонта проекции линий поддержки и сопротивления.
Senkou Span B period / ?????? ??????? Senkou Span B (i_senkouSpanPeriod) Период Senkou Span B — Период Senkou Span B индикатора Ichimoku, используемый для определения границ облака при построении уровней.
Fractal rank / ???? ???????? (i_fractalRank) Ранг фрактала — Определяет ранг фрактала — нечётное число, задающее количество баров по обе стороны от центра для поиска экстремумов. Должно быть не менее 3.
Color of support lines / ???? ????? ????????? (i_supportColor) Цвет линий поддержки — Цвет линий поддержки, отрисовываемых на графике.
Style of support lines / ??? ????? ????????? (i_supportStyle) Стиль линий поддержки — Стиль линий поддержки (сплошная, пунктирная и т.д.).
Thickness of support lines / ??????? ????? ????????? (i_supportWidth) Толщина линий поддержки — Толщина линий поддержки в пикселях.
Color of resistance lines / ???? ????? ????????????? (i_resistanceColor) Цвет линий сопротивления — Цвет линий сопротивления, отрисовываемых на графике.
Style of resistance lines / ??? ????? ????????????? (i_resistanceStyle) Стиль линий сопротивления — Стиль линий сопротивления (сплошная, пунктирная и т.д.).
Thickness of resistance lines / ??????? ????? ????????????? (i_resistanceWidth) Толщина линий сопротивления — Толщина линий сопротивления в пикселях.
Do fractals show? / ?????????? ????????? (i_isShowFractals) Отображение фракталов — Переключатель отображения фрактальных маркеров на графике. При включении фракталы отрисовываются стрелками, при отключении — буферы не отображаются визуально.
The 5-digits are using? / ???????????? 5-???????? ?????????? (i_is5Digits) Использование 5-значных котировок — Переключатель использования 5-значных котировок. При включении значение точки делится на 10 для корректной работы с брокерами, предоставляющими 5-значную цену.
Number of bars to display / ???-?? ????? ??????????? (i_indBarsCount) Количество баров для отображения — Задаёт максимальное количество баров, отображаемых на графике. При значении 0 или более ограничение не применяется.
Получить полный код

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

#property description "English: Support and resistance levels based on Ichimoku cloud.\nRussian: ?????? ????????? ? ????????????? ?? ?????? ?????? Ichimoku."
#property version "2.00"
#property strict

#property indicator_chart_window
#property indicator_buffers 2
#property indicator_color1 clrRed
#property indicator_color2 clrBlue

#property indicator_width1 1
#property indicator_width2 1

#define PREFIX                                           "ICSURE_"

enum ENUM_YESNO
  {
   NO,                                                                                             // No / ???
   YES                                                                                             // Yes / ??   
  };

input    uint                 i_tenkanSenPeriod          = 9;                                      // Tenkan-sen period / ?????? ??????? Tenkan-sen
input    uint                 i_kijunSenPeriod           = 26;                                     // Kijun-sen period / ?????? ??????? Kijun-sen
input    uint                 i_senkouSpanPeriod         = 52;                                     // Senkou Span B period / ?????? ??????? Senkou Span B
input    uint                 i_fractalRank              = 13;                                     // Fractal rank / ???? ????????
input    color                i_supportColor             = clrBlue;                                // Color of support lines / ???? ????? ?????????
input    ENUM_LINE_STYLE      i_supportStyle             = STYLE_SOLID;                            // Style of support lines / ??? ????? ?????????
input    uint                 i_supportWidth             = 2;                                      // Thickness of support lines / ??????? ????? ?????????
input    color                i_resistanceColor          = clrRed;                                 // Color of resistance lines / ???? ????? ?????????????
input    ENUM_LINE_STYLE      i_resistanceStyle          = STYLE_SOLID;                            // Style of resistance lines / ??? ????? ?????????????
input    uint                 i_resistanceWidth          = 2;                                      // Thickness of resistance lines / ??????? ????? ?????????????
input    ENUM_YESNO           i_isShowFractals           = YES;                                    // Do fractals show? / ?????????? ?????????
input    ENUM_YESNO           i_is5Digits                = YES;                                    // The 5-digits are using? / ???????????? 5-???????? ??????????
input    int                  i_indBarsCount             = 10000;                                  // Number of bars to display / ???-?? ????? ???????????

enum ENUM_MESSAGE_CODE
  {
   MESSAGE_CODE_INVALID_FRACTAL_RANK1,
   MESSAGE_CODE_INVALID_FRACTAL_RANK2,
   MESSAGE_CODE_MA_SLOW_LESS_THAN_ZERO,
   MESSAGE_CODE_TERMINAL_FATAL_ERROR1,
   MESSAGE_CODE_BIND_ERROR
  };

bool g_activate;

int    g_centerBar,
       g_sidesBars,
       g_maxPeriod;

double g_point;

double g_upFractal[];
double g_dnFractal[];

int OnInit()
  {
      // код доступен только после оплаты
   }

bool TuningParameters()
  {
   string name=WindowExpertName();

   if(i_fractalRank<3)
     {
      Alert(name,GetStringByMessageCode(MESSAGE_CODE_INVALID_FRACTAL_RANK1));
      return false;
     }

   if(i_fractalRank%2==0)
     {
      Alert(name,GetStringByMessageCode(MESSAGE_CODE_INVALID_FRACTAL_RANK2));
      return false;
     }
   g_centerBar = (int)i_fractalRank / 2 + 1;
   g_sidesBars = (int)i_fractalRank / 2;

   g_point=(i_is5Digits==YES)? Point : Point/10;
   if(g_point==0)
     {
      Alert(name,GetStringByMessageCode(MESSAGE_CODE_TERMINAL_FATAL_ERROR1));
      return false;
     }

   g_point=GetFractalOffsetByTF(g_point,PERIOD_CURRENT);

   g_maxPeriod=(int)MathMax(i_tenkanSenPeriod,MathMax(i_kijunSenPeriod,i_senkouSpanPeriod));

   return true;
  }

double GetFractalOffsetByTF(double point,ENUM_TIMEFRAMES tf)
  {
   if(tf == PERIOD_CURRENT)
      tf = (ENUM_TIMEFRAMES)Period();

   switch(tf)
     {
      case PERIOD_M1:   return point;
      case PERIOD_M5:   return 2 * point;
      case PERIOD_M15:  return 3 * point;
      case PERIOD_M30:  return 5 * point;
      case PERIOD_H1:   return 10 * point;
      case PERIOD_H4:   return 20 * point;
      case PERIOD_D1:   return 50 * point;
      case PERIOD_W1:   return 200 * point;
      case PERIOD_MN1:  return 400 * point;
     }

   return point;
  }

void OnDeinit(const int reason)
  {
   ObjectsDeleteAll(0,PREFIX);
  }

bool BuffersBind()
  {
   string name=WindowExpertName();

   if(!SetIndexBuffer(0,g_upFractal) || 
      !SetIndexBuffer(1,g_dnFractal))
     {
      Alert(name,GetStringByMessageCode(MESSAGE_CODE_BIND_ERROR),GetLastError());
      return false;
     }

   for(int i=0; i<2; i++)
      if(i_isShowFractals)
         SetIndexStyle(i,DRAW_ARROW);
   else
      SetIndexStyle(i,DRAW_NONE);

   SetIndexArrow(0,217);
   SetIndexArrow(1,218);

   SetIndexLabel(0,"Up fractal");
   SetIndexLabel(1,"Down fractal");

   return true;
  }

void BuffersInitializeAll()
  {
   ArrayInitialize(g_upFractal,EMPTY_VALUE);
   ArrayInitialize(g_dnFractal,EMPTY_VALUE);
  }

int GetRecalcIndex(int &total,const int ratesTotal,const int prevCalculated)
  {
   total=ratesTotal-g_maxPeriod-2;

   if(i_indBarsCount>0 && i_indBarsCount<total)
      total=MathMin(i_indBarsCount,total);

   if(prevCalculated<ratesTotal-1)
     {
      BuffersInitializeAll();
      ObjectsDeleteAll(0,PREFIX);
      return total;
     }

   return (MathMin(ratesTotal - prevCalculated, total));
  }

bool IsUpFractal(int barIndex)
  {
   int totalBars=iBars(NULL,PERIOD_CURRENT);
   if(barIndex-g_sidesBars<=0 || barIndex+g_sidesBars>=totalBars)
      return false;

   double curHigh=iHigh(NULL,PERIOD_CURRENT,barIndex);

   for(int i=barIndex-g_sidesBars; i<barIndex; i++)
      if(iHigh(NULL,PERIOD_CURRENT,i)>=curHigh)
         return false;

   int leftBar=barIndex+g_sidesBars;
   for(int i=barIndex+1; i<=leftBar; i++)
     {
      double high=iHigh(NULL,PERIOD_CURRENT,i);
      if(high>curHigh)
         return false;

      if(hi

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

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

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

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

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

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

Стоимость полного кода
913,60₽ ≈ $11.17