Miscellaneous
0
Views
0
Downloads
0
Favorites
Indikator
//+------------------------------------------------------------------+
//| Copyright © 2010 |
//| |
//| |
//+------------------------------------------------------------------+
#property indicator_chart_window
#property indicator_buffers 2
#property indicator_color1 Gold
#property indicator_color2 LightBlue
//---- input parameters
extern int BarsBefore=2; // Áàðîâ äî...
extern int BarsAfter=2; // Áàðîâ ïîñëå
extern int Width=2; // Ðàçìåð çíà÷êà
extern int BarsToProcess=100; // Êîëè÷åñòâî áàðîâ äëÿ ïîèñêà
//---- buffers
double FractUpBuffer1[];
double FractDnBuffer2[];
string sy, Prefix, NameIND;
int tf;
//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
int init()
{
//---- indicators
SetIndexStyle(0,DRAW_ARROW,EMPTY,0);
SetIndexBuffer(0,FractUpBuffer1);
SetIndexArrow(0,119);
SetIndexLabel(0,"Fractal Up");
SetIndexEmptyValue(0,0.0);
SetIndexStyle(1,DRAW_ARROW,EMPTY,0);
SetIndexBuffer(1,FractDnBuffer2);
SetIndexArrow(1,119);
SetIndexLabel(1,"Fractal Dn");
SetIndexEmptyValue(1,0.0);
//----
NameIND="Pattern_v1_01";
IndicatorShortName(NameIND+"_"+GetNameTF(Period()));
Prefix=NameIND+"_"+GetNameTF(Period()); // Ïðåôèêñ äëÿ èì¸í îáúåêòîâ
sy=Symbol();
tf=Period();
return(0);
}
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function |
//+------------------------------------------------------------------+
int deinit()
{
// -------- Áëîê óäàëåíèÿ âñåõ îáúåêòîâ, ïîñòðîåííûõ íà ãðàôèêå --------
string Name_Del[1];
int Quant_Del=0;
int Quant_Objects=ObjectsTotal();
int LenPref=StringLen(Prefix);
ArrayResize(Name_Del,Quant_Objects);
for(int k=0; k<Quant_Objects; k++) {
string Obj_Name=ObjectName(k);
string Head=StringSubstr(Obj_Name,0,LenPref);
if (Head==Prefix) {
Quant_Del+=1;
Name_Del[Quant_Del-1]=Obj_Name;
}
}
for(int i=0; i<Quant_Del; i++)
ObjectDelete(Name_Del[i]);
// ----- Êîíåö áëîêà óäàëåíèÿ âñåõ îáúåêòîâ, ïîñòðîåííûõ íà ãðàôèêå -----
return(0);
}
//+------------------------------------------------------------------+
//| Custom indicator iteration function |
//+------------------------------------------------------------------+
int start() {
int counted_bars=IndicatorCounted();
int i, k, j, limit;
//----
if(counted_bars>0) counted_bars--;
limit=Bars-counted_bars;
if(limit>BarsToProcess) limit=BarsToProcess;
// if (limit>0)
FindUpFractals(BarsBefore, BarsAfter);
FindDnFractals(BarsBefore, BarsAfter);
//----
return(0);
}
//==============================================================================
// --------------------------------- Ôóíêöèè ----------------------------------+
//==============================================================================
int FindDnFractals(int nl, int nr) {
int i, k, nb;
double fractal;
datetime tm;
string nm;
bool fl, fr;
int delta=SetDistance(Period());
for (i=BarsToProcess; i>0; i--) {
fl=false;
FractDnBuffer2[i]=0;
if (Open[i]<Close[i]) {
for (k=1; k<=nl; k++) {
if (Open[i+k]>Close[i+k]) fl=true;
else { fl=false; break; }
}
if (!fl || Open[i+nl+1]>Close[i+nl+1]) continue;
fr=false;
for (k=0; k<nr; k++) {
if (Open[i-k]<Close[i-k]) fr=true;
else { fr=false; break; }
}
if (!fr || Open[i-nr]<Close[i-nr] || iBarShift(sy,tf,Time[i-nr])==0) continue;
if (Low[i]<Low[i+1]) { fractal=Low[i]; nb=i; tm=Time[i];}
else { fractal=Low[i+1]; nb=i+1; tm=Time[i+1]; }
FractDnBuffer2[nb]=fractal;
nm=Prefix+"_Down_Fractal_"+nl+"/"+nr+"_"+TimeToStr(tm);
fractal=MathMin(Low[i], Low[i+1]);
SetArrow(218, LightBlue, nm, tm, fractal-delta*Point, Width);
WindowRedraw();
}
}
return(0);
}
//+----------------------------------------------------------------------------+
int FindUpFractals(int nl, int nr) {
int i, k, nb;
double fractal;
datetime tm;
string nm;
bool fl, fr;
int delta=SetDistance(Period());
for (i=BarsToProcess; i>0; i--) {
fl=false;
FractUpBuffer1[i]=0;
if (Open[i]>Close[i]) {
for (k=1; k<=nl; k++) {
if (Open[i+k]<Close[i+k]) fl=true;
else { fl=false; break; }
}
if (!fl || Open[i+nl+1]<Close[i+nl+1]) continue;
fr=false;
for (k=0; k<nr; k++) {
if (Open[i-k]>Close[i-k]) fr=true;
else { fr=false; break; }
}
if (!fr || Open[i-nr]>Close[i-nr] || iBarShift(sy,tf,Time[i-nr])==0) continue;
if (High[i]>High[i+1]) { fractal=High[i]; nb=i; tm=Time[i];}
else { fractal=High[i+1]; nb=i+1; tm=Time[i+1]; }
FractUpBuffer1[nb]=fractal;
nm=Prefix+"_Up_Fractal_"+nl+"/"+nr+"_"+TimeToStr(tm);
fractal=MathMax(High[i], High[i+1]);
SetArrow(217, PaleGoldenrod, nm, tm, fractal+4*delta*Point, Width);
WindowRedraw();
}
}
return(0);
}
//+----------------------------------------------------------------------------+
string GetNameTF(int TimeFrame=0) {
switch (TimeFrame) {
case PERIOD_M1: return("M1");
case PERIOD_M5: return("M5");
case PERIOD_M15: return("M15");
case PERIOD_M30: return("M30");
case PERIOD_H1: return("H1");
case PERIOD_H4: return("H4");
case PERIOD_D1: return("Daily");
case PERIOD_W1: return("Weekly");
case PERIOD_MN1: return("Monthly");
default: return("UnknownPeriod");
}
}
//+----------------------------------------------------------------------------+
int SetDistance(int TimeFrame) {
switch (TimeFrame) {
case PERIOD_M1: return(1);
case PERIOD_M5: return(1);
case PERIOD_M15: return(2);
case PERIOD_M30: return(3);
case PERIOD_H1: return(4);
case PERIOD_H4: return(4);
case PERIOD_D1: return(4);
case PERIOD_W1: return(4);
case PERIOD_MN1: return(4);
default: return(0);
}
}
//+----------------------------------------------------------------------------+
void SetArrow(int cd, color cl, string nm, datetime t1=0, double p1=0, int sz=0) {
if (ObjectFind(nm)<0) ObjectCreate(nm, OBJ_ARROW, 0, 0, 0);
ObjectSet(nm, OBJPROP_TIME1 , t1);
ObjectSet(nm, OBJPROP_PRICE1 , p1);
ObjectSet(nm, OBJPROP_ARROWCODE, cd);
ObjectSet(nm, OBJPROP_COLOR , cl);
ObjectSet(nm, OBJPROP_WIDTH , sz);
}
//+----------------------------------------------------------------------------+
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
---