//+--------------------------------------------------------+ //| Candle_Code Ñâå÷íîé èíäèêàòîð ñèììåòðè÷íûé êîä.mq4| //|Copight © 2005,àëãîðèòì Ëèõîâèäîâ, äîðàáîòàë Tiger Woods| //| e-mail:tagir1970@mail.ru| //+--------------------------------------------------------+ //Îñíîâíîå îòëè÷èå îò èíäèêàòîðà Ëèõîâèäîâà â òîì, ÷òî áåëûå è ÷åðíûå ñâå÷è êîäèðóþòñÿ îäèíàêîâûì îáðàçîì, //ò.å. åñëè ó áåëîé ñâå÷è êîä ðàâåí 50, òî ó òàêîé æå ÷åðíîé ñâå÷è êîä ðàâåí -50. Òàêèì îáðàçîì, èíäèêàòîð ñèììåòðè÷åí //îòíîñèòåëüíî íóëåâîé ëèíèè. #property copyright "Copyright © 2005-2007,Tiger Woods" #property link "e-mail:tagir1970@mail.ru" //---- indicator settings #property indicator_separate_window #property indicator_minimum -50 #property indicator_maximum 50 #property indicator_buffers 2 #property indicator_color1 Red #property indicator_color2 Blue #property indicator_level1 -25 #property indicator_level2 -50 #property indicator_level3 50 #property indicator_level4 25 #property indicator_level5 0 //---- ïàðàìåòðû èíäèêàòîðà //extern int îñíîâíàÿ_ëèíèÿ =3; //ïåðèîä ñðåäíåé ïðè ñãëàæèâàíèè îñíîâíîé ëèíèè //extern int ñèãíàëüíàÿ_ëèíèÿ =2; //ïåðèîä ñðåäíåé ïðè ñãëàæèâàíèè ñèãíàëüíîé ëèíèè extern int îñíîâíàÿ_ëèíèÿ =3; //ïåðèîä ñðåäíåé ïðè ñãëàæèâàíèè îñíîâíîé ëèíèè extern int ñèãíàëüíàÿ_ëèíèÿ =2; //ïåðèîä ñðåäíåé ïðè ñãëàæèâàíèè ñèãíàëüíîé ëèíèè extern int òåëî_äîæè =5; //ðàçìåð òåëà ñâå÷è â ïóíêòàõ, ïðè êîòîðîì îíà ñ÷èòàåòñÿ äîæè extern int áîëëèíäæåð =55; //ïåðèîä Áîëëèíäæåðà extern double îòêëîíåíèå =0.5;//ñòàíäàðòíîå îòêëîíåíèå //---- èíäèêàòîðíûå ìàññèâû double code[],code_av1[],code_av2[],code_av3[],code_av4[],h_shadow[],l_shadow[],body[]; #define MODE_UPPER 1 #define MODE_LOWER 2 int init() { //---- Äëÿ ðàñ÷åòîâ èñïîëüçóþ 8 ìàññèâîâ IndicatorBuffers(8); //----óñòàíîâêè äëÿ ðèñîâàíèÿ SetIndexStyle(0,DRAW_LINE); SetIndexDrawBegin(0,2*îñíîâíàÿ_ëèíèÿ); SetIndexStyle(1,DRAW_LINE); SetIndexDrawBegin(1,2*(îñíîâíàÿ_ëèíèÿ+ñèãíàëüíàÿ_ëèíèÿ)); IndicatorDigits(2); //---- 2 èíäèêàòîðíûõ ìàññèâà è 6 äëÿ âû÷èñëåíèé if(!SetIndexBuffer(0,code_av2)&&!SetIndexBuffer(1,code_av4)&& !SetIndexBuffer(2,code_av1)&&!SetIndexBuffer(3,code_av3)&& !SetIndexBuffer(4, code)&&!SetIndexBuffer(5, body)&& !SetIndexBuffer(6,l_shadow)&&!SetIndexBuffer(7,h_shadow)) Print("cannot set indicator buffers!"); //---- Èìÿ äëÿ îêíà è ïåðèîäîâ IndicatorShortName("Èíäåêñ ÍÐ("+îñíîâíàÿ_ëèíèÿ+","+ñèãíàëüíàÿ_ëèíèÿ+","+òåëî_äîæè+","+áîëëèíäæåð+","+DoubleToStr(îòêëîíåíèå,1)+")"); //---- Èíèöèàëèçàöèÿ ñäåëàíà return(0); } int start() { double h_limit_body,h_limit_h_shadow,h_limit_l_shadow,l_limit_body,l_limit_h_shadow,l_limit_l_shadow; int i,counted_bars=IndicatorCounted(),limit=Bars-counted_bars; if(counted_bars<0) return(-1); //---- ïîñëåäíèé áàð âû÷èñëþ åùå ðàç if(counted_bars>0) limit--; //âû÷èñëÿþ âåëè÷èíû òåëà è òåíåé äëÿ áàðîâ, íà÷èíàÿ ñ limit äî 0 for(i=limit;i>=0;i--) { body [i]=MathAbs(Open[i]-Close[i]); //òåëî h_shadow[i]=High[i]-MathMax(Open[i],Close[i]);//âåðõíÿÿ òåíü l_shadow[i]=MathMin(Open[i],Close[i])-Low[i]; //íèæíÿÿ òåíü } //âû÷èñëÿþ code äëÿ ýëåìåíòîâ ìàññèâà for(i=limit;i>=0;i--) { code[i]=0;//îáíóëÿþ ñòàðîå çíà÷åíèå //âû÷èñëÿþ ïîðîãè äëÿ òåëà è òåíåé áàðà h_limit_body =BandsOnArray(body, Bars,áîëëèíäæåð,îòêëîíåíèå,MODE_UPPER,i);//âåðõíèé ïîðîã äëÿ òåëà l_limit_body =BandsOnArray(body, Bars,áîëëèíäæåð,îòêëîíåíèå,MODE_LOWER,i);//íèæíèé ïîðîã äëÿ òåëà h_limit_h_shadow=BandsOnArray(h_shadow,Bars,áîëëèíäæåð,îòêëîíåíèå,MODE_UPPER,i);//âåðõíèé ïîðîã äëÿ âåðõíåé òåíè l_limit_h_shadow=BandsOnArray(h_shadow,Bars,áîëëèíäæåð,îòêëîíåíèå,MODE_LOWER,i);//íèæíèé ïîðîã äëÿ âåðõíåé òåíè h_limit_l_shadow=BandsOnArray(l_shadow,Bars,áîëëèíäæåð,îòêëîíåíèå,MODE_UPPER,i);//âåðõíèé ïîðîã äëÿ íèæíåé òåíè l_limit_l_shadow=BandsOnArray(l_shadow,Bars,áîëëèíäæåð,îòêëîíåíèå,MODE_LOWER,i);//íèæíèé ïîðîã äëÿ íèæíåé òåíè //âû÷èñëÿþ êîä äëÿ öâåòà è äëÿ òåëà ñâå÷è if(body[i]>òåëî_äîæè*Point)//íå äîæè { if(Close[i]>Open[i])//áåëàÿ ñâå÷à { if (body[i]<l_limit_body) code[i]+=16;//ìàëåíüêîå òåëî else if(body[i]<h_limit_body) code[i]+=32;//ñðåäíåå òåëî else code[i]+=48;//áîëüøîå òåëî } else //÷åðíàÿ ñâå÷à { if (body[i]<l_limit_body) code[i]-=16;//ìàëåíüêîå òåëî else if(body[i]<h_limit_body) code[i]-=32;//ñðåäíåå òåëî else code[i]-=48;//áîëüøîå òåëî } } else code[i]+= 0;//äîæè //âû÷èñëÿþ êîä äëÿ âåðõíåé òåíè if (h_shadow[i]==0) code[i]+= 0;//âåðõíÿÿ òåíü îòñóòñòâóåò else if(h_shadow[i]<l_limit_h_shadow) code[i]+= 4;//ìàëåíüêàÿ âåðõíÿÿ òåíü else if(h_shadow[i]<h_limit_h_shadow) code[i]+= 8;//ñðåäíÿÿ âåðõíÿÿ òåíü else code[i]+=12;//áîëüøàÿ âåðõíÿÿ òåíü //âû÷èñëÿþ êîä äëÿ íèæíåé òåíè if (l_shadow[i]==0) code[i]-= 0;//íèæíÿÿ òåíü îòñóòñòâóåò else if(l_shadow[i]<l_limit_l_shadow) code[i]-= 4;//ìàëåíüêàÿ íèæíÿÿ òåíü else if(l_shadow[i]<h_limit_l_shadow) code[i]-= 8;//ñðåäíÿÿ íèæíÿÿ òåíü else code[i]-=12;//áîëüøàÿ íèæíÿÿ òåíü } //îñíîâíàÿ ëèíèÿ, ñãëàæèâàíèå 2 ðàçà for(i=limit;i>=0;i--) code_av1[i]=iMAOnArray(code, Bars,îñíîâíàÿ_ëèíèÿ, 0,3,i); for(i=limit;i>=0;i--) code_av2[i]=iMAOnArray(code_av1,Bars,îñíîâíàÿ_ëèíèÿ, 0,3,i); //ñèãíàëüíàÿ ëèíèÿ, ñãëàæèâàíèå 2 ðàçà for(i=limit;i>=0;i--) code_av3[i]=iMAOnArray(code_av2,Bars,ñèãíàëüíàÿ_ëèíèÿ,0,3,i); for(i=limit;i>=0;i--) code_av4[i]=iMAOnArray(code_av3,Bars,ñèãíàëüíàÿ_ëèíèÿ,0,3,i); return(0); } //--------------------------------------------------------------------------- //Ðàñ÷åò èíäèêàòîðà Bollinger Bands ñ äðîáíûì îòêëîíåíèåì íà äàííûõ, õðàíÿùèõñÿ â ìàññèâå (îäíà òî÷êà): //--------------------------------------------------------------------------- double BandsOnArray(double array[],int total,int period,double b_deviation,int mode,int shift) { double deviation,sum,newres,ma_centr; if((shift+period)>=total||shift<0) return(0); //Âû÷èñëèì öåíòðàëüíóþ ëèíèþ (ñðåäíþþ): ma_centr=0.0; int k=shift+period-1; while(k>=shift) { ma_centr+=array[k]; k--; } ma_centr=ma_centr/period; //Âåðõíÿÿ/íèæíÿÿ ëèíèè êàíàëà: sum=0.0; k=shift+period-1; while(k>=shift) { newres=array[k]-ma_centr; sum +=newres*newres; k--; } deviation=b_deviation*MathSqrt(sum/period); if(mode==MODE_UPPER) return(ma_centr+deviation); if(mode==MODE_LOWER) return(ma_centr-deviation); 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 highest prices of each bar
Series array that contains the lowest 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: