Miscellaneous
0
Views
0
Downloads
0
Favorites
i_MF_Fractal_ZZ_3in1
//-----------------------------------------------------------------------
// MF_Fractal_ZZ_3in1.mq4
// Èíäèêàòîð ôîðìèðóåò íà ðàáî÷åì òàéìôðåéìå ïîñëåäîâàòåëüíîñòü óçëîâ
// çèãçàãà, âû÷èñëåííûõ íà ñýìóëèðîâàííûõ òðåõ ñòàðøèõ.
// Ðàáîòàåò íà âñåõ è ñî âñåìè, â ò.÷. è íåñòàíäàðòíûìè ÒÔ
// Îãðàíè÷åíèÿ:
// - ñòàðøèå ÒÔ äîëæíû áûòü êðàòíû ðàáî÷åìó, åñëè íåò, òî çíà÷åíèÿ
// óñòàíàâëèâàþòñÿ ïðèíóäèòåëüíî.
// - ðàáî÷èé ÒÔ <= ñàìîìó ìåëêîìó èç ñòàðøèõ
// - TFSmall < TFMidle && TFMidle < TFLarge
// - TFLarge <=43200 (ìåñÿö)
//-----------------------------------------------------------------------
#property copyright "Copyright © 2008, BiViSi Corp."
#property link "riderfin@bk.ru"
#property link "ICQ 499949112"
#property indicator_chart_window
#property indicator_buffers 3
//---- ñòèëü èíäèêàòîðíîé ëèíèè
#property indicator_color1 Blue
#property indicator_color2 Red
#property indicator_color3 Yellow
#property indicator_style1 0
#property indicator_style2 0
#property indicator_style3 0
#property indicator_width1 5
#property indicator_width2 3
#property indicator_width3 1
//---- ÂÕÎÄÍÛÅ ÏÀÐÀÌÅÒÐÛ ÈÍÄÈÊÀÒÎÐÀ
extern int VolExt=50; // âû÷èñëåíèå "VolExt+1" ïîñëåäíèõ îïîðíûõ òî÷åê
extern int TFLarge=1440;
extern int TFMidle=240;
extern int TFSmall=60;
//---- Variables
double Large[],Midle[],Small[]; // îïîðíûå òî÷êè (áóôåðû èíäèêàòîðà)
datetime PrevTimePer[4]; // âðåìåíà ïîñëåäíåãî ðàñ÷åòà ïî êàæäîìó ÒÔ
datetime PrevTimeCalc=0;
double P60,CP60;
int CurPeriod, ErrorTF=0, NumberExt, Per, largelast=0, midlelast=0, smalllast=0;
//-----------------------------------------------------------------------
int init()
{
// èíèöèàëèçàöèÿ
IndicatorBuffers(3); // ñòðîêà "íà ïåðñïåêòèâó" :)
SetIndexBuffer(0,Large); SetIndexStyle(0,DRAW_SECTION);
SetIndexEmptyValue(0,0.0);
SetIndexBuffer(1,Midle); SetIndexStyle(1,DRAW_SECTION);
SetIndexEmptyValue(1,0.0);
SetIndexBuffer(2,Small); SetIndexStyle(2,DRAW_SECTION);
SetIndexEmptyValue(2,0.0);
ArrayInitialize(PrevTimePer,0);
CurPeriod=Period(); CP60=CurPeriod*60;
// Îãðàíè÷åíèÿ:
// êîíòðîëü ÒÔ è ââåäåííûõ ïàðàìåòðîâ
if (MathCeil(TFSmall/CurPeriod) != TFSmall/CurPeriod)
TFSmall=MathCeil(TFSmall/CurPeriod)*CurPeriod;
if (MathCeil(TFMidle/CurPeriod) != TFMidle/CurPeriod)
TFMidle=MathCeil(TFMidle/CurPeriod)*CurPeriod;
if (MathCeil(TFLarge/CurPeriod) != TFLarge/CurPeriod)
TFLarge=MathCeil(TFLarge/CurPeriod)*CurPeriod;
if (CurPeriod > TFSmall)
{Alert ("Ïåðèîä ãðàôèêà äîëæåí áûòü ìåíüøå èëè ðàâåí ", TFSmall," ìèí.");
ErrorTF=1;return;}
if (TFSmall >= TFMidle || TFMidle >= TFLarge || TFLarge>43200)
{Alert ("Íåêîððåêòíûé âûáîð òàéìôðåéìîâ äëÿ ðàñ÷åòà!!!"); ErrorTF=1;return;}
return;
}
//--------------------------------------------------------------------
int start()
{
if ( ErrorTF==1 ) return; // íåêîððåêòíûé òàéìôðåéì
FractalCalc();
return;
}
//======================================================================
// Ïîèñê 5-òè áàðíûõ ôðàêòàëîâ è âû÷èñëåíèå óçëîâ çèãçàãà
// íà ýìóëÿöèè ñòàðøèõ ÒÔ, óäàëåíèå ëèøíèõ è îòîáðàæåíèå íà òåêóùåì ÒÔ
//======================================================================
void FractalCalc ()
{
// Force ¹1 - âû÷ òîëüêî íà ïîëíîñòüþ ñôîðìèðîâàâøåìñÿ áàðå ðàáî÷åãî ÒÔ
if (PrevTimeCalc == Time[0]) return; else PrevTimeCalc=Time[0];
int y, x, k, i, j, extr=0;
// âðåìÿ ïîñëåäíåãî áàðà òåê ÒÔ, çàêðûâàþùåãî áàð ¹1-5 ñòàðøåãî ÒÔ
int t1, t2, t3, t4, t5;
// íîìåð ïîñëåäíåãî áàðà òåê ÒÔ, çàêðûâàþùåãî áàð ¹1-5 ñòàðøåãî ÒÔ
int limit1, limit2, limit3, limit4, limit5;
// íîìåðà áàðîâ òåê ÒÔ ñ ïèêàìè è äîíûøêàìè ñîîòâ áàðàì 1-5 ñòàðøåãî ÒÔ
int up1,up2,up3,up4,up5,dn1,dn2,dn3,dn4,dn5;
for (y=1; y<=3; y++) // öèêë ïî ðàññ÷èòûâàåìûì ÒÔ
{
if (y==1) Per=TFLarge; if (y==2) Per=TFMidle; if (y==3) Per=TFSmall;
P60=Per*60;
// Force ¹2 - Âû÷èñëÿåì èçëîìû òîëüêî ñ ôîðìèðîâàíèåì áàðà ñòàðøåãî ÒÔ
if (PrevTimePer[y] !=0)
{
if (Per<43200 && (Time[0] - PrevTimePer[y])<P60 )continue;
if (Per==43200 && Month()==TimeMonth(PrevTimePer[y]))continue;
}
// Îáðàáîòêà ïðîïóñêà áàðîâ
// Åñëè ïðÿìîëèíåéíî PrevTimePer[y]=Time[0], òî â ñëó÷àå ïðîïóñêà áàðîâ
// íà ðàáî÷åì ÒÔ ïðîèçîéäåò ñäâèã âñåé öåïî÷êè ðàñ÷åòà íà âåëè÷èíó ïðîïóñêà
PrevTimePer[y]=MathCeil(Time[0]/Per/60)*P60;
NumberExt=0; extr=0;
k=Per/CurPeriod;
// îãðàíè÷åíèå öèêëà - â çàâèñèìîñòè îò òîãî êàêîé ÒÔ îáñ÷èòûâàåì
// è îò ïîñëåäíåãî íàéäåííîãî ôðàêòàëà
i=MathCeil(Bars/k)-5;
// Force #3 - îáñ÷èòûâàåì, íà÷èíàÿ ñ ïîñëåäíåãî èçëîìà
if(y==1 && largelast !=0) i=largelast+k;
if(y==2 && midlelast !=0) i=midlelast+k;
if(y==3 && smalllast !=0) i=smalllast+k;
for (x=1; x<=i; x++)
{
// íàõîäèì ïèêè è äîíûøêè
// âðåìÿ íà÷àëà ïîñëåäíåãî áàðà òåê ÒÔ, çàêðûâàþùåãî áàð ¹1 ñòàðøåãî ÒÔ
if (PrevTimePer[y] !=0) t1=PrevTimePer[y]-x*P60+(k-1)*CP60;
else t1=MathCeil(Time[0]/Per/60)*P60-x*P60+(k-1)*CP60;
t2=t1-P60; t3=t2-P60; t4=t3-P60; t5=t4-P60;
limit1=iBarShift(NULL,0,t1, false); limit2=iBarShift(NULL,0,t2, false);
limit3=iBarShift(NULL,0,t3, false); limit4=iBarShift(NULL,0,t4, false);
limit5=iBarShift(NULL,0,t5, false);
up1=iHighest(NULL,0,MODE_HIGH,k,limit1); up2=iHighest(NULL,0,MODE_HIGH,k,limit2);
up3=iHighest(NULL,0,MODE_HIGH,k,limit3); up4=iHighest(NULL,0,MODE_HIGH,k,limit4);
up5=iHighest(NULL,0,MODE_HIGH,k,limit5);
dn1=iLowest(NULL,0,MODE_LOW,k,limit1); dn2=iLowest(NULL,0,MODE_LOW,k,limit2);
dn3=iLowest(NULL,0,MODE_LOW,k,limit3); dn4=iLowest(NULL,0,MODE_LOW,k,limit4);
dn5=iLowest(NULL,0,MODE_LOW,k,limit5);
// èùåì îïîðíûå òî÷êè
if(High[up3]>High[up2] && High[up3]>High[up1] && High[up3]>=High[up4] && High[up3]>=High[up5])
{
if (y==1){Large[up3]=High[up3];largelast=up3;}
if (y==2){Midle[up3]=High[up3];midlelast=up3;}
if (y==3){Small[up3]=High[up3];smalllast=up3;}
NumberExt++; extr++;
}
if(Low[dn3]<Low[dn2] && Low[dn3]<Low[dn1] && Low[dn3]<=Low[dn4] && Low[dn3]<=Low[dn5])
{
if (y==1){Large[dn3]=Low[dn3];largelast=dn3;}
if (y==2){Midle[dn3]=Low[dn3];midlelast=dn3;}
if (y==3){Small[dn3]=Low[dn3];smalllast=dn3;}
NumberExt++; extr++;
}
if (NumberExt>VolExt) break;
}
}
// Óäàëåíèå ëèøíèõ ýêñòðåìóìîâ äëÿ ôîðìèðîâàíèÿ ïðàâèëüíîãî çèãçàãà
// èç 2-õ è áîëåå ïîäðÿä èäóùèõ ïèêîâ\äîíûøêîâ âûáèðàþòñÿ ìàêñèìàëüíûé\ìèíèìàëüíûé,
// à ïðè ðàâåíñòâå - ñ íàèìåíüøèì íîìåðîì áàðà.... ëèøíèå îáíóëÿþòñÿ
if (extr==0) return;
for (y=1; y<=3; y++)
{
if (y==1) j=ArraySize(Large);if (y==2)j=ArraySize(Midle);
if (y==3)j=ArraySize(Small);
int min=0, max=0, extmin=0, extmax=0;
NumberExt=0;
for (x=1;x<=j;x++)
{
if (y==1)
{
if (Large[x] == 0.0 ) continue;
if (Large[x] == High[x])
{
NumberExt++; extmax++; extmin=0;
if (extmax==2)
{
if (Large[max]>=Large[x])Large[x]=0.0;
else {Large[max]=0.0;max=x;}
extmax--;
}
else max=x;
}
if (Large[x] == Low[x])
{
NumberExt++; extmax=0; extmin++;
if (extmin==2)
{
if (Large[min]<=Large[x])Large[x]=0.0;
else {Large[min]=0.0;min=x;}
extmin--;
}
else min=x;
}
}
if (y==2)
{
if (Midle[x] == 0.0 ) continue;
if (Midle[x] == High[x])
{
NumberExt++; extmax++; extmin=0;
if (extmax==2)
{
if (Midle[max]>=Midle[x])Midle[x]=0.0;
else {Midle[max]=0.0;max=x;}
extmax--;
// ìîæíî è ïîïðîùå, êàê âûøå, íî.... óáèðàåì ðàñõîæäåíèÿ
/*
if (Midle[max]>Midle[x])Midle[x]=0.0;
if (Midle[max]==Midle[x])
{
if (Large[x] == High[x]) {Midle[max]=0.0;max=x;}
else Midle[x]=0.0;
}
if (Midle[max]<Midle[x]){Midle[max]=0.0;max=x;}
*/
}
else max=x;
}
if (Midle[x] == Low[x])
{
NumberExt++; extmax=0; extmin++;
if (extmin==2)
{
if (Midle[min]<=Midle[x])Midle[x]=0.0;
else {Midle[min]=0.0;min=x;}
extmin--;
// ìîæíî è ïîïðîùå, êàê âûøå, íî.... óáèðàåì ðàñõîæäåíèÿ
/*
if (Midle[min]<Midle[x])Midle[x]=0.0;
if (Midle[min]==Midle[x])
{
if (Large[x] == Low[x]) {Midle[min]=0.0;min=x;}
else Midle[x]=0.0;
}
if (Midle[min]>Midle[x]){Midle[min]=0.0;min=x;}
*/
}
else min=x;
}
}
if (y==3)
{
if (Small[x] == 0.0 ) continue;
if (Small[x] == High[x])
{
NumberExt++; extmax++; extmin=0;
if (extmax==2)
{
if (Small[max]>=Small[x])Small[x]=0.0;
else {Small[max]=0.0;max=x;}
extmax--;
// ìîæíî è ïîïðîùå, êàê âûøå, íî.... óáèðàåì ðàñõîæäåíèÿ
/*
if (Small[max]>Small[x])Small[x]=0.0;
if (Small[max]==Small[x])
{
if (Midle[x] == High[x]) {Small[max]=0.0;max=x;}
else Small[x]=0.0;
}
if (Small[max]<Small[x]){Small[max]=0.0;max=x;}
*/
}
else max=x;
}
if (Small[x] == Low[x])
{
NumberExt++; extmax=0; extmin++;
if (extmin==2)
{
if (Small[min]<=Small[x])Small[x]=0.0;
else {Small[min]=0.0;min=x;}
extmin--;
// ìîæíî è ïîïðîùå, êàê âûøå, íî.... óáèðàåì ðàñõîæäåíèÿ
/*
if (Small[min]<Small[x])Small[x]=0.0;
if (Small[min]==Small[x])
{
if (Midle[x] == Low[x]) {Small[min]=0.0;min=x;}
else Small[x]=0.0;
}
if (Small[min]>Small[x]){Small[min]=0.0;max=x;}
*/
}
else min=x;
}
}
if (NumberExt>VolExt+5) break;
}
}
}
//--------------------------------------------------------------------
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
---