//+------------------------------------------------------------------+ //| to_ind_CandlCode_ICS.mq4 | //| * | //| * | //+------------------------------------------------------------------+ #property copyright "Integer" #property link "for-good-letters@yandex.ru" #property indicator_separate_window #property indicator_buffers 2 #property indicator_color1 Red #property indicator_color2 Yellow #property indicator_minimum 0 #property indicator_maximum 128 #property indicator_level1 35 #property indicator_level2 64 #property indicator_level3 93 //---- input parameters extern int BBPeriod=55; extern double BBDevs=0.5; extern int smPeriod=3; extern int smMethod=0; //---- buffers double body[]; double ushd[]; double lshd[]; double Buf4[]; double Buf5[]; double Buf6[]; double Buf7[]; //+------------------------------------------------------------------+ //| Custom indicator initialization function | //+------------------------------------------------------------------+ int init() { //---- indicators IndicatorBuffers(7); SetIndexStyle(0,DRAW_LINE); SetIndexBuffer(0,Buf4); SetIndexStyle(1,DRAW_LINE); SetIndexBuffer(1,Buf7); SetIndexBuffer(2,body); SetIndexBuffer(3,lshd); SetIndexBuffer(4,ushd); SetIndexBuffer(5,Buf5); SetIndexBuffer(6,Buf6); SetIndexLabel(0,"CandlCode ICS"); SetIndexLabel(1,"CandlCode ICS Smoothed"); IndicatorDigits(0); //---- return(0); } //+------------------------------------------------------------------+ //| Custom indicator deinitialization function | //+------------------------------------------------------------------+ int deinit() { //---- //---- return(0); } //+------------------------------------------------------------------+ //| Custom indicator iteration function | //+------------------------------------------------------------------+ int start() { int limit=Bars-IndicatorCounted()-1; for(int i=limit;i>=0;i--){ body[i]=MathAbs(Open[i]-Close[i]); lshd[i]=Close[i]-Low[i]; if(Close[i]>=Open[i])lshd[i]=Open[i]-Low[i]; ushd[i]=High[i]-Open[i]; if(Close[i]>=Open[i])ushd[i]=High[i]-Close[i]; } for(i=limit;i>=0;i--){ double ThBot_b=iMAOnArray(body,0,BBPeriod,0,1,i)-BBDevs*(iMAOnArray(body,0,BBPeriod,0,1,i)-iBandsOnArray(body,0,BBPeriod,1,0,MODE_LOWER,i)); double ThBot_l=iMAOnArray(lshd,0,BBPeriod,0,1,i)-BBDevs*(iMAOnArray(lshd,0,BBPeriod,0,1,i)-iBandsOnArray(lshd,0,BBPeriod,1,0,MODE_LOWER,i)); double ThBot_u=iMAOnArray(ushd,0,BBPeriod,0,1,i)-BBDevs*(iMAOnArray(ushd,0,BBPeriod,0,1,i)-iBandsOnArray(ushd,0,BBPeriod,1,0,MODE_LOWER,i)); double ThTop_b=iMAOnArray(body,0,BBPeriod,0,1,i)+BBDevs*(-iMAOnArray(body,0,BBPeriod,0,1,i)+iBandsOnArray(body,0,BBPeriod,1,0,MODE_UPPER,i)); double ThTop_l=iMAOnArray(lshd,0,BBPeriod,0,1,i)+BBDevs*(-iMAOnArray(lshd,0,BBPeriod,0,1,i)+iBandsOnArray(lshd,0,BBPeriod,1,0,MODE_UPPER,i)); double ThTop_u=iMAOnArray(ushd,0,BBPeriod,0,1,i)+BBDevs*(-iMAOnArray(ushd,0,BBPeriod,0,1,i)+iBandsOnArray(ushd,0,BBPeriod,1,0,MODE_UPPER,i)); double k1=0; if(Close[i]==Open[i])k1=1; double k2=48; if(ushd[i]>=lshd[i])k2=64; double k3=1; if(Close[i]==Open[i])k3=0; double k4=0; if(Close[i]>Open[i])k4=1; double k5=0; if(body[i]<=ThBot_b)k5=80; double k6=0; if(body[i]>ThBot_b && body[i]<=ThTop_b)k6=96; double k7=0; if(body[i]>ThTop_b)k7=112; double k8=0; if(Close[i]<Open[i])k8=1; double k9=0; if(body[i]<=ThBot_b)k9=32; double k10=0; if(body[i]>ThBot_b && body[i]<=ThTop_b)k10=16; double CandleCode_b=k1*k2+k3*(k4*(k5+k6+k7)+k8*(k9+k10)); k1=0; if(lshd[i]==0)k1=3; k2=0; if(lshd[i]<ThBot_l && lshd[i]>0)k2=2; k3=0; if(lshd[i]>ThBot_l && lshd[i]<=ThTop_l && lshd[i]>0)k3=1; double CandleCode_l=k1+k2+k3; k1=0; if(ushd[i]>0 && ushd[i]<=ThBot_u)k1=4; k2=0; if(ushd[i]>ThBot_u && ushd[i]<=ThTop_u)k2=8; k3=0; if(ushd[i]>ThTop_u)k3=12; double CandleCode_u=k1+k2+k3; double CandlCode=CandleCode_b+CandleCode_l+CandleCode_u; Buf4[i]=CandlCode; } for(i=limit;i>=0;i--){ Buf5[i]=iMAOnArray(Buf4,0,smPeriod,0,smMethod,i); } for(i=limit;i>=0;i--){ Buf6[i]=iMAOnArray(Buf5,0,smPeriod,0,smMethod,i); } for(i=limit;i>=0;i--){ Buf7[i]=iMAOnArray(Buf6,0,smPeriod,0,smMethod,i); } //---- //---- return(0); } //+------------------------------------------------------------------+
Sample
Analysis
Market Information Used:
Series array that contains close prices for each bar
Series array that contains open prices of each bar
Series array that contains the lowest prices of each bar
Series array that contains the highest prices of each bar
Indicator Curves created:
Implements a curve of type DRAW_LINE
Indicators Used:
Moving average indicator
Custom Indicators Used:
Order Management characteristics:
Other Features: