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

indicatorcrosscci 8v2.mq5

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

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

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

О программе

Индикатор рассчитывает значение CCI (индекс товарного канала) заданного периода и отображает на графике линии поддержки и сопротивления в момент пересечения ценой заданных пороговых уровней CCI. Линии рисуются в настраиваемых цветах с заданной толщиной, а при необходимости добавляются стрелки и текстовые метки.

Индикатор поддерживает два набора уровней — основной и дополнительный (SR2), что позволяет отслеживать пересечения как верхних, так и нижних порогов. Параметры пороговых значений, периода CCI и применяемой цены настраиваются пользователем.

Расчёт может выполняться как при каждом тике, так и только при закрытии бара. Индикатор автоматически удаляет устаревшие объекты при деинициализации и корректно обновляет линии при смене символа или таймфрейма.

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

НастройкаОписание
Timeframe Таймфрейм, на котором рассчитывается индикатор.
limit Количество баров, учитываемых при расчёте индикатора.
showlabels Отображает текстовые метки рядом с линиями поддержки и сопротивления.
SR2 Включает или отключает второй набор уровней поддержки и сопротивления.
resvalue Пороговое значение CCI для верхнего уровня (пересечение сверху вниз).
supvalue Пороговое значение CCI для нижнего уровня (пересечение снизу вверх).
period Период расчёта индекса товарного канала CCI.
applied_price Тип цены, используемой для расчёта CCI (внутренний код применяемой цены).
LineShift Сдвиг по горизонтали при построении линий поддержки и сопротивления от точки пересечения.
resistanceColor Цвет линий и меток сопротивления на графике.
supportColor Цвет линий и меток поддержки на графике.
Labelsize Размер шрифта текстовых меток сопротивления и поддержки на графике.
Linewidth Толщина линий поддержки и сопротивления на графике.
calculateonbarclose Если включено, расчёт индикатора выполняется только при закрытии бара; при выключении — на каждом тике.
showarrows Отображает стрелки на графике в точках пересечения пороговых уровней CCI.
Получить полный код

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

#property indicator_chart_window
#property indicator_buffers 4
#property indicator_color1 Blue
#property indicator_color2 Red
#property indicator_width1 1
#property indicator_width2 1
#property indicator_color3 Blue
#property indicator_color4 Red
#property indicator_width3 1
#property indicator_width4 1
extern int Timeframe=0;
extern int limit=34;
extern bool showlabels=false;
extern bool SR2=true;
extern int resvalue=-100;
extern int supvalue=100;
extern int period=8;
extern int applied_price=5;
extern int LineShift=1;
extern color resistanceColor=Red;
extern color supportColor=Blue;
extern int Labelsize=8;
extern int Linewidth=2;
extern bool calculateonbarclose=true;
extern bool showarrows=false;

 double buyarrow[];
double sellarrow[];                                                                                          //
 double buyarrow2[];
double sellarrow2[];      
int periode;
string Symbolde;

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

int deinit()
  {

     for (int i = ObjectsTotal()-1; i>=0; i--) 
    {
     string tmp = ObjectName(i);
     if (StringFind(tmp,"Resistance") >= 0) ObjectDelete(tmp);
     if (StringFind(tmp,"Support") >= 0) ObjectDelete(tmp);
    }
   return(0);

   return(0);
  }

int start()
  {
      // код доступен только после оплаты
   }
     int    counted_bars=IndicatorCounted(),i,z,b,drawresend=0,drawsupend=0;
   double indicatorvalue[];   
   ArrayResize(indicatorvalue,limit);
   double reshigh=0;
   double suplow=0;
   bool calculateit=false;

if(calculateonbarclose)
{
   if(NewBar()||Period()!=periode||Symbol()!=Symbolde)
   {
      calculateit=true;     
      periode=Period();
      Symbolde=Symbol();
   }
   else
   calculateit=false;
}
else
calculateit=true;

