Miscellaneous
0
Views
0
Downloads
0
Favorites
K-Barishpoltz Channel Fractals
//+------------------------------------------------------------------+
//| Barishpoltz Channel.mq4 |
//| SaiborEye |
//| |
//+------------------------------------------------------------------+
#property copyright "SaiborEye"
#property link ""
/*
Âàðèàíò èíäèêàòîðà, èñïîëüçóþùåãî ôðàêòàëû ïðè ïîñòðîåíèè è îòîáðàæåíèå
ñêîëüçÿùèõ êàíàëîâ Áàðèøïîëüöà. Äàííûé ðåëèç ïðåäíàçíà÷åí
äëÿ ïðèêëàäíîé îöåíêè âîçìîæíîñòè îòêàçà îò ðó÷íîãî ïîñòðîåíèÿ, âûÿâëåíèÿ è
êîððåêöèè ñëàáûõ ìåñò, ïðåäëîæåíèÿ ïî ââîäó äîïîëíèòåëüíûõ ïàðàìåòðîâ
*/
#property indicator_chart_window
#property indicator_buffers 3
#property indicator_color1 Gold
#property indicator_color2 Coral
#property indicator_color3 Aquamarine
//---- input parameters
extern int RightLevel=3;// Îòñòóï îò ïðàâîé ãðàíèöû ãðàôèêà (Íîìåð áàðà, 0 - ïîñëåäíèé, íå ñôîðìèðîâàâøèéñÿ)
extern int BetweenPeaks=2;// Ìèíèìàëüíîå ðàññòîÿíèå ìåæäó ýêñòðåìóìàìè (êîëè÷åñòâî áàðîâ)
extern int MaxLength=600;// Ìàêñèìàëüíàÿ ðàçðåøåííàÿ äëèíà êàíàëà (êîëè÷åñòâî áàðîâ)
//---- buffers
double ExtMapBuffer1[];
double ExtMapBuffer2[];
double ExtMapBuffer3[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
int init()
{
//---- indicators
SetIndexStyle(0,DRAW_SECTION);
SetIndexBuffer(0,ExtMapBuffer1);
SetIndexEmptyValue(0,0.0);
SetIndexLabel(0,"Top Border");
SetIndexStyle(1,DRAW_SECTION);
SetIndexBuffer(1,ExtMapBuffer2);
SetIndexEmptyValue(1,0.0);
SetIndexLabel(1,"Bottom Border");
SetIndexStyle(2,DRAW_ARROW,STYLE_SOLID,3);
SetIndexBuffer(2,ExtMapBuffer3);
SetIndexEmptyValue(2,0.0);
SetIndexArrow(2,159);
SetIndexLabel(2,"Fractal");
//----
return(0);
}
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function |
//+------------------------------------------------------------------+
int deinit()
{
//----
//----
return(0);
}
//+------------------------------------------------------------------+
int CheckBorders(int X1,int X2,int X3,double Y1,double Y2,double Y3,bool TwoTop){
int x,limit;
if(X1>X2)limit=X1;else limit=X2;
if(TwoTop){// TOP TWO
for(x=RightLevel;x<limit;x++){// LINE LOOP-1
if(Y2+(x*1.0-X2*1.0)*(Y1-Y2)/(X1*1.0-X2*1.0)<High[x])return (1);
}// LINE LOOP-1
for(x=RightLevel;x<limit;x++){// LINE LOOP-2
if(Y3+(x*1.0-X3*1.0)*(Y1-Y2)/(X1*1.0-X2*1.0)>Low[x])return (-1);
}// LINE LOOP-2
return (0);
}// TOP TWO
if(!TwoTop){// BOTTOM TWO
for(x=RightLevel;x<limit;x++){// LINE LOOP-3
if(Y2+(x*1.0-X2*1.0)*(Y1-Y2)/(X1*1.0-X2*1.0)>Low[x])return (-1);
}// LINE LOOP-3
for(x=RightLevel;x<limit;x++){// LINE LOOP-4
if(Y3+(x*1.0-X3*1.0)*(Y1-Y2)/(X1*1.0-X2*1.0)<High[x])return (1);
}// LINE LOOP-4
return (0);
}// BOTTOM TWO
return (-1);}
//+------------------------------------------------------------------+
//| Custom indicator iteration function |
//+------------------------------------------------------------------+
int start()
{
int PosX1[2],PosX2,pos,pos1,pos2,limit;
double value;
bool Flag;
int TopPeaksPos[];
int TopPeaksIndex;
int BottomPeaksPos[];
int BottomPeaksIndex;
//----
limit=MaxLength;if(limit>Bars-2)limit=Bars-2;if(RightLevel<2)RightLevel=2;
ArrayResize(TopPeaksPos,limit);ArrayResize(BottomPeaksPos,limit);
TopPeaksIndex=0;BottomPeaksIndex=0;
ArrayInitialize(ExtMapBuffer1,0.0);ArrayInitialize(ExtMapBuffer2,0.0);ArrayInitialize(ExtMapBuffer3,0.0);
//----
for(pos=RightLevel;pos<limit;pos++){// MAIN SEEK LOOP
if(High[pos]>High[pos-1]&&High[pos]>High[pos-2])
if(High[pos]>High[pos+1]&&High[pos]>High[pos+2]){TopPeaksPos[TopPeaksIndex]=pos;TopPeaksIndex++;}
if(Low[pos]<Low[pos-1]&&Low[pos]<Low[pos-2])
if(Low[pos]<Low[pos+1]&&Low[pos]<Low[pos+2]){BottomPeaksPos[BottomPeaksIndex]=pos;BottomPeaksIndex++;}
}// MAIN SEEK LOOP
//----
if(BottomPeaksIndex<TopPeaksIndex)limit=BottomPeaksIndex;else limit=TopPeaksIndex;
for(pos=0;pos<limit;pos++){// SEEK LOOP
if(TopPeaksPos[pos]<BottomPeaksPos[pos]){// TOP NEARLY
for(pos1=pos;pos1<TopPeaksIndex;pos1++){// SECOND POINT SEEK
for(pos2=0;pos2<BottomPeaksIndex;pos2++)if(BottomPeaksPos[pos2]<=TopPeaksPos[pos1])if(BottomPeaksPos[pos2]>=TopPeaksPos[pos])
if(TopPeaksPos[pos1]-TopPeaksPos[pos]>BetweenPeaks)if(CheckBorders(TopPeaksPos[pos],TopPeaksPos[pos1],BottomPeaksPos[pos2],
High[TopPeaksPos[pos]],High[TopPeaksPos[pos1]],Low[BottomPeaksPos[pos2]],TRUE)==0){// DRAWING
ExtMapBuffer1[0] = (0-TopPeaksPos[pos])*(High[TopPeaksPos[pos1]]-High[TopPeaksPos[pos]])/(TopPeaksPos[pos1]-TopPeaksPos[pos])+High[TopPeaksPos[pos]];
ExtMapBuffer1[TopPeaksPos[pos1]] = High[TopPeaksPos[pos1]];
ExtMapBuffer2[0] = Low[BottomPeaksPos[pos2]]+(0-BottomPeaksPos[pos2])*
(High[TopPeaksPos[pos1]]-High[TopPeaksPos[pos]])/(TopPeaksPos[pos1]-TopPeaksPos[pos]);
ExtMapBuffer2[TopPeaksPos[pos1]] = Low[BottomPeaksPos[pos2]]+(TopPeaksPos[pos1]-BottomPeaksPos[pos2])*
(High[TopPeaksPos[pos1]]-High[TopPeaksPos[pos]])/(TopPeaksPos[pos1]-TopPeaksPos[pos]);
ExtMapBuffer3[TopPeaksPos[pos]]=High[TopPeaksPos[pos]];ExtMapBuffer3[TopPeaksPos[pos1]]=High[TopPeaksPos[pos1]];
ExtMapBuffer3[BottomPeaksPos[pos2]]=Low[BottomPeaksPos[pos2]];
return (0);
}// DRAWING
}// SECOND POINT SEEK
}else {// BOTTOM NEARLY
for(pos1=pos;pos1<BottomPeaksIndex;pos1++){// SECOND POINT SEEK
for(pos2=0;pos2<TopPeaksIndex;pos2++)if(TopPeaksPos[pos2]<=BottomPeaksPos[pos1])if(TopPeaksPos[pos2]>=BottomPeaksPos[pos])
if(BottomPeaksPos[pos1]-BottomPeaksPos[pos]>BetweenPeaks)if(CheckBorders(BottomPeaksPos[pos],BottomPeaksPos[pos1],TopPeaksPos[pos2],
Low[BottomPeaksPos[pos]],Low[BottomPeaksPos[pos1]],High[TopPeaksPos[pos2]],FALSE)==0){// DRAWING
ExtMapBuffer1[0] = (0-BottomPeaksPos[pos])*(Low[BottomPeaksPos[pos1]]-Low[BottomPeaksPos[pos]])/(BottomPeaksPos[pos1]-BottomPeaksPos[pos])+Low[BottomPeaksPos[pos]];
ExtMapBuffer1[BottomPeaksPos[pos1]] = Low[BottomPeaksPos[pos1]];
ExtMapBuffer2[0] = High[TopPeaksPos[pos2]]+(0-TopPeaksPos[pos2])*
(Low[BottomPeaksPos[pos1]]-Low[BottomPeaksPos[pos]])/(BottomPeaksPos[pos1]-BottomPeaksPos[pos]);
ExtMapBuffer2[BottomPeaksPos[pos1]] = High[TopPeaksPos[pos2]]+(BottomPeaksPos[pos1]-TopPeaksPos[pos2])*
(Low[BottomPeaksPos[pos1]]-Low[BottomPeaksPos[pos]])/(BottomPeaksPos[pos1]-BottomPeaksPos[pos]);
ExtMapBuffer3[BottomPeaksPos[pos]]=Low[BottomPeaksPos[pos]];ExtMapBuffer3[BottomPeaksPos[pos1]]=Low[BottomPeaksPos[pos1]];
ExtMapBuffer3[TopPeaksPos[pos2]]=High[TopPeaksPos[pos2]];
return (0);
}// DRAWING
}// SECOND POINT SEEK
}// BOTTOM NEARLY
}// SEEK LOOP
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
---