rvmFractalsLevel

Indikátor vykreslující fraktály dle fibonacciho čísel.

 

 

//+——————————————————————+
//|                                             rvmFractalsLevel.mq4 |
//|                                        Copyright © 2005, Profi_R |
//|                                               rvm_fam@fromru.com |
//+——————————————————————+
#property copyright „Copyright © 2005, Profi_R“
#property link      „rvm_fam@fromru.com“

#property indicator_chart_window
#property indicator_buffers 7
#property indicator_color1 DeepSkyBlue
#property indicator_color2 DeepSkyBlue
#property indicator_color3 Black
#property indicator_color4 Black
#property indicator_color5 Black
#property indicator_color6 Black
#property indicator_color7 Black
#property indicator_color8 Black
//—- input parameters
extern int nLeft=50;
extern int nRight=50;
extern int filter=10;
//—- buffers
double UpBuffer[];
double DnBuffer[];
double f_2[];
double f_3[];
double f_4[];
double f_5[];
double f_6[];

//—-
int draw_begin1=0, draw_begin2=0, d_b3=0;
//+——————————————————————+
//| Custom indicator initialization function                         |
//+——————————————————————+
int init()
{
double nfUp;
//—- indicators
IndicatorBuffers(8);
SetIndexStyle(0,DRAW_LINE,0,3);
SetIndexStyle(1,DRAW_LINE,0,3);
SetIndexStyle(2,DRAW_LINE,2);
SetIndexStyle(3,DRAW_LINE,2);
SetIndexStyle(4,DRAW_LINE,2);
SetIndexStyle(5,DRAW_LINE,2);
SetIndexStyle(6,DRAW_LINE,2);
SetIndexBuffer(0,UpBuffer);
SetIndexBuffer(1,DnBuffer);
SetIndexBuffer(2,f_2);
SetIndexBuffer(3,f_3);
SetIndexBuffer(4,f_4);
SetIndexBuffer(5,f_5);
SetIndexBuffer(6,f_6);

//—- name for DataWindow and indicator subwindow label
string short_name; //îá˙âëĺíčĺ ďĺđĺěĺííîé short_name ňčďŕ „ńňđîęîâűé“
//ďĺđĺěĺííîé short_name ďđčńâŕčâŕĺě ńňđîęîâîĺ çíŕ÷ĺíčĺ đŕâíîĺ âűđŕćĺíčţ
short_name=“rvmFractalsLevel(„+nLeft+“,“+nRight+“,“+filter+“)“;
IndicatorShortName(short_name); //äë˙ îňîáđŕćĺíč˙ íŕ ăđŕôčęĺ ďđčńâîčě číäčęŕňîđó ęđŕňęîĺ
//íŕčěĺíîâŕíčĺ
//äë˙ îňîáđŕćĺíč˙ íŕ ăđŕôčęĺ ďđčńâîčě ěĺňęĺ îňîáđŕćŕţůĺé çíŕ÷ĺíč˙ 0 áóôĺđŕ čě˙ Up Channel
SetIndexLabel(0,“Up Level („+nLeft+“,“+nRight+“,“+filter+“)“);
//äë˙ îňîáđŕćĺíč˙ íŕ ăđŕôčęĺ ďđčńâîčě ěĺňęĺ îňîáđŕćŕţůĺé çíŕ÷ĺíč˙ 1 áóôĺđŕ čě˙ Down Channel
SetIndexLabel(1,“Down Level („+nLeft+“,“+nRight+“,“+filter+“)“);
SetIndexLabel(2,“f_2 („+nLeft+“,“+nRight+“,“+filter+“)“);
SetIndexLabel(3,“f_3 („+nLeft+“,“+nRight+“,“+filter+“)“);
SetIndexLabel(4,“f_4 („+nLeft+“,“+nRight+“,“+filter+“)“);
SetIndexLabel(5,“f_5 („+nLeft+“,“+nRight+“,“+filter+“)“);
SetIndexLabel(6,“f_6 („+nLeft+“,“+nRight+“,“+filter+“)“);

//—- Çäĺńü îďđĺäĺëčě íŕ÷ŕëüíűĺ ňî÷ęč äë˙ ďđîđčńîâęč číäčęŕňîđŕ
int n,k,i,Range=nLeft+nRight+1;
//ďĺđĺáĺđĺě ńâĺ÷ęč îň (âńĺăî ńâĺ÷ĺę ěčíóń ěčíčěóě ńâĺ÷ĺę ńëĺâŕ) äî (ěčíčěóě ńâĺ÷ĺę ńďđŕâŕ)
for(n=Bars-1-nLeft;n>=nRight;n–)
{
//âĺđőíčĺ ôđŕęňŕëű
//ĺńëč íŕ÷ŕëî îňđčńîâęč âĺđőíĺăî óđîâí˙ íĺ îďđĺäĺëĺíî
if(draw_begin1==0)
{
//ňĺęóůŕ˙ ńâĺ÷ŕ ěŕęńčěóě íŕ ëîęŕëüíîě ďđîěĺćóňęĺ?
if(High[n]>=High[Highest(NULL,0,MODE_HIGH,Range,n-nRight)])
{
int fRange=nvnLeft(n,nLeft)+nvnRight(n,nRight)+1;
//ĺńëč îíŕ ćĺ – ôđŕęňŕë
if(High[n]>=High[Highest(NULL,0,MODE_HIGH,fRange,n-nvnRight(n,nRight))])
{
draw_begin1=Bars-n;//íŕ÷ŕëî îňđčńîâęč âĺđőíĺăî óđîâí˙ îďđĺäĺëĺíî
for(i=Bars-1;i>draw_begin1;i–)
{
UpBuffer[i]=High[Bars-draw_begin1];
}
}
}//ęîíĺö äĺéńňâčé ĺńëč if(High[n]>=High[Highest(NULL,0,MODE_HIGH,Range,n-nRight)]=čńňčíŕ
}//ęîíĺö óńëîâč˙ if(draw_begin1==0)

//íčćíčĺ ôđŕęňŕëű
//ĺńëč íŕ÷ŕëî îňđčńîâęč íčćíĺăî óđîâí˙ íĺ îďđĺäĺëĺíî
if(draw_begin2==0)
{
//ňĺęóůŕ˙ ńâĺ÷ŕ ěčíčěóě íŕ ëîęŕëüíîě ďđîěĺćóňęĺ?
if(Low[n]<=Low[Lowest(NULL,0,MODE_LOW,Range,n-nRight)])
{
fRange=nvnLeft(n,nLeft)+nvnRight(n,nRight)+1;
//ĺńëč îíŕ ćĺ – ôđŕęňŕë
if(Low[n]<=Low[Lowest(NULL,0,MODE_HIGH,fRange,n-nvnRight(n,nRight))])
{
draw_begin2=Bars-n;//íŕ÷ŕëî îňđčńîâęč íčćíĺăî óđîâí˙ îďđĺäĺëĺíî
for(i=Bars-1;i>draw_begin2;i–)
{
DnBuffer[i]=Low[Bars-draw_begin2];
}
}
}//ęîíĺö óńëîâč˙ if(Low[n]<=Low[Lowest(NULL,0,MODE_LOW,Range,n-nRight)])=true
}//ęîíĺö óńëîâč˙ if(draw_begin2==0)

//ĺńëč îáŕ íŕ÷ŕëŕ îňđčńîâęč óđîâíĺé îďđĺäĺëĺíű, âűőîäčě čç öčęëŕ for(n=Bars-1-nLeft;n>=nRight;n–)
if(draw_begin1>0&&draw_begin2>0) break;
}//ęîíĺö öčęëŕ for(n=Bars-1-nLeft;n>=nRight;n–)
//—-
if(draw_begin1>draw_begin2)
{
d_b3=draw_begin1;
}
else
{
d_b3=draw_begin2;
}
SetIndexDrawBegin(0,draw_begin1); //óńňŕíîâęŕ íŕ÷ŕëüíîé ňî÷ęč ďđîđčńîâęč äë˙ 0 áóôĺđŕ
SetIndexDrawBegin(1,draw_begin2); //óńňŕíîâęŕ íŕ÷ŕëüíîé ňî÷ęč ďđîđčńîâęč äë˙ 1 áóôĺđŕ
SetIndexDrawBegin(2,d_b3);
SetIndexDrawBegin(3,d_b3);
SetIndexDrawBegin(4,d_b3);
SetIndexDrawBegin(5,d_b3);
SetIndexDrawBegin(6,d_b3);
//—-
return(0);
}
//+——————————————————————+
//| Custom indicator iteration function                              |
//+——————————————————————+
int start()
{
double UpStage=0.0,DnStage=0.0;
int i,j,fRange,Range=nLeft+nRight+1;
int counted_bars=IndicatorCounted();
//—-
//ďĺđĺáčđŕĺě ńâĺ÷ęč îň (Bars-counted_bars-nLeft) äî (nRight) âęëţ÷čňĺëüíî
for(i=Bars-1-counted_bars-nLeft;i>=nRight;i–)
{
//ĺńëč ńâĺ÷ŕ ëîęŕëüíűé ěŕęńčěóě
if(High[i]>=High[Highest(NULL,0,MODE_HIGH,Range,i-nRight)])
{
//Print(TimeToStr(Time[i]), „******Ëîęŕëüíűé ěŕęńčěóě“);
fRange=nvnLeft(i,nLeft)+nvnRight(i,nRight)+1;
//ĺńëč îíŕ ćĺ – ôđŕęňŕë
if(High[i]>=High[Highest(NULL,0,MODE_HIGH,fRange,i-nvnRight(i,nRight))])
{
UpStage=High[i];
//Print(“    îíŕ ćĺ ôđŕęňŕë“);
}
else
{
if(High[i]<=UpBuffer[i+1])
{
UpStage=UpBuffer[i+1];
//Print(“    íĺ ôđŕęňŕë, íî íčćĺ ďđĺäűäóůĺăî óđîâí˙“);
}
else
{
UpStage=nfUp(i);
//Print(“    íĺ ôđŕęňŕë, âűřĺ ďđĺäűäóůĺăî óđîâí˙“);
}
}
}
else
{
//Print(TimeToStr(Time[i]), „******íĺ ëîęŕëüíűé ěŕęńčěóě“);
if(High[i]<=UpBuffer[i+1])
{
UpStage=UpBuffer[i+1];
//Print(“    íčćĺ ďđĺäűäóůĺăî óđîâí˙“);
}
else
{
UpStage=nfUp(i);
//Print(“    âűřĺ ďđĺäűäóůĺăî óđîâí˙“);
}
}

//ĺńëč ńâĺ÷ŕ ëîęŕëüíűé ěčíčěóě
if(Low[i]<=Low[Lowest(NULL,0,MODE_LOW,Range,i-nRight)])
{
fRange=nvnLeft(i,nLeft)+nvnRight(i,nRight)+1;
//Print(TimeToStr(Time[i]),“ „,nvnLeft(i,nLeft),“ „,nvnRight(i,nRight)+1);
//ĺńëč îíŕ ćĺ – ôđŕęňŕë
if(Low[i]<=Low[Lowest(NULL,0,MODE_HIGH,fRange,i-nvnRight(i,nRight))])
{
DnStage=Low[i];
}
else
{
if(Low[i]>=DnBuffer[i+1])
{
DnStage=DnBuffer[i+1];
}
else
{
DnStage=nfDn(i);
}
}
}
else
{
if(Low[i]>=DnBuffer[i+1])
{
DnStage=DnBuffer[i+1];
}
else
{
DnStage=nfDn(i);
}
}
UpBuffer[i]=UpStage;
DnBuffer[i]=DnStage;
//—- đŕń÷ĺň îńňŕëüíűő áóôĺđîâ
f_2[i]=NormalizeDouble(DnBuffer[i]+(UpBuffer[i]-DnBuffer[i])/6,4);
f_3[i]=NormalizeDouble(DnBuffer[i]+(UpBuffer[i]-DnBuffer[i])/3,4);
f_4[i]=NormalizeDouble(DnBuffer[i]+(UpBuffer[i]-DnBuffer[i])/2,4);
f_5[i]=NormalizeDouble(DnBuffer[i]+(UpBuffer[i]-DnBuffer[i])*2/3,4);
f_6[i]=NormalizeDouble(DnBuffer[i]+(UpBuffer[i]-DnBuffer[i])*5/6,4);

}//ęîíĺö öčęëŕ for(i=Bars-counted_bars-nLeft;i>=nRight;i–)
for(i=nRight-1;i>=0;i–)
{
if(High[i]<=UpBuffer[i+1])
{
UpStage=UpBuffer[i+1];
}
else
{
UpStage=nfUp(i);
}
if(Low[i]>=DnBuffer[i+1])
{
DnStage=DnBuffer[i+1];
}
else
{
DnStage=nfDn(i);
}
UpBuffer[i]=UpStage;
DnBuffer[i]=DnStage;
//—- đŕń÷ĺň îńňŕëüíűő áóôĺđîâ
f_2[i] =NormalizeDouble(DnBuffer[i]+(UpBuffer[i]-DnBuffer[i])/6,4);
f_3[i] =NormalizeDouble(DnBuffer[i]+(UpBuffer[i]-DnBuffer[i])/3,4);
f_4[i] =NormalizeDouble(DnBuffer[i]+(UpBuffer[i]-DnBuffer[i])/2,4);
f_5[i] =NormalizeDouble(DnBuffer[i]+(UpBuffer[i]-DnBuffer[i])*2/3,4);
f_6[i] =NormalizeDouble(DnBuffer[i]+(UpBuffer[i]-DnBuffer[i])*5/6,4);

}
//—- ďîńňđîĺíčĺ âĺĺđŕ Ôčáîíŕ÷÷č
double LastUp, LastDn, st_h, st_l, st_3, y1, y2, y3;
int tmp, x1=0, x2=0, x3=0, cb, dn_x, up_x;
string fibo=“Fibo 1″, fibo2=“Fibo 2“;
LastDn=DnBuffer[0];
for(cb=1;cb<=Bars-1;cb++)
{
if(tmp!=1 && LastDn>DnBuffer[cb])
{
tmp=1;
continue;
}
if(tmp==1 && DnBuffer[cb]>DnBuffer[cb-1])
{
tmp=0;
dn_x=cb-1;
break;
}
}
LastUp=UpBuffer[0];
for(cb=1;cb<=Bars-1;cb++)
{
if(tmp!=1 && LastUp<upbuffer[cb])
       {
tmp=1;
continue;
}
if(tmp==1 && UpBuffer[cb]<upbuffer[cb-1])
       {
tmp=0;
up_x=cb-1;
break;
}
}
st_h=High[Highest(NULL,0,MODE_HIGH,MathMax(dn_x,up_x),0)];
st_l=Low[Lowest(NULL,0,MODE_LOW,MathMax(dn_x,up_x),0)];
//y1=MathMin(Open[x1],Close[x1]);
//y1=MathMax(Open[x1],Close[x1]);
for(cb=MathMax(dn_x,up_x)-1;cb>=0;cb–)
{
if(High[cb]==st_h || Low[cb]==st_l)
{
if(High[cb]==st_h && (x1==0 || x2==0) )
{
if(x1==0)
{
x1=cb;
y1=High[x1];
continue;
}
else
{
x2=cb;
y2=High[x2];
break;
}
}
else
{
if(x1==0)
{
x1=cb;
y1=Low[x1];
continue;
}
else
{
x2=cb;
y2=Low[x2];
break;
}
}
}
}
//Print(„x1=“+x1+“ y1=“+y1+“ x2=“+x2+“ y2=“+y2);
if( ObjectFind(fibo)!=-1 )
{
ObjectSet(fibo,OBJPROP_TIME1,Time[x1]);
ObjectSet(fibo,OBJPROP_PRICE1,y1);
ObjectSet(fibo,OBJPROP_TIME2,Time[x2]);
ObjectSet(fibo,OBJPROP_PRICE2,y2);
}
else
{
ObjectCreate(fibo,OBJ_FIBOFAN,0,Time[x1],y1,Time[x2],y2);
ObjectSet(fibo,OBJPROP_COLOR,DodgerBlue);
ObjectSet(fibo,OBJPROP_STYLE,STYLE_DOT);
}
//—– ŕ ýňî îňđčńîâęŕ âńďîěîăŕňĺëüíîăî âĺĺđŕ ôčáîíŕ÷÷č
if(y2>y1)
{
st_3=Low[Lowest(NULL,0,MODE_LOW,x2,0)];
}
else
{
st_3=High[Highest(NULL,0,MODE_HIGH,x2,0)];
}

for(cb=0;cb<x2;cb++)
    {
if(y2>y1 && Low[cb]==st_3)
{
x3=cb;
y3=Low[cb];
break;
}
else
{
if(y2          {
x3=cb;
y3=High[cb];
break;
}
}
}
if( ObjectFind(fibo2)!=-1 )
{
ObjectSet(fibo2,OBJPROP_TIME1,Time[x2]);
ObjectSet(fibo2,OBJPROP_PRICE1,y2);
ObjectSet(fibo2,OBJPROP_TIME2,Time[x3]);
ObjectSet(fibo2,OBJPROP_PRICE2,y3);
}
else
{
ObjectCreate(fibo2,OBJ_FIBOFAN,0,Time[x2],y2,Time[x3],y3);
ObjectSet(fibo2,OBJPROP_COLOR,Yellow);
ObjectSet(fibo2,OBJPROP_STYLE,STYLE_DOT);
}

//—-
return(0);
}
//+——————————————————————+

//****************************************************************************//
// Ôóíęöč˙ nfUp âîçâđŕůŕĺň áëčćŕéřĺĺ ńëĺâŕ ę ďĺđĺäŕííîé ńâĺ÷ĺ çíŕ÷ĺíčĺ áóôĺđŕ //
// číäčęŕňîđŕ, áîëüřĺĺ čëč đŕâíîĺ çíŕ÷ĺíčţ High(Close) äë˙ ďĺđĺäŕííîé ńâĺ÷č   //
//****************************************************************************//
double nfUp(int i)
{
int l,flag=0;
double Price=0.0;
//———-
for(l=i+1;l<bars-draw_begin1-1;l++)
    {
if(filter>0)
{
if(Close[i]<=UpBuffer[l]+(UpBuffer[l]-DnBuffer[l])*filter/100)
{
Price=UpBuffer[l];
flag=1;
//Print(TimeToStr(Time[i]),“ „,l,“ „,Bars,“ „,Price,“ „,UpBuffer[l]);
}
}
else
{
if(High[i]<=UpBuffer[l])
{
Price=UpBuffer[l];
flag=1;
}
}
if(Price>0) break;
}
if(flag==0) Price=High[i];
//———-
return(Price);
}
//+——————————————————————+

//****************************************************************************//
// Ôóíęöč˙ nfDn âîçâđŕůŕĺň áëčćŕéřĺĺ ńëĺâŕ ę ďĺđĺäŕííîé ńâĺ÷ĺ çíŕ÷ĺíčĺ áóôĺđŕ //
// číäčęŕňîđŕ, ěĺíüřĺĺ čëč đŕâíîĺ çíŕ÷ĺíčţ Low(Close) äë˙ ďĺđĺäŕííîé ńâĺ÷č    //
//****************************************************************************//
double nfDn(int i)
{
int l,flag=0;
double Price=0.0;
//———-
for(l=i+1;l<bars-draw_begin2-1;l++)
    {
if(filter>0)
{
if(Close[i]>=DnBuffer[l]-(UpBuffer[l]-DnBuffer[l])*filter/100)
{
Price=DnBuffer[l];
flag=1;
}
}
else
{
if(Low[i]>=DnBuffer[l])
{
Price=DnBuffer[l];
flag=1;
}
}
if(Price>0) break;
}
if(flag==0) Price=Low[i];
//———-
return(Price);
}
//+——————————————————————+

//*****************************************************************************************//
// Ôóíęöč˙ âîçâđŕůŕĺň äë˙ ďĺđĺäŕííîé ĺé ńâĺ÷č, ěčíčěŕëüíîĺ ęîëč÷ĺńňâî ńâĺ÷ĺé ńëĺâŕ         //
// âęëţ÷ŕ˙ „âíóňđĺííčĺ“, äë˙ ňîăî, ÷ňîáű ÷čńëî íĺ âíóňđĺííčő ńâĺ÷ĺé â ďîëó÷ĺííîě äčŕďŕçîíĺ //
// áűëî íĺ ěĺíüřĺ, ÷ĺě óęŕçŕíî âî âňîđîě ďŕđŕěĺňđĺ                                         //
//*****************************************************************************************//
int nvnLeft(int i,int n)
{
int k=0,l;
for(l=i+1;l<=Bars-1;l++)
{
if(High[l]<high[l+1]&&low[l]>Low[l+1]) continue;
k++;
if(k==n)
{
k=l-i;
break;
}
}
//———-
return(k);
}
//+——————————————————————+

//*****************************************************************************************//
// Ôóíęöč˙ âîçâđŕůŕĺň äë˙ ďĺđĺäŕííîé ĺé ńâĺ÷č, ěčíčěŕëüíîĺ ęîëč÷ĺńňâî ńâĺ÷ĺé ńďđŕâŕ        //
// âęëţ÷ŕ˙ „âíóňđĺííčĺ“, äë˙ ňîăî, ÷ňîáű ÷čńëî íĺ âíóňđĺííčő ńâĺ÷ĺé â ďîëó÷ĺííîě äčŕďŕçîíĺ //
// áűëî íĺ ěĺíüřĺ, ÷ĺě óęŕçŕíî âî âňîđîě ďŕđŕěĺňđĺ                                         //
//*****************************************************************************************//
int nvnRight(int i,int n)
{
int k=0,l;
for(l=i-1;l>=0;l–)
{
if(High[l]<high[l+1]&&low[l]>Low[l+1]) continue;
k++;
if(k==n)
{
k=i-l;
break;
}
}
//———-
return(k);
}

<high[l+1]&&low[l]>

//+——————————————————————+
//| Custor indicator deinitialization function                       |
//+——————————————————————+
int deinit()
{
//—-
string fibo=“Fibo 1″, fibo2=“Fibo 2″;
ObjectDelete(fibo);
ObjectDelete(fibo2);
//—-
return(0);
}

Napsat komentář

Vaše emailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *