Silence





//+---------------------------------------------------------------------+
//|                                                      Silence.mq4    |
//|                                         Copyright © Trofimov 2009   |
//+---------------------------------------------------------------------+
//| Òèøèíà                                                              |
//|                                                                     |
//| Îïèñàíèå: Ïîêàçûâàåò íà ñêîëüêî ïðîöåíòîâ àêòèâåí ðûíîê             |
//| Ñèíÿÿ - ïðîöåíò àãðåññèâíîñòè (ñêîðîñòè èçìåíåíèÿ öåíû)             |
//| Êðàñíàÿ - ïðîöåíò âîëàòèëüíîñòè (âåëè÷èíà êîðèäîðà)                 |
//| Àâòîðñêîå ïðàâî ïðèíàäëåæèò Òðîôèìîâó Åâãåíèþ Âèòàëüåâè÷ó, 2009     |
//+---------------------------------------------------------------------+


#property copyright "Copyright © Trofimov Evgeniy Vitalyevich, 2009"
#property link      "http://TrofimovVBA.narod.ru/"

//---- Ñâîéñòâà èíäèêàòîðà
#property indicator_separate_window
#property indicator_buffers 2
#property indicator_color1 MidnightBlue
#property indicator_width1 1
#property indicator_color2 Maroon
#property indicator_width2 1
#property indicator_maximum 100
#property indicator_minimum 0
#property indicator_level1 50

//---- Âõîäÿùèå ïàðàìåòðû
extern int MyPeriod=12;
extern int BuffSize=96;
bool ReDraw=true; //-åñëè âêëþ÷åí, òî ïåðåðèñîâûâàåò íóëåâîé áàð ïðè êàæäîì íîâîì òèêå
// åñëè âûêëþ÷åí, òî íóëåâîé áàð ñîäåðæèò ôèêñèðîâàííîå çíà÷åíèå, âû÷èñëåííîå ïî ïðåäûäóùèì (ãîòîâûì) áàðàì
double Buff_line1[]; // - àãðåññèâíîñòü 
double Buff_line2[]; // - âîëàòèëüíîñòü
double Aggress[], Volatility[];
//+------------------------------------------------------------------+
//|                Ôóíêöèÿ èíèöèàëèçàöèè èíäèêàòîðà                  |
//+------------------------------------------------------------------+
int init()
  {
//---- x äîïîëíèòåëüíûõ áóôåðà, èñïîëüçóåìûõ äëÿ ðàñ÷åòà
   IndicatorBuffers(2);
   IndicatorDigits(2); 
//---- ïàðàìåòðû ðèñîâàíèÿ (óñòàíîâêà íà÷àëüíîãî áàðà)
   SetIndexDrawBegin(0,BuffSize+MyPeriod);
   SetIndexDrawBegin(1,BuffSize+MyPeriod);
//---- x ðàñïðåäåëåííûõ áóôåðà èíäèêàòîðà
   SetIndexBuffer(0,Buff_line1);
   SetIndexBuffer(1,Buff_line2);
//---- èìÿ èíäèêàòîðà è ïîäñêàçêè äëÿ ëèíèé
   IndicatorShortName("Silence("+MyPeriod+","+BuffSize+") = ");
   SetIndexLabel(0,"Aggressiveness");
   SetIndexLabel(1,"Volatility");
   ArrayResize(Aggress,BuffSize);
   ArrayResize(Volatility,BuffSize);
   return(0);
  }
//+------------------------------------------------------------------+
//|                Ôóíêöèÿ èíäèêàòîðà                                |
//+------------------------------------------------------------------+
int start() {
   static datetime LastTime;
   int limit, RD;
   double MAX,MIN;
   double upPrice,downPrice;
   if(ReDraw) RD=1;
   // Ïðîïóùåííûå áàðû
   int counted_bars=IndicatorCounted();
//---- îáõîäèì âîçìîæíûå îøèáêè
   if(counted_bars<0) return(-1);
//---- íîâûå áàðû íå ïîÿâèëèñü è ïîýòîìó íè÷åãî ðèñîâàòü íå íóæíî
   limit=Bars-counted_bars-1+RD;
//---- îñíîâíûå ïåðåìåííûå
   double B;
//---- îñíîâíîé öèêë
   for(int t=limit-RD; t>-RD; t--) {
      
      //Âû÷èñëåíèå àãðåññèâíîñòè áàðà t
      B=0;
      for(int x=t+MyPeriod-1; x>=t; x--) { 
         if(Close[x]>Open[x]) {
            //áåëàÿ ñâå÷à
            B=B+(Close[x]-Close[x+1]);
         }else{
            //÷¸ðíàÿ ñâå÷à
            B=B+(Close[x+1]-Close[x]);
         }
      }//Next x
      
      //Âû÷èñëåíèå âîëàòèëüíîñòè áàðà t
      upPrice=High[iHighest(Symbol(),0,MODE_HIGH,MyPeriod,t)];//ìàêñèìóì çà N áàðîâ 
      downPrice=Low[iLowest(Symbol(),0,MODE_LOW,MyPeriod,t)]; //ìèíèìóì çà N áàðîâ 
      
      //Åñëè îáðàçîâàëñÿ íîâûé áàð, òî ïðîèçâîäèòñÿ ñäâèæêà ìàññèâà
      if(LastTime!=Time[t+1]){
         for(x=BuffSize-1; x>0; x--) {
            Aggress[x]=Aggress[x-1];
            Volatility[x]=Volatility[x-1];
         }//Next x
         LastTime=Time[t+1];
      }
      //Êîíåö ñäâèæêè ìàññèâà
      
      //Ïåðåðèñîâêà àãðåññèâíîñòè
      Aggress[0]=B/Point/MyPeriod;
      MAX=Aggress[ArrayMaximum(Aggress)];
      MIN=Aggress[ArrayMinimum(Aggress)];
      Buff_line1[t]=Èíòåðïîëÿöèÿ(MAX,MIN,100,0,Aggress[0]);
      if(!ReDraw && t==1) Buff_line1[0]=Buff_line1[1];
      //Êîíåö ïåðåðèñîâêà àãðåññèâíîñòè
      
      //Ïåðåðèñîâêà âîëàòèëüíîñòè
      Volatility[0]=(upPrice-downPrice)/Point/MyPeriod;
      MAX=Volatility[ArrayMaximum(Volatility)];
      MIN=Volatility[ArrayMinimum(Volatility)];
      Buff_line2[t]=Èíòåðïîëÿöèÿ(MAX,MIN,100,0,Volatility[0]);
      if(!ReDraw && t==1) Buff_line2[0]=Buff_line2[1];
      //Êîíåö ïåðåðèñîâêà âîëàòèëüíîñòè
      
   }//Next t
   return(0);
}
//+------------------------------------------------------------------+
double Èíòåðïîëÿöèÿ(double a,double b,double c,double d,double X) {
//a; X; b - ñòîëáåö èçâåòíûõ ÷èñåë, c; d; - ñòîëáåö ñî ñòîðîíû íåèçâåñòíîé.
    if(b - a == 0)
        return(10000000); //áåñêîíå÷íîñòü
    else
        return(d - (b - X) * (d - c) / (b - a));
}//Èíòåðïîëÿöèÿ
//+------------------------------------------------------------------+





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 highest prices of each bar
Series array that contains the lowest prices of each bar
Series array that contains open time of each bar


Indicator Curves created:



Indicators Used:



Custom Indicators Used:

Order Management characteristics:

Other Features: