//+---------------------------------------------------------------------+ //| MLSOnGraphics.mq4 | //| The Method of Least Squares | //| High and Low ver. 7 | //| Copyright © Trofimov 2008 | //+---------------------------------------------------------------------+ //| Ìåòîä íàèìåíüøèõ êâàäðàòîâ | //| ïî âåðõíåé è íèæíåé îòìåòêå ñâå÷è | //| Îïèñàíèå: Ðàñ÷¸ò ìèíèìàëüíîãî êâàäðàòè÷íîãî îòëîíåíèÿ îò ïðÿìîé | //| â ïóíêòàõ. Åñëè ðûíîê êîëåáëåòñÿ â ïðåäåëàõ òàíãåíñà | //| óãëà íàêëîíà ëèíèè òðåíäà ê ãîðèçîíòàëüíîé ïðÿìîé | //| òî òðåíä ðàçâèâàåòñÿ óâåðåííî è ðàâíîìåðíî. | //| Àâòîðñêîå ïðàâî ïðèíàäëåæèò Òðîôèìîâó Åâãåíèþ Âèòàëüåâè÷ó, 2008 | //+---------------------------------------------------------------------+ #property copyright "Copyright © Trofimov Evgeniy Vitalyevich, 2008" #property link "http://multitest.semico.ru/mnk.htm" //---- Ñâîéñòâà èíäèêàòîðà #property indicator_chart_window #property indicator_buffers 5 #property indicator_color1 DarkBlue #property indicator_width1 2 #property indicator_color2 FireBrick #property indicator_width2 2 #property indicator_color3 Blue #property indicator_width3 1 #property indicator_color4 Red #property indicator_width4 1 #property indicator_color5 Silver #property indicator_width5 1 //---- Âõîäÿùèå ïàðàìåòðû extern int MyPeriod=12; extern int Shift=0; extern int Future=0; extern bool CalculateDeflection=true; extern bool ReDraw=true; //-åñëè âêëþ÷åí, òî ïåðåðèñîâûâàåò íóëåâîé áàð ïðè êàæäîì íîâîì òèêå // åñëè âûêëþ÷åí, òî íóëåâîé áàð ñîäåðæèò ôèêñèðîâàííîå çíà÷åíèå, âû÷èñëåííîå ïî ïðåäûäóùèì (ãîòîâûì) áàðàì //---- Ìàññèâ äàííûõ èíäèêàòîðà double MLS_H[]; double MLS_L[]; double MLS_HD[]; double MLS_LD[]; double MLS_b[]; //+------------------------------------------------------------------+ //| Ôóíêöèÿ èíèöèàëèçàöèè èíäèêàòîðà | //+------------------------------------------------------------------+ int init() { //---- x äîïîëíèòåëüíûõ áóôåðà, èñïîëüçóåìûõ äëÿ ðàñ÷åòà IndicatorBuffers(5); //---- ïàðàìåòðû ðèñîâàíèÿ (óñòàíîâêà íà÷àëüíîãî áàðà) SetIndexDrawBegin(0,MyPeriod); SetIndexDrawBegin(1,MyPeriod); SetIndexDrawBegin(2,MyPeriod); SetIndexDrawBegin(3,MyPeriod); SetIndexDrawBegin(4,MyPeriod); SetIndexShift(0,Shift); SetIndexShift(1,Shift); SetIndexShift(2,Shift); SetIndexShift(3,Shift); SetIndexShift(4,Shift); //---- x ðàñïðåäåëåííûõ áóôåðà èíäèêàòîðà SetIndexBuffer(0,MLS_H); SetIndexBuffer(1,MLS_L); SetIndexBuffer(2,MLS_HD); SetIndexBuffer(3,MLS_LD); SetIndexBuffer(4,MLS_b); //---- èìÿ èíäèêàòîðà è ïîäñêàçêè äëÿ ëèíèé IndicatorShortName("MLSOnGraphics("+MyPeriod+") = "); SetIndexLabel(0,"HighLine("+MyPeriod+")"); SetIndexLabel(1,"LowLine("+MyPeriod+")"); SetIndexLabel(2,"HighDeflection("+MyPeriod+")"); SetIndexLabel(3,"LowDeflection("+MyPeriod+")"); SetIndexLabel(4,"b("+MyPeriod+")"); SetIndexStyle(4,DRAW_NONE); return(0); } //+------------------------------------------------------------------+ //| Ôóíêöèÿ èíäèêàòîðà | //+------------------------------------------------------------------+ int start() { //static datetime LastTime; int limit, RD; if(ReDraw) RD=1; // Ïðîïóùåííûå áàðû int counted_bars=IndicatorCounted(); //---- îáõîäèì âîçìîæíûå îøèáêè if(counted_bars<0) return(-1); //---- íîâûå áàðû íå ïîÿâèëèñü è ïîýòîìó íè÷åãî ðèñîâàòü íå íóæíî limit=Bars-counted_bars-1+RD; //---- îñíîâíûå ïåðåìåííûå double ha, hb, hk1, hi1, hj1, hk2, hi2, j2; double la, lb, lk1, li1, lj1, lk2, li2; double H, L; int x; //---- îñíîâíîé öèêë for(int t=limit-RD; t>-RD; t--) { //if(LastTime==iTime(NULL,0,t)) return(0); //LastTime=iTime(NULL,0,t); //if(t<5) Print(t,"===== ",TimeToStr(LastTime)," ====="); hk1=0; hi1=0; hj1=0; hk2=0; hi2=0; lk1=0; li1=0; lj1=0; lk2=0; li2=0; for(x=t+MyPeriod-1; x>=t; x--) { // ñîñòàâëÿåì íîðìàëüíûå óðàâíåíèÿ k1=a*i1+b*j1 è k2=a*i2+b*j2 H=High[x]; hk1=hk1+H*x; hk2=hk2+H; hi1=hi1+x*x; hi2=hi2+x; hj1=hj1+x; L=Low[x]; lk1=lk1+L*x; lk2=lk2+L; li1=li1+x*x; li2=li2+x; lj1=lj1+x; } //Next x j2=MyPeriod; //Ðåøàåì ñèñòåìó óðàâíåíèé ha=(hk1*j2-hj1*hk2)/(hi1*j2-hj1*hi2); hb=(hk2-hi2*ha)/j2; la=(lk1*j2-lj1*lk2)/(li1*j2-lj1*li2); lb=(lk2-li2*la)/j2; //Òåïåðü âñå òî÷êè High è Low, íà äàííûé ìîìåíò âðåìåíè, //ïðèáëèçèòåëüíî ðàñïîëîæåíû âäîëü ïðÿìîé, îïèñàíîé óðàâíåíèåì y=ax+b, //ãäå x - ýòî íîìåð ñâå÷è, à y - çíà÷åíèå öåíû. MLS_b[t]=(hb+lb)/2; if(!ReDraw && t==1) MLS_b[0]=(hb+lb)/2; //Ïðåäïîëîæèì, ÷òî öåíà ïîéä¸ò äàëüøå âäîëü òîé æå ïðÿìîé MLS_H[t]=ha*(t-Future)+hb+Point; if(!ReDraw && t==1) MLS_H[0]=ha*(t-Future+1)+hb+Point; MLS_L[t]=la*(t-Future)+lb-Point; if(!ReDraw && t==1) MLS_L[0]=la*(t-Future+1)+lb-Point; if(CalculateDeflection) { //ðàñ÷¸ò îòêëîíåíèÿ double hS, lS; hS=0;lS=0; for(x=t+MyPeriod-1; x>=t; x--) { hS=hS+MathPow(High[x]-MLS_H[x],2); lS=lS+MathPow(Low[x] -MLS_L[x],2); } //Next x MLS_HD[t]=MLS_H[t]+MathSqrt(hS)/2; if(!ReDraw && t==1) MLS_HD[0]=MLS_H[0]+MathSqrt(hS)/2; MLS_LD[t]=MLS_L[t]-MathSqrt(lS)/2; if(!ReDraw && t==1) MLS_LD[0]=MLS_L[0]-MathSqrt(lS)/2; } } //Next t return(0); } //+------------------------------------------------------------------+
Sample
Analysis
Market Information Used:
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_NONE
Indicators Used:
Custom Indicators Used:
Order Management characteristics:
Other Features: