Indicators Used
Miscellaneous
0
Views
0
Downloads
0
Favorites
Dserg-PPZ
//+------------------------------------------------------------------+
//| |
//| Èíäèêàòîð äëÿ àâòîìàòè÷åñêîãî ïîñòðîåíèÿ óðîâíåé |
//| PPZ ïî òð¸ì ôðàêòàëàì |
//| http://www.mql4.com/ru/users/Dserg |
//+------------------------------------------------------------------+
#property copyright "Dserg, 2010"
#property link "http://www.mql4.com/ru/users/Dserg"
//---- indicator settings
#property indicator_chart_window
#property indicator_buffers 4
#property indicator_color1 DeepSkyBlue
#property indicator_color2 HotPink
#property indicator_color3 Gold
#property indicator_color4 Tomato
//---- buffers
double B0[];
double B1[];
double B2[];
double B3[];
double Fr0[1000];
int Ind0[1000];
//Øèðèíà îêíà, â êîòîðîì èùóòñÿ óðîâíè
extern int Nbars = 150;
//Ñìåùåíèå ïðàâîãî áàðà äëÿ îêíà
extern int Nfirst = 0;
//Ìèíèìàëüíîå ðàññòîÿíèå ìåæäó óðîâíÿìè â ïóíêòàõ
extern double minDiff = 300.0;
//Ìèíèìàëüíîå ðàññòîÿíèå ìåæäó ôðàêòàëàìè â áàðàõ
extern int minBars = 5;
static bool calculated;
//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
int init()
{
//---- 3additional buffers are used for counting.
//---- drawing settings
SetIndexStyle(0,DRAW_ARROW,0,4);
SetIndexBuffer(0, B0);
SetIndexArrow(0, 119);
SetIndexStyle(1,DRAW_ARROW,0,4);
SetIndexBuffer(1, B1);
SetIndexArrow(1, 119);
SetIndexStyle(2,DRAW_ARROW,0,4);
SetIndexBuffer(2, B2);
SetIndexArrow(2, 119);
SetIndexStyle(3,DRAW_ARROW,0,4);
SetIndexBuffer(3, B3);
SetIndexArrow(3, 119);
SetIndexEmptyValue(0,0.0);
SetIndexEmptyValue(1,0.0);
SetIndexEmptyValue(2,0.0);
SetIndexEmptyValue(3,0.0);
SetIndexLabel(0,"PPZ 0");
SetIndexLabel(1,"PPZ 1");
SetIndexLabel(2,"PPZ 2");
SetIndexLabel(3,"PPZ 3");
calculated = false;
return(0);
}
int deinit()
{
ObjectDelete("PPZ");
ObjectDelete("PPZ1");
ObjectDelete("PPZ2");
ObjectDelete("PPZ3");
ObjectDelete("V1");
ObjectDelete("V2");
Comment("");
return(0);
}
int start()
{
if (calculated) return(0);
if (Nbars>500) {
Comment("Too much bars to calulate, try < 500");
return(0);
}
int counted_bars = IndicatorCounted();
if (counted_bars < 0) return(-1);
if (counted_bars >= Bars) return(0);
Comment("Calculating PPZ..");
datetime t0 = TimeLocal();
int loopbegin = Nbars+Nfirst;
int i,j,k,l,imin,jmin,kmin,lmin,imin1,jmin1,kmin1,lmin1,imin2,jmin2,kmin2,lmin2,imin3,jmin3,kmin3,lmin3;
double f0,f1,f2,f3,p0,s0,pmin,smin,pmin1,smin1,pmin2,smin2,pmin3,smin3;
int Nmax;
pmin = 10.0;
smin = 10000.0;
pmin1 = 20.0;
smin1 = 20000.0;
pmin2 = 30.0;
smin2 = 30000.0;
pmin3 = 40.0;
smin3 = 40000.0;
//Èùåì ôðàêòàëû, ñêëàäûâàåì â ìàññèâ
j=0;
for(i = loopbegin; i > Nfirst; i--) {
f0 = -1.0;
f0 = iFractals(NULL,0,MODE_UPPER,i);
if (f0<=0.0 ) f0 = iFractals(NULL,0,MODE_LOWER,i);
if (f0>0.0) {
Fr0[j]=f0;
Ind0[j]=i;
j++;
}
}
Nmax = j;
//èùåì ïåðâóþ ëèíèþ PPZ ïî 4-ì ôðàêòàëàì
for(i = 0; i < Nmax; i++) {
f0 = Fr0[i];
for(j = 0; j < Nmax; j++) {
f1=Fr0[j];
if (i!=j && MathAbs(Ind0[i]-Ind0[j])>minBars) {
for(k = 0; k < Nmax; k++) {
f2 = Fr0[k];
if (k!=j && k!=j && MathAbs(Ind0[i]-Ind0[k])>minBars && MathAbs(Ind0[k]-Ind0[j])>minBars) {
for(l = 0; l < Nmax; l++) {
f3 = Fr0[l];
if ( l!=i && l!=j && l!=k && MathAbs(Ind0[i]-Ind0[l])>minBars && MathAbs(Ind0[j]-Ind0[l])>minBars && MathAbs(Ind0[k]-Ind0[l])>minBars) {
p0 = (f0+f1+f2+f3)/4.0;
s0 = (f0-p0)*(f0-p0)+(f1-p0)*(f1-p0)+(f2-p0)*(f2-p0)+(f2-p0)*(f2-p0);
if (s0<smin) {
smin=s0;
pmin=p0;
imin=i;
jmin=j;
kmin=k;
lmin=l;
}
}
}
}
}
}
}
}
//èùåì âòîðóþ ëèíèþ PPZ ïî 4-ì ôðàêòàëàì
for(i = 0; i < Nmax; i++) {
f0 = Fr0[i];
if (i!=imin && i!=jmin && i!=kmin && i!=lmin) {
for(j = 0; j < Nmax; j++) {
f1=Fr0[j];
if (i!=j && MathAbs(Ind0[i]-Ind0[j])>minBars && j!=imin && j!=jmin && j!=kmin && j!=lmin) {
for(k = 0; k < Nmax; k++) {
f2 = Fr0[k];
if (k!=j && k!=j && MathAbs(Ind0[i]-Ind0[k])>minBars && MathAbs(Ind0[k]-Ind0[j])>minBars && k!=imin && k!=jmin && k!=kmin && k!=lmin) {
for(l = 0; l < Nmax; l++) {
f3 = Fr0[l];
if ( l!=i && l!=j && l!=k && MathAbs(Ind0[i]-Ind0[l])>minBars && MathAbs(Ind0[j]-Ind0[l])>minBars && MathAbs(Ind0[k]-Ind0[l])>minBars && l!=imin && l!=jmin && l!=kmin && l!=lmin) {
p0 = (f0+f1+f2+f3)/4.0;
s0 = (f0-p0)*(f0-p0)+(f1-p0)*(f1-p0)+(f2-p0)*(f2-p0)+(f2-p0)*(f2-p0);
if (s0<smin1 && MathAbs(p0-pmin)>minDiff*Point) {
smin1=s0;
pmin1=p0;
imin1=i;
jmin1=j;
kmin1=k;
lmin1=l;
}
}
}
}
}
}
}
}
}
//èùåì òðåòüþ ëèíèþ PPZ ïî 4-ì ôðàêòàëàì
for(i = 0; i < Nmax; i++) {
f0 = Fr0[i];
if (i!=imin && i!=jmin && i!=kmin && i!=lmin && i!=imin1 && i!=jmin1 && i!=kmin1 && i!=lmin1) {
for(j = 0; j < Nmax; j++) {
f1=Fr0[j];
if (i!=j && MathAbs(Ind0[i]-Ind0[j])>minBars && j!=imin && j!=jmin && j!=kmin && j!=lmin && j!=imin1 && j!=jmin1 && j!=kmin1 && j!=lmin1) {
for(k = 0; k < Nmax; k++) {
f2 = Fr0[k];
if (k!=j && k!=j && MathAbs(Ind0[i]-Ind0[k])>minBars && MathAbs(Ind0[k]-Ind0[j])>minBars && k!=imin && k!=jmin && k!=kmin && k!=lmin && k!=imin1 && k!=jmin1 && k!=kmin1 && k!=lmin1) {
for(l = 0; l < Nmax; l++) {
f3 = Fr0[l];
if ( l!=i && l!=j && l!=k && MathAbs(Ind0[i]-Ind0[l])>minBars && MathAbs(Ind0[j]-Ind0[l])>minBars && MathAbs(Ind0[k]-Ind0[l])>minBars && l!=imin && l!=jmin && l!=kmin && l!=lmin && l!=imin1 && l!=jmin1 && l!=kmin1 && l!=lmin1) {
p0 = (f0+f1+f2+f3)/4.0;
s0 = (f0-p0)*(f0-p0)+(f1-p0)*(f1-p0)+(f2-p0)*(f2-p0)+(f2-p0)*(f2-p0);
if (s0<smin2 && MathAbs(p0-pmin)>minDiff*Point && MathAbs(p0-pmin1)>minDiff*Point) {
smin2=s0;
pmin2=p0;
imin2=i;
jmin2=j;
kmin2=k;
lmin2=l;
}
}
}
}
}
}
}
}
}
//èùåì ÷åòâ¸ðòóþ ëèíèþ PPZ ïî 4-ì ôðàêòàëàì
for(i = 0; i < Nmax; i++) {
f0 = Fr0[i];
if (i!=imin && i!=jmin && i!=kmin && i!=lmin && i!=imin1 && i!=jmin1 && i!=kmin1 && i!=lmin1 && i!=imin2 && i!=jmin2 && i!=kmin2 && i!=lmin2) {
for(j = 0; j < Nmax; j++) {
f1=Fr0[j];
if (i!=j && MathAbs(Ind0[i]-Ind0[j])>minBars && j!=imin && j!=jmin && j!=kmin && j!=lmin && j!=imin1 && j!=jmin1 && j!=kmin1 && j!=lmin1 && j!=imin2 && j!=jmin2 && j!=kmin2 && j!=lmin2) {
for(k = 0; k < Nmax; k++) {
f2 = Fr0[k];
if (k!=j && k!=j && MathAbs(Ind0[i]-Ind0[k])>minBars && MathAbs(Ind0[k]-Ind0[j])>minBars && k!=imin && k!=jmin && k!=kmin && k!=lmin && k!=imin1 && k!=jmin1 && k!=kmin1 && k!=lmin1 && k!=imin2 && k!=jmin2 && k!=kmin2 && k!=lmin2) {
for(l = 0; l < Nmax; l++) {
f3 = Fr0[l];
if ( l!=i && l!=j && l!=k && MathAbs(Ind0[i]-Ind0[l])>minBars && MathAbs(Ind0[j]-Ind0[l])>minBars && MathAbs(Ind0[k]-Ind0[l])>minBars && l!=imin && l!=jmin && l!=kmin && l!=lmin && l!=imin1 && l!=jmin1 && l!=kmin1 && l!=lmin1 && l!=imin2 && l!=jmin2 && l!=kmin2 && l!=lmin2) {
p0 = (f0+f1+f2+f3)/4.0;
s0 = (f0-p0)*(f0-p0)+(f1-p0)*(f1-p0)+(f2-p0)*(f2-p0)+(f2-p0)*(f2-p0);
if (s0<smin3 && MathAbs(p0-pmin)>minDiff*Point && MathAbs(p0-pmin1)>minDiff*Point && MathAbs(p0-pmin2)>minDiff*Point) {
smin3=s0;
pmin3=p0;
imin3=i;
jmin3=j;
kmin3=k;
lmin3=l;
}
}
}
}
}
}
}
}
}
//Ðèñóåì ðåçóëüòàòû, îòìå÷àåì òî÷êè
B0[Ind0[imin]] = Open[Ind0[imin]];
B0[Ind0[jmin]] = Open[Ind0[jmin]];
B0[Ind0[kmin]] = Open[Ind0[kmin]];
B0[Ind0[lmin]] = Open[Ind0[lmin]];
B1[Ind0[imin1]] = Open[Ind0[imin1]];
B1[Ind0[jmin1]] = Open[Ind0[jmin1]];
B1[Ind0[kmin1]] = Open[Ind0[kmin1]];
B1[Ind0[lmin1]] = Open[Ind0[lmin1]];
B2[Ind0[imin2]] = Open[Ind0[imin2]];
B2[Ind0[jmin2]] = Open[Ind0[jmin2]];
B2[Ind0[kmin2]] = Open[Ind0[kmin2]];
B2[Ind0[lmin2]] = Open[Ind0[lmin2]];
B3[Ind0[imin3]] = Open[Ind0[imin3]];
B3[Ind0[jmin3]] = Open[Ind0[jmin3]];
B3[Ind0[kmin3]] = Open[Ind0[kmin3]];
B3[Ind0[lmin3]] = Open[Ind0[lmin3]];
if(!ObjectCreate("PPZ",OBJ_HLINE,0,Time[0],NormalizeDouble(pmin,Digits))) {
Comment("ERROR");
return(0);
}
if(!ObjectCreate("PPZ1",OBJ_HLINE,0,Time[0],NormalizeDouble(pmin1,Digits))) {
Comment("ERROR");
return(0);
}
if(!ObjectCreate("PPZ2",OBJ_HLINE,0,Time[0],NormalizeDouble(pmin2,Digits))) {
Comment("ERROR");
return(0);
}
if(!ObjectCreate("PPZ3",OBJ_HLINE,0,Time[0],NormalizeDouble(pmin3,Digits))) {
Comment("ERROR");
return(0);
}
if(!ObjectCreate("V1",OBJ_VLINE,0,Time[Nbars+Nfirst],Open[0])) {
Comment("ERROR");
return(0);
}
if(!ObjectCreate("V2",OBJ_VLINE,0,Time[Nfirst],Open[0])) {
Comment("ERROR");
return(0);
}
ObjectSet("PPZ",OBJPROP_COLOR,DeepSkyBlue);
ObjectSet("PPZ",OBJPROP_STYLE,STYLE_DASH);
ObjectSet("PPZ1",OBJPROP_COLOR,DeepPink);
ObjectSet("PPZ1",OBJPROP_STYLE,STYLE_DASH);
ObjectSet("PPZ2",OBJPROP_COLOR,Gold);
ObjectSet("PPZ2",OBJPROP_STYLE,STYLE_DASH);
ObjectSet("PPZ3",OBJPROP_COLOR,Tomato);
ObjectSet("PPZ3",OBJPROP_STYLE,STYLE_DASH);
ObjectSet("V1",OBJPROP_COLOR,DarkKhaki);
ObjectSet("V2",OBJPROP_COLOR,DarkKhaki);
calculated = true;
datetime t1 = TimeLocal()-t0;
Comment("Calculation of PPZ done \n PPZ0 " + DoubleToStr(pmin,5) + "\n PPZ1 " + DoubleToStr(pmin1,5) + "\n PPZ2 " + DoubleToStr(pmin2,5) + "\n PPZ3 " + DoubleToStr(pmin3,5) + "\n Time " + t1 + " sec.");
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
---