indicatorcrosscci 8v2.mq5
Сообщите нам, если считаете, что материал размещён без разрешения.
Сообщить о материале
Обращение по товару «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? После подтверждения оплаты файл сохранится в кабинете на этот email. Если аккаунта ещё нет, мы создадим его и пришлём ссылку для задания пароля. Если аккаунт уже есть, покупка добавится в него. Укажите адрес, к которому у вас есть доступ.
Чтобы оформить заказ, введите email и перейдите к оплате.