/*///+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~+ Три методики расчёта IBS,RSI,CCI все равноправны в упраляемости, у всех есть переворот расчёта, коэффициент относительности и аплиедпрайс ( для IBS это не значащий параметр, но стоит для симметрии параметров). Отрисовка линий идёт как средняя от трёх IBS,RSI,CCI . Внутри как прямого так и перевёрнутого можно в свою очередь перевернуть одину из методик, те они не зависимы как по перевороту так и по относительности. Так же через Shift линии можно двигать (Shift не может быть отрицательной). "вариант_1" управляет вариантами расчёта 1 или 2. По умолчанию стоит 2 --> "вариант_1 = false". "positive" управляет зеркальностью отображения. По умолчанию стоит нормальное отображение --> "positive = true". Методы скользящих: MODE_SMA 0 Простое скользящее среднее MODE_EMA 1 Экспоненциальное скользящее среднее MODE_SMMA 2 Сглаженное скользящее среднее MODE_LWMA 3 Линейно-взвешенное скользящее среднее app_price: PRICE_CLOSE 0 Цена закрытия PRICE_OPEN 1 Цена открытия PRICE_HIGH 2 Максимальная цена PRICE_LOW 3 Минимальная цена PRICE_MEDIAN 4 Средняя цена, (high+low)/2 PRICE_TYPICAL 5 Типичная цена, (high+low+close)/3 PRICE_WEIGHTED 6 Взвешенная цена закрытия, (high+low+close+close)/4 модификация индикатора WKBIBS, по просьбе Martingeila /*///+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~+ //+------------------------------------------------------------------+ //| IBS_RSI_CCI_v3.mq4 | //| Urain | //+------------------------------------------------------------------+ #property copyright "Urain" #property link "" #property indicator_separate_window //#property indicator_minimum 0 //#property indicator_maximum 100 #property indicator_buffers 3 #property indicator_color1 Yellow // буфер 0 - сигнальная линия #property indicator_color2 Red // буфер 1 - на продажу верхняя линия #property indicator_color3 Blue // буфер 2 - на покупку нижняя линия #property indicator_level1 0.0 //---- input parameters--------------------------------------- extern int per_IBS = 5; extern int глушка = 0; extern double koef_ibs = 7.0; extern bool ibs =true; extern int per_RSI = 14; extern int app_price_RSI = 0; //app_price extern double koef_rsi = 9.0; extern bool rsi =true; extern int per_CCI = 14; extern int app_price_CCI = 0; //app_price extern double koef_cci = 1.0; extern bool cci =true; extern int Shift = 0; extern int porog = 50; //---- input parameters--------------------------------------- extern bool вариант_1 =false; extern bool positive =true; extern int RangePeriod_VKWB = 25; extern int SmoothPeriod_VKWB = 3; extern int SmoothMode_VKWB = 0;//Методы скользящих //---- buffers double E0[], E1[], E2[], E3[], E4[], E5[], E6[]; int kibs=-1,kcci=-1,krsi=-1,posit=-1,xma1=1; //+------------------------------------------------------------------+ int init() { //---- indicators IndicatorBuffers(7); SetIndexStyle(0,DRAW_LINE); SetIndexBuffer(0,E0); SetIndexStyle(1,DRAW_LINE); SetIndexBuffer(1,E5); SetIndexDrawBegin(0,SmoothPeriod_VKWB); SetIndexStyle(2,DRAW_LINE); SetIndexBuffer(2,E6); SetIndexDrawBegin(1,SmoothPeriod_VKWB); SetIndexBuffer(3,E1); SetIndexBuffer(4,E2); SetIndexBuffer(5,E3); SetIndexBuffer(6,E4); if(cci)kcci=1; if(rsi)krsi=1; if(ibs)kibs=1; if(вариант_1)xma1=0; if(positive)posit=1; //---- return(0); } //+------------------------------------------------------------------+ int deinit(){return(0);} //+------------------------------------------------------------------+ int start() { int cb=IndicatorCounted(); //---- int i,limit,limit1,limit2,n_max,n_min; if(cb==0){limit=Bars-1; limit1=Bars-RangePeriod_VKWB; limit2=limit1-SmoothPeriod_VKWB;} if(cb>0) {limit=Bars-cb; limit1=Bars-cb; limit2=limit1;} limit--;limit1--;limit2--; Delitel( E2, limit); for(i=limit;i>=0;i--) {E1[i]=posit*iMA_IBS_RSI_CCI( E2, per_IBS , per_RSI , per_CCI , глушка , app_price_RSI, app_price_CCI, koef_ibs, koef_rsi , koef_cci , kibs , krsi , kcci , i+Shift); } for(i = limit;i>=0;i--) { E0[i]=E0[i+1]; double raz10=E1[i]-E0[i]; if(MathAbs(raz10)>porog) {if(raz10>0) E0[i]=E1[i]-porog*xma1; if(raz10<0) E0[i]=E1[i]+porog*xma1; } } for(i=limit1; i>=0;i--) {n_max=ArrayMaximum(E0,RangePeriod_VKWB,i); n_min=ArrayMinimum(E0,RangePeriod_VKWB,i); E3[i]=E0[n_max]; E4[i]=E0[n_min]; } for(i=limit2; i>=0;i--) {E5[i]=iMAOnArray(E3,0,SmoothPeriod_VKWB,0,SmoothMode_VKWB,i); E6[i]=iMAOnArray(E4,0,SmoothPeriod_VKWB,0,SmoothMode_VKWB,i); } //---- return(0); } //+------------------------------------------------------------------+ void Delitel(double& ExtMapBuffer[],int limit) { double delitel; for(int i=limit;i>=0;i--) {delitel=High[i]-Low[i]; if (delitel>0) ExtMapBuffer[i]=(Close[i]-Low[i])/delitel; else ExtMapBuffer[i]=0.0; } return; } double iMA_IBS_RSI_CCI(double ExtMapBuffer[], int per_IBS,int per_RSI,int per_CCI, int глушка,int app_price_RSI,int app_price_CCI, double koef_ibs,double koef_rsi,double koef_cci, int kibs,int krsi,int kcci, int i) { double sum=0.0; sum+=kibs*(iMAOnArray(ExtMapBuffer,0,per_IBS,0,MODE_SMA,i)-0.5)*100.0*koef_ibs; sum+=kcci*iCCI(NULL,0,per_CCI,app_price_CCI,i)*koef_cci; sum+=krsi*(iRSI(NULL,0,per_RSI,app_price_RSI,i)-50.0)*koef_rsi; sum*=1.0/3.0; return(sum); }