//+------------------------------------------------------------------+ //| Ball.mq4 | //| | //+------------------------------------------------------------------+ #property copyright "created by Art " #property link "shaddow@yandex.ru" #property indicator_separate_window #property indicator_buffers 3 #property indicator_color1 Gray #property indicator_color2 Lime #property indicator_color3 Red #property indicator_level1 100 #property indicator_level2 -100 #property indicator_level3 0 #property indicator_minimum -185 #property indicator_maximum 185 //---- indicator parameters extern int BandsPeriod=20; extern double BandsDeviations=2.0; extern int ModeMA=0; //MODE_SMA 0 Ïðîñòîå ñêîëüçÿùåå ñðåäíåå //MODE_EMA 1 Ýêñïîíåíöèàëüíîå ñêîëüçÿùåå ñðåäíåå //MODE_SMMA 2 Ñãëàæåííîå ñêîëüçÿùåå ñðåäíåå //MODE_LWMA 3 Ëèíåéíî-âçâåøåííîå ñêîëüçÿùåå ñðåäíåå extern int ModePrice=0; //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 double ExtMapBufferUpper []; double ExtMapBufferMiddle[]; double ExtMapBufferLower []; int BandsShift=0; int IndicatorLowZnach, IndicatorUpZnach, IndicatorHeightZnach; double LowerBB, UpperBB, MiddleBB, PriceChannelHigh, PriceChannelLo, PriceChannel ; // ïîëîñû Áîëëèíäæåðà int init() { SetIndexStyle(0,0,0,1); SetIndexBuffer(0,ExtMapBufferMiddle); SetIndexLabel(0,"Ñðåäíÿÿ"); SetIndexStyle(1,0,0,1); SetIndexBuffer(1,ExtMapBufferUpper); SetIndexLabel(1,"Âåðõíÿÿ"); SetIndexStyle(2,0,0,1); SetIndexBuffer(2,ExtMapBufferLower); SetIndexLabel(2,"Íèæíÿÿ"); //---- SetIndexDrawBegin(0,BandsPeriod+BandsShift); SetIndexDrawBegin(1,BandsPeriod+BandsShift); SetIndexDrawBegin(2,BandsPeriod+BandsShift); IndicatorShortName("Ball"); string StrMA,StrModePrice; //MODE_SMA 0 Ïðîñòîå ñêîëüçÿùåå ñðåäíåå //MODE_EMA 1 Ýêñïîíåíöèàëüíîå ñêîëüçÿùåå ñðåäíåå //MODE_SMMA 2 Ñãëàæåííîå ñêîëüçÿùåå ñðåäíåå //MODE_LWMA 3 Ëèíåéíî-âçâåøåííîå ñêîëüçÿùåå ñðåäíåå //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 StrMA=""; StrModePrice=""; if (ModeMA==0) StrMA ="Ïðîñòîå ñêîëüçÿùåå ñðåäíåå"; if (ModeMA==1) StrMA ="Ýêñïîíåíöèàëüíîå ñêîëüçÿùåå ñðåäíåå"; if (ModeMA==2) StrMA ="Ñãëàæåííîå ñêîëüçÿùåå ñðåäíåå"; if (ModeMA==3) StrMA ="Ëèíåéíî-âçâåøåííîå ñêîëüçÿùåå ñðåäíåå"; if ((ModeMA>3) || (ModeMA<0)) { StrMA ="Ïðîñòîå ñêîëüçÿùåå ñðåäíåå"; ModeMA=0; } if (ModePrice==0) StrModePrice ="Öåíà çàêðûòèÿ"; if (ModePrice==1) StrModePrice ="Öåíà îòêðûòèÿ"; if (ModePrice==2) StrModePrice ="Ìàêñèìàëüíàÿ öåíà"; if (ModePrice==3) StrModePrice ="Ìèíèìàëüíàÿ öåíà"; if (ModePrice==4) StrModePrice ="Ñðåäíÿÿ öåíà"; if (ModePrice==5) StrModePrice ="Òèïè÷íàÿ öåíà"; if (ModePrice==6) StrModePrice ="Âçâåøåííàÿ öåíà çàêðûòèÿ"; if ((ModePrice>6) || (ModePrice<0)) { StrModePrice ="Öåíà çàêðûòèÿ"; ModePrice=0; } Comment("Ìåòîä âû÷èñëåíèÿ MA ",StrMA,"\n","Èñïîëüçóåìàÿ öåíà äëÿ ðàñ÷¸òà ",StrModePrice); //---- return(0); } //+------------------------------------------------------------------+ //| Bollinger Bands | //+------------------------------------------------------------------+ int start() { int i,k,counted_bars=IndicatorCounted(); double deviation; double sum,oldval,newres; double tempValMid; //---- if(Bars<=BandsPeriod) return(0); //---- int limit=Bars-counted_bars; if(counted_bars>0) limit++; for(i=0; i<limit; i++) tempValMid=iMA(NULL,0,BandsPeriod,BandsShift,ModeMA,ModePrice,i); //---- i=Bars-BandsPeriod+1; if(counted_bars>BandsPeriod-1) i=Bars-counted_bars-1; while(i>=0) { sum=0.0; k=i+BandsPeriod-1; tempValMid=iMA(NULL,0,BandsPeriod,BandsShift,ModeMA,ModePrice,i); oldval=tempValMid; while(k>=i) { newres=Close[k]-oldval; sum+=newres*newres; k--; } deviation=BandsDeviations*MathSqrt(sum/BandsPeriod); ExtMapBufferMiddle[i]=tempValMid; UpperBB= oldval+deviation; MiddleBB=ExtMapBufferMiddle[i]; LowerBB= oldval-deviation; double myPriceH=High[i]; double myPriceL=Low[i]; IndicatorLowZnach=-1*(NormalizeDouble(((MiddleBB-myPriceL)*100)/((MiddleBB-LowerBB)),0)); IndicatorUpZnach= NormalizeDouble(((myPriceH-MiddleBB)*100)/((UpperBB-MiddleBB)),0); ExtMapBufferUpper[i] =IndicatorUpZnach; ExtMapBufferMiddle[i]=(IndicatorUpZnach+IndicatorLowZnach)/2; ExtMapBufferLower[i] =IndicatorLowZnach; i--; } //---- return(0); } //+------------------------------------------------------------------+
Sample
Analysis
Market Information Used:
Series array that contains close prices for each bar
Series array that contains the highest prices of each bar
Series array that contains the lowest prices of each bar
Indicator Curves created:
Implements a curve of type 0
Indicators Used:
Moving average indicator
Custom Indicators Used:
Order Management characteristics:
Other Features: