//+---------------------------------------------------------------------+ //| Silence.mq4 | //| Copyright © Trofimov 2009 | //+---------------------------------------------------------------------+ //| Òèøèíà | //| | //| Îïèñàíèå: Ïîêàçûâàåò íà ñêîëüêî ïðîöåíòîâ àêòèâåí ðûíîê | //| Ñèíÿÿ - ïðîöåíò àãðåññèâíîñòè (ñêîðîñòè èçìåíåíèÿ öåíû) | //| Êðàñíàÿ - ïðîöåíò âîëàòèëüíîñòè (ïî èíäèêàòîðó StdDev) | //| Àâòîðñêîå ïðàâî ïðèíàäëåæèò Òðîôèìîâó Åâãåíèþ Âèòàëüåâè÷ó, 2009 | //+---------------------------------------------------------------------+ //============================================================================================================================= // Äîðàáîòêà èíäèêàòîðà DS dolsergon@yandex.ru // äîáàâëåíà ñðåäíÿÿ ìåæäó äâóõ ëèíèé #property copyright "Copyright © Trofimov Evgeniy, 2009" #property link "http://www.mql4.com/ru/users/EvgeTrofi" //---- Ñâîéñòâà èíäèêàòîðà #property indicator_separate_window #property indicator_buffers 3 #property indicator_color1 CLR_NONE #property indicator_width1 1 #property indicator_color2 Yellow #property indicator_width2 1 #property indicator_color3 CLR_NONE #property indicator_width3 2 #property indicator_maximum 100 #property indicator_minimum 0 #property indicator_level1 78 //---- Âõîäÿùèå ïàðàìåòðû extern int MyPeriod=12; extern int BuffSize=96; bool ReDraw=true; //-åñëè âêëþ÷åí, òî ïåðåðèñîâûâàåò íóëåâîé áàð ïðè êàæäîì íîâîì òèêå // åñëè âûêëþ÷åí, òî íóëåâîé áàð ñîäåðæèò ôèêñèðîâàííîå çíà÷åíèå, âû÷èñëåííîå ïî ïðåäûäóùèì (ãîòîâûì) áàðàì double Buff_line1[]; // - àãðåññèâíîñòü double Buff_line2[]; // - âîëàòèëüíîñòü double Buff_line3[]; // - îáùåå ñðåäíåå double Aggress[], Volatility[]; //+------------------------------------------------------------------+ //| Ôóíêöèÿ èíèöèàëèçàöèè èíäèêàòîðà | //+------------------------------------------------------------------+ int init() { //---- x äîïîëíèòåëüíûõ áóôåðà, èñïîëüçóåìûõ äëÿ ðàñ÷åòà IndicatorBuffers(3); IndicatorDigits(2); //---- ïàðàìåòðû ðèñîâàíèÿ (óñòàíîâêà íà÷àëüíîãî áàðà) SetIndexDrawBegin(0,BuffSize+MyPeriod); SetIndexDrawBegin(1,BuffSize+MyPeriod); SetIndexDrawBegin(2,BuffSize+MyPeriod); //---- x ðàñïðåäåëåííûõ áóôåðà èíäèêàòîðà SetIndexBuffer(0,Buff_line1); SetIndexBuffer(1,Buff_line2); SetIndexBuffer(2,Buff_line3); //---- èìÿ èíäèêàòîðà è ïîäñêàçêè äëÿ ëèíèé IndicatorShortName("Silence2("+MyPeriod+","+BuffSize+") = "); SetIndexLabel(0,"Aggressiveness"); SetIndexLabel(1,"Volatility"); SetIndexLabel(1,"Middle"); ArrayResize(Aggress,BuffSize); ArrayResize(Volatility,BuffSize); return(0); } //+------------------------------------------------------------------+ //| Ôóíêöèÿ èíäèêàòîðà | //+------------------------------------------------------------------+ int start() { static datetime LastTime; int limit, RD; double MAX,MIN; //double upPrice,downPrice; double dAmount,dMovingAverage,dAPrice; 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 áàðîâ dAmount=0.0; dMovingAverage=iMA(NULL,0,MyPeriod,0,0,0,t); for(x=t+MyPeriod-1; x>=t; x--) { dAPrice=Close[x]; dAmount+=(dAPrice-dMovingAverage)*(dAPrice-dMovingAverage); } //Åñëè îáðàçîâàëñÿ íîâûé áàð, òî ïðîèçâîäèòñÿ ñäâèæêà ìàññèâà 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]=MathSqrt(dAmount/MyPeriod); MAX=Volatility[ArrayMaximum(Volatility)]; MIN=Volatility[ArrayMinimum(Volatility)]; Buff_line2[t]=Èíòåðïîëÿöèÿ(MAX,MIN,100,0,Volatility[0]); Set_Line3(t); if(!ReDraw && t==1) { Buff_line2[0]=Buff_line2[1]; Set_Line3(0); } //Êîíåö ïåðåðèñîâêà âîëàòèëüíîñòè }//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)); }//Èíòåðïîëÿöèÿ //+------------------------------------------------------------------+ //=================================================================================== void Set_Line3(int pBar) { Buff_line3[pBar] = (Buff_line1[pBar] + Buff_line2[pBar]) / 2; }
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 open time of each bar
Indicator Curves created:
Indicators Used:
Moving average indicator
Custom Indicators Used:
Order Management characteristics:
Other Features: