Помогите усовершенствовать индикатор - страница 2

 

Назар, нужен именно исходный код, а не компилированный индюк. Не хотите выкладывать - значит, Вы снова создали бессмысленную тему.

Или хотя бы расскажите принцип его работы.

 
Mathemat:

Назар, нужен именно исходный код, а не компилированный индюк. Не хотите выкладывать - значит, Вы снова создали бессмысленную тему.

Или хотя бы расскажите принцип его работы.

На то я и новичок, подскажите, как извлечь код
 
Программист выслал Вам файл с расширением mq4? Вот это он и есть.
 
Нет, только сам индикатор
 
Novichok5:

Здравствуйте!

В продолжение предыдущей темы. Недавно заказывал на MQL5 разработку индикатора способного определить направление движения свечи при ее открытии. Индикатор прекрасно работает в тренде, но во флэте правильно показывает через одну. Возможно его следует скомбинировать с каким другим индикатором? Как понять где он ошибется?

Как минимум у Вас есть тех. задание на определение движения свечи.

Во вторых, - должен быть файл с тем же названием и расширением *.mq4

и в третьих, ну хоть немного включайтесь в тему :)

 
//+------------------------------------------------------------------+
//| prd.mq4 |
//| Copyright © 2011, _Techno_ |
//| niko@pingwin.uvttk.ru |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2011, _Techno_"
#property link "niko@pingwin.uvttk.ru"
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
//----
#property indicator_chart_window
#property indicator_color1 Yellow
#property indicator_color2 Orange
#property indicator_buffers 2
#property indicator_width1 3
#property indicator_width2 3
int periodX1=34;
int periodX2=200;
int periodX3=66;
int level=3; // recounting's depth
bool does=false;
//---- indicator buffers
double ADOI[];
double summP[];
double Post[];
int counted_barsX;
//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
double bU[],bD[];
extern bool special_filer=0;bool buls=0;
int comb[20],rez[20];

int init()
{
SetIndexStyle(0,DRAW_ARROW);
SetIndexArrow(0,233);
SetIndexBuffer(0,bU);

SetIndexStyle(1,DRAW_ARROW);
SetIndexArrow(1,234);
SetIndexBuffer(1,bD);

SetIndexEmptyValue(0,0.0);
SetIndexEmptyValue(1,0.0);

IndicatorShortName("candles__"+gp(Period()));

in();
}
//----
//----
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
int bar;
int start()
{
int counted_bars = IndicatorCounted();
counted_barsX=counted_bars;

if (counted_bars==0 && does)
{
ArrayInitialize(ADOI,0.0);
ArrayInitialize(summP,0.0);
ArrayInitialize(Post,0.0);
}


if(bar==Bars)return;
bar=Bars;

int ss=ss();
bU[1]=0;bD[1]=0;
bU[0]=0;bD[0]=0;

if(ss==2)bU[0]=Low[1]-7*Point;
else bD[0]=High[1]+7*Point;
}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
int ss()
{
int up=0,dw=0;
for(int i=1;i<Bars;i++)
{
if(Open[i]<Close[i])
if(dw>0)break;
else up++;
if(Open[i]>Close[i])
if(up>0)break;
else dw++;
}

int xu=50,xd=50;


xu+=rez[up];xu/=2;


xd+=rez[dw];xd/=2;

int cc;

if(special_filer)
{
MathSrand(TimeLocal());
cc=MathRand()%100;if(buls||!cc)somear();
if(cc>50)xu+=15;
else xd+=15;
}
if(xu>xd)return(2);
if(xd>xu)return(1);
if(xu==xd)
{
MathSrand(TimeLocal());
cc=MathRand()%100;
if(cc>50)return(2);
else return(1);
}
}
//----
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
void in()
{
int bars,b,m;
int tr=0; int num;
for(int i=1;i<Bars;i++)
{

bars++;
if(Open[i]<Close[i])
{if(tr==0)num=0;
if(tr==1){save(num);num=0;}
b++;tr=2;num++;
}

if(Open[i]>Close[i])
{if(tr==0)num=0;
if(tr==2){save(num);num=0;}
m++;tr=1;num++;
}
if(Open[i]==Close[i]){tr=0;save(num);num=0;}

}
for(i=1;i<20;i++)
{
rez[i]=100*(comb[i]*i)/bars;
}
rez[1]=50;
}
//----
void save(int i)
{
comb[i]++;
}
//----
double somear()
{
int i,limit,counterZ,whatlookfor;
int ijk,back,lasthighpos,lastlowpos;
double val,res;
double curlow,curhigh,lasthigh,lastlow;
if (counted_barsX==0)
{
limit=Bars-periodX1;
does=true;
}
if (counted_barsX>0)
{
while (counterZ<level && i<100)
{
res=ADOI[i];
if (res!=0) counterZ++;
i++;
}
i--;
limit=i;
if (Post[i]!=0)
{
curlow=Post[i];
whatlookfor=1;
}
else
{
curhigh=summP[i];
whatlookfor=-1;
}
for (i=limit-1;i>=0;i--)
{
ADOI[i]=0.0;
Post[i]=0.0;
summP[i]=0.0;
}
}

for(ijk=limit; ijk>=0; ijk--)
{
val=Low[iLowest(NULL,0,MODE_LOW,periodX1,ijk)];
if(val==lastlow) val=0.0;
else
{
lastlow=val;
if((Low[ijk]-val)>(periodX2*Point)) val=0.0;
else
{
for(back=1; back<=periodX3; back++)
{
res=Post[ijk+back];
if((res!=0)&&(res>val)) Post[ijk+back]=0.0;
}
}
}
if (Low[ijk]==val) Post[ijk]=val; else Post[ijk]=0.0;

val=High[iHighest(NULL,0,MODE_HIGH,periodX1,ijk)];
if(val==lasthigh) val=0.0;
else
{
lasthigh=val;
if((val-High[ijk])>(periodX2*Point)) val=0.0;
else
{
for(back=1; back<=periodX3; back++)
{
res=summP[ijk+back];
if((res!=0)&&(res<val)) summP[ijk+back]=0.0;
}
}
}
if (High[ijk]==val) summP[ijk]=val; else summP[ijk]=0.0;
}


if (whatlookfor==0)
{
lastlow=0;
lasthigh=0;
}
else
{
lastlow=curlow;
lasthigh=curhigh;
}
for (ijk=limit;ijk>=0;ijk--)
{
res=0.0;
switch(whatlookfor)
{
case 0:
if (lastlow==0 && lasthigh==0)
{
if (summP[ijk]!=0)
{
lasthigh=High[ijk];
lasthighpos=ijk;
whatlookfor=-1;
ADOI[ijk]=lasthigh;
res=1;
}
if (Post[ijk]!=0)
{
lastlow=Low[ijk];
lastlowpos=ijk;
whatlookfor=1;
ADOI[ijk]=lastlow;
res=1;
}
}
break;
case 1:
if (Post[ijk]!=0.0 && Post[ijk]<lastlow && summP[ijk]==0.0)
{
ADOI[lastlowpos]=0.0;
lastlowpos=ijk;
lastlow=Post[ijk];
ADOI[ijk]=lastlow;
res=1;
}
if (summP[ijk]!=0.0 && Post[ijk]==0.0)
{
lasthigh=summP[ijk];
lasthighpos=ijk;
ADOI[ijk]=lasthigh;
whatlookfor=-1;
res=1;
}
break;
case -1: // look for lawn
if (summP[ijk]!=0.0 && summP[ijk]>lasthigh && Post[ijk]==0.0)
{
ADOI[lasthighpos]=0.0;
lasthighpos=ijk;
lasthigh=summP[ijk];
ADOI[ijk]=lasthigh;
}
if (Post[ijk]!=0.0 && summP[ijk]==0.0)
{
lastlow=Post[ijk];
lastlowpos=ijk;
ADOI[ijk]=lastlow;
whatlookfor=1;
}
break;
default: return;
}
}

}
//----
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
string gp(int tf)
{
switch(tf)
{
case 1: return("M1");
case 5: return("M5");
case 15: return("M15");
case 30: return("M30");
case 60: return("H1");
case 240: return("H4");
case 1440: return("D1");
case 10080: return("W1");
case 43200: return("MN");
default: break;
}
}
//---- 
/Вставил код как полагается, через кнопку SRC - Mathemat/
 
ostroZub:

Как минимум у Вас есть тех. задание на определение движения свечи.

Во вторых, - должен быть файл с тем же названием и расширением *.mq4

и в третьих, ну хоть немного включайтесь в тему :)



Если б я хоть что-то понимал в этих кодах, я б включался. Я вот такой индикатор заказал, вот так его написали, как зделать чтоб он меньше ошибался на М5
 
И программист ни слова не сказал Вам о принципе работы этого индюка?
 
Mathemat:
И программист ни слова не сказал Вам о принципе работы этого индюка?


Нет, но код я, вроде, предоставил
 
Ну тогда ждите энтузиастов, которые в нем разберутся.
Причина обращения: