Indicators Used
Miscellaneous
0
Views
0
Downloads
0
Favorites
Cycle_KROUFR_version_
//+------------------------------------------------------------------+
//| Cycle_KROUFR_version.mq4 |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2008 | Grayman77, zIG, akadex"
#property link "ForexResearch"
#property indicator_separate_window
#property indicator_minimum 0
#property indicator_maximum 100
#property indicator_level1 20
#property indicator_level2 50
#property indicator_level3 80
#property indicator_buffers 1
#property indicator_color1 DarkOrchid
//---- input parameters
extern int FastMA=12;
extern int SlowMA=24;
extern int Crosses=50;
extern bool Comments=true;
//---- buffers
double MA[];
double MCD[];
double MAfast[],MAslow[];
double Cross[];
double max_min[];
double PointDeviation[];
double PeriodTimeAVG[];
//---- var
double smconst,ST,max,min;
int ShiftFirstCross; // ñìåùåíèå ïåðâîãî ïåðåñå÷åíèÿ c íà÷àëà èñòîðèè
int ShiftCrossesCross; // ñìåùåíèå (Crosses+1)-ãî ïåðåñå÷åíèÿ c íà÷àëà èñòîðèè (ïåðâîå - ïðîïóñêàåì)
int k;
//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
int init()
{
// string short_name;
//---- indicator line
IndicatorBuffers(8);
SetIndexBuffer(0, MA);
SetIndexStyle(0,DRAW_LINE,STYLE_SOLID,2,DarkOrchid);
SetIndexBuffer(1, MCD);
SetIndexBuffer(2, MAfast);
SetIndexBuffer(3, MAslow);
SetIndexBuffer(4, Cross);
SetIndexBuffer(5, max_min);
SetIndexBuffer(6, PointDeviation);
SetIndexBuffer(7, PeriodTimeAVG);
SetIndexEmptyValue(0,0.0);
SetIndexEmptyValue(1,0.0);
SetIndexEmptyValue(2,0.0);
SetIndexEmptyValue(3,0.0);
SetIndexEmptyValue(4,0.0);
SetIndexEmptyValue(5,0.0);
SetIndexEmptyValue(6,0.0);
SetIndexEmptyValue(7,0.0);
ShiftFirstCross=0;
ShiftCrossesCross=0;
k=0;
max=0.;
min=1000000.;
return(0);
}
int deinit()
{
Comment("");
return(0);
}
//+------------------------------------------------------------------+
//| Schaff Trend Cycle |
//+------------------------------------------------------------------+
int start()
{
int counted_bars=IndicatorCounted();
int i,j,limit,NumberCross,BarsCross;
double prev,MinMACD,MaxMACD,delta,Sum_max_min;
if(Bars<=SlowMA) return(-1);
//---- ïîñëåäíèé ïîñ÷èòàííûé áàð áóäåò ïåðåñ÷èòàí
if(counted_bars>0) counted_bars--;
limit=Bars-counted_bars;
if(limit>Bars-SlowMA-1) limit=Bars-SlowMA-1;
//+------------------------------------------------------------------+
//| Time AVG |
//+------------------------------------------------------------------+
for(i=limit;i>0;i--)
{
Cross[i]=0.;
// Âû÷èñëèòü çíà÷åíèÿ ñðåäíèõ è ïîìåñòèòü â áóôåðû
MAfast[i]=iMA(NULL,Period(),FastMA,0,MODE_SMA,PRICE_CLOSE,i);
MAslow[i]=iMA(NULL,Period(),SlowMA,0,MODE_SMA,PRICE_CLOSE,i);
// Íàéòè ïåðåñå÷åíèÿ ñðåäíèõ
if(MAfast[i]>=MAslow[i] && MAfast[i+1]<MAslow[i+1]) // áûñòðàÿ ïåðåñåêàåò ìåäëåííóþ ñíèçó ââåðõ
{
// Åñëè ýòî ïåðâîå íàéäåííîå ïåðåñå÷åíèå - çàïîìíèòü åãî ñìåùåíèå
if(ShiftFirstCross==0) ShiftFirstCross=i;
// Åñëè åùå íå íàéäåíî Crosses+1 ïåðåñå÷åíèå
if(ShiftCrossesCross==0)
{
k++;
// åñëè íàéäåíî - çàïîìíèòü
if(k==Crosses+1) ShiftCrossesCross=i;
}
// Çàïîìíèòü ôàêò ïåðåñå÷åíèÿ â áóôåðå
Cross[i]=1.;
// Çàïîìíèòü ðàçíîñòü max-min â áóôåðå
max_min[i]=max-min;
// Ñáðîñèòü çíà÷åíèÿ max è min
max=0.;
min=1000000.;
}
if(MAfast[i]<=MAslow[i] && MAfast[i+1]>MAslow[i+1]) // áûñòðàÿ ïåðåñåêàåò ìåäëåííóþ ñâåðõó âíèç
{
// Åñëè ýòî ïåðâîå íàéäåííîå ïåðåñå÷åíèå - çàïîìíèòü åãî ñìåùåíèå
if(ShiftFirstCross==0) ShiftFirstCross=i;
// Åñëè åùå íå íàéäåíî Crosses+1 ïåðåñå÷åíèå
if(ShiftCrossesCross==0)
{
k++;
// åñëè íàéäåíî - çàïîìíèòü
if(k==Crosses+1) ShiftCrossesCross=i;
}
// Çàïîìíèòü ôàêò ïåðåñå÷åíèÿ â áóôåðå
Cross[i]=-1.;
// Çàïîìíèòü ðàçíîñòü max-min â áóôåðå
max_min[i]=max-min;
// Ñáðîñèòü çíà÷åíèÿ max è min
max=0.;
min=1000000.;
}
// Âûáèðàåì ìàêñèìàëüíóþ öåíó (èç High) ìåæäó ïåðåñå÷åíèÿìè è ìèíèìàëüíóþ èç Low
if(max<High[i]) max=High[i];
if(min>Low[i]) min=Low[i];
}
// Ñ÷èòàåì ñòàòèñòèêó
if(limit>ShiftCrossesCross) limit=ShiftCrossesCross;
for(i=limit;i>0;i--)
{
// Íàéòè ïåðâîå ïåðåñå÷åíèå (ñïðàâà íàëåâî)
j=i;
while(Cross[j]==0.) j++;
// Íàéòè ñëåäóþùèå Crosses ïåðåñå÷åíèé
NumberCross=0;
BarsCross=0;
Sum_max_min=0.;
while(NumberCross<Crosses)
{
// Åñëè íàéäåíî î÷åðåäíîå ïåðåñå÷åíèå
if(Cross[j]!=0.)
{
NumberCross++; // óâåëè÷èòü íà 1 ñ÷åò÷èê ïåðåñå÷åíèé
Sum_max_min=Sum_max_min+max_min[j];
}
j++;
BarsCross++;
}
// Èòîãîâûå çíà÷åíèÿ Time AVG
PeriodTimeAVG[i]=BarsCross/Crosses; // ñðåäíåå êîë-âî áàðîâ ìåæäó ïåðåñå÷åíèÿìè
PointDeviation[i]=NormalizeDouble(Sum_max_min/Crosses/2./Point,0); // ñð. îòêëîíåíèå
}
//+------------------------------------------------------------------+
//| Cycle |
//+------------------------------------------------------------------+
for(i=limit;i>=0;i--)
{
// Âû÷èñëèòü MACD
MCD[i]=iMA(NULL,0,FastMA,0, MODE_EMA, PRICE_TYPICAL, i)-
iMA(NULL,0,SlowMA,0, MODE_EMA, PRICE_TYPICAL, i);
// Íàéòè ìàêñ. è ìèí. çíà÷åíèÿ MACD íà ïåðèîäå TimeAVG
MinMACD=MCD[i];
MaxMACD=MCD[i];
for(j=i+1;j<i+PeriodTimeAVG[i+1];j++)
{
if(MCD[j]<MinMACD) MinMACD=MCD[j];
if(MCD[j]>MaxMACD) MaxMACD=MCD[j];
}
// Âû÷èñëèòü ñòîõàñòèê îò MACD
delta=MaxMACD-MinMACD;
if(delta==0.) // ïðîâåðêà äëÿ èñêëþ÷åíèÿ äåëåíèÿ íà 0
ST=50.;
else // åñëè íå 0 - äåëèì
{
ST=(MCD[i]-MinMACD)/delta*100;
}
// Çàïîëíèòü áóôåð
prev=MA[i+1];
MA[i]=(2./(1.+PeriodTimeAVG[i+1]/2.))*(ST-prev)+prev;
//Âûâåñòè êîììåíòàðèè
if (!IsTesting() && Comments)
Comment(" Deviation: "+DoubleToStr(PointDeviation[1],0)+
" points\n Average Amount of Bars : "+DoubleToStr(PeriodTimeAVG[1],0)+
"\n Crosses: "+Crosses);
}
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
---