Author: created by Art
Ball
Indicators Used
Moving average indicator
Miscellaneous
Implements a curve of type %1
0 Views
0 Downloads
0 Favorites
Ball
//+------------------------------------------------------------------+
//|                                                        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);
  }
//+------------------------------------------------------------------+

Comments

Markdown supported. Formatting help

Markdown Formatting Guide

Element Markdown Syntax
Heading # H1
## H2
### H3
Bold **bold text**
Italic *italicized text*
Link [title](https://www.example.com)
Image ![alt text](image.jpg)
Code `code`
Code Block ```
code block
```
Quote > blockquote
Unordered List - Item 1
- Item 2
Ordered List 1. First item
2. Second item
Horizontal Rule ---