Miscellaneous
0
Views
0
Downloads
0
Favorites
MLSOnGraphics_v1
//+---------------------------------------------------------------------+
//| 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;
if(counted_bars==0) limit-=RD+MyPeriod;
//---- îñíîâíûå ïåðåìåííûå
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);
}
//+------------------------------------------------------------------+
Comments
Markdown Formatting Guide
# H1
## H2
### H3
**bold text**
*italicized text*
[title](https://www.example.com)

`code`
```
code block
```
> blockquote
- Item 1
- Item 2
1. First item
2. Second item
---