if(calculateit)
{
   for(i=limit;i>=0;i--)
   {
      indicatorvalue[i]=iCCI(NULL,Timeframe,period,applied_price,iBarShift(NULL,Timeframe,iTime(NULL,0,i)));
      if(i<(limit))
      {
         if(indicatorvalue[i+1]>resvalue&&indicatorvalue[i+0]<resvalue)
         {
            drawresend=Resistbars(i+LineShift);
            if(ObjectFind("Resistance"+"CCI"+period+Time[i]+Timeframe+resvalue+supvalue)==-1)
            {
            DrawRes(drawresend,i);

            reshigh=iHigh(NULL,Timeframe,iBarShift(NULL,Timeframe,iTime(NULL,0,i+LineShift)));
            }
            else
            ObjectSet("Resistance"+"CCI"+period+Time[i]+Timeframe+resvalue+supvalue,OBJPROP_TIME2,iTime(NULL,0,drawresend));
            if(showarrows)
            sellarrow[i]=High[i]+0.4*iATR(NULL,0,14,i);
            else
            sellarrow[i]=EMPTY_VALUE;

         }
         else
         sellarrow[i]=EMPTY_VALUE;

         if(indicatorvalue[i+1]>resvalue&&indicatorvalue[i+0]>resvalue)
         {
            if(ObjectFind("Resistance"+"CCI"+period+Time[i]+Timeframe+resvalue+supvalue)!=-1)
            {            
               ObjectDelete("Resistance"+"CCI"+period+Time[i]+Timeframe+resvalue+supvalue);

               ObjectDelete("Resistance"+"label"+"CCI"+period+Time[i]+Timeframe+resvalue+supvalue);
            }
         }

         if(showlabels&&(iBarShift(NULL,Timeframe,iTime(NULL,0,i))-iBarShift(NULL,Timeframe,iTime(NULL,0,drawresend)))>3)
         {
         if(ObjectFind("Resistance"+"CCI"+period+Time[i]+Timeframe+resvalue+supvalue)!=-1)
         {
            if(ObjectFind("Resistance"+"label"+"CCI"+period+Time[i]+Timeframe+resvalue+supvalue)==-1)
            {
            ObjectCreate("Resistance"+"label"+"CCI"+period+Time[i]+Timeframe+resvalue+supvalue,OBJ_TEXT,0,Time[drawresend+4],reshigh);
            ObjectSetText("Resistance"+"label"+"CCI"+period+Time[i]+Timeframe+resvalue+supvalue,"CCIRes"+"("+period+")"+"_"+Timeframe);
            ObjectSet("Resistance"+"label"+"CCI"+period+Time[i]+Timeframe+resvalue+supvalue,OBJPROP_COLOR,resistanceColor); 
            ObjectSet("Resistance"+"label"+"CCI"+period+Time[i]+Timeframe+resvalue+supvalue,OBJPROP_FONTSIZE,Labelsize);
            }
            else
            ObjectMove("Resistance"+"label"+"CCI"+period+Time[i]+Timeframe+resvalue+supvalue,1,Time[drawresend+4],reshigh);
         }         
         }
         if(indicatorvalue[i+1]<supvalue&&indicatorvalue[i]>supvalue)
         {
            drawsupend=Supportbars(i+LineShift);
            if(ObjectFind("Support"+"CCI"+period+Time[i]+Timeframe+resvalue+supvalue)==-1)
            {

            DrawSup(drawsupend,i);
            suplow=iLow(NULL,Timeframe,iBarShift(NULL,Timeframe,iTime(NULL,0,i+LineShift)));
            }
            else
            ObjectSet("Support"+"CCI"+period+Time[i]+Timeframe+resvalue+supvalue,OBJPROP_TIME2,iTime(NULL,0,drawsupend));

            if(showarrows)            
            buyarrow[i]=Low[i]-0.2*iATR(NULL,0,14,i);
            else
            buyarrow[i]=EMPTY_VALUE;

         } 
         else
         buyarrow[i]=EMPTY_VALUE;
         if(indicatorvalue[i+1]<supvalue&&indicatorvalue[i+0]<supvalue)
         {
            if(ObjectFind("Support"+"CCI"+period+Time[i]+Timeframe+resvalue+supvalue)!=-1)
            {            
               ObjectDelete("Support"+"CCI"+period+Time[i]+Timeframe+resvalue+supvalue);
               ObjectDelete("Support"+"label"+"CCI"+period+Time[i]+Timeframe+resvalue+supvalue);
            }
         }   

         if(showlabels&&(iBarShift(NULL,Timeframe,iTime(NULL,0,i))-iBarShift(NULL,Timeframe,iTime(NULL,0,drawsupend)))>3)
            {
                        if(ObjectFind("Support"+"CCI"+period+Time[i]+Timeframe+resvalue+supvalue)!=-1)
            {
               if(ObjectFind("Support"+"label"+"CCI"+period+Time[i]+Timeframe+resvalue+supvalue)==-1)
               {
               ObjectCreate("Support"+"label"+"CCI"+period+Time[i]+Timeframe+resvalue+supvalue,OBJ_TEXT,0,Time[drawsupend+4],suplow);
               ObjectSetText("Support"+"label"+"CCI"+period+Time[i]+Timeframe+resvalue+supvalue,"CCISup"+"("+period+")"+"_"+Timeframe);
               ObjectSet("Support"+"label"+"CCI"+period+Time[i]+Timeframe+resvalue+supvalue,OBJPROP_COLOR,supportColor);
               ObjectSet("Support"+"label"+"CCI"+period+Time[i]+Timeframe+resvalue+supvalue,OBJPROP_FONTSIZE,Labelsize);
               }
               else
               ObjectMove("Support"+"label"+"CCI"+period+Time[i]+Timeframe+resvalue+supvalue,1,Time[drawsupend+4],suplow);
            }     
         }

     if(SR2)
     {
         if(indicatorvalue[i+1]>supvalue&&indicatorvalue[i+0]<supvalue)
         {
            drawresend=Resistbars(i+LineShift);
            if(ObjectFind("Resistance2"+"CCI"+period+Time[i]+Timeframe+resvalue+supvalue)==-1)
            {
            DrawRes2(drawresend,i);

            reshigh=iHigh(NULL,Timeframe,iBarShift(NULL,Timeframe,iTime(NULL,0,i+LineShift)));
            }
            else
            ObjectSet("Resistance2"+"CCI"+period+Time[i]+Timeframe+resvalue+supvalue,OBJPROP_TIME2,iTime(NULL,0,drawresend));
            if(showarrows)
            {
            sellarrow[i]=High[i]+0.4*iATR(NULL,0,14,i);
            Print(sellarrow2[i]+" "+TimeToStr(Time[0],TIME_DATE|TIME_MINUTES));
            }
            else
            sellarrow2[i]=EMPTY_VALUE;

         }
         else
         sellarrow2[i]=EMPTY_VALUE;

   

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

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

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

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

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

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

Стоимость полного кода
1 189₽ ≈ $14.53