Скачать MetaTrader 5

помогите создать советника на основе вот этого индикатора

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Forex Trader
114269
Forex Trader  
помогите создать советника на основе вот этого индикатора ,пожалуйста:
(когда меняется с красного на зелёный buy,наооборот sell)

//+------------------------------------------------------------------+
//| Up&Down.mq4 |
//| |
//| |
//+------------------------------------------------------------------+
#property copyright ""
#property link ""

#property indicator_chart_window
#property indicator_buffers 2
#property indicator_color1 Lime
#property indicator_color2 Tomato
//---- input parameters
extern int HL_period=3;
extern int NumBars=200;
//---- buffers
double ExtMapBuffer1[];
double ExtMapBuffer2[];
//------
double ur[][2];
int h1[];
int l1[];

int hh=0;
int ll=0;

double spread;
//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
int init()
{
//---- indicators
SetIndexStyle(0,DRAW_ARROW);
SetIndexArrow(0,159);
SetIndexBuffer(0,ExtMapBuffer1);
SetIndexEmptyValue(0,0.0);
SetIndexStyle(1,DRAW_ARROW);
SetIndexArrow(1,159);
SetIndexBuffer(1,ExtMapBuffer2);
SetIndexEmptyValue(1,0.0);
//----
ArrayResize(ur,NumBars+1);
ArrayResize(h1,HL_period);
ArrayResize(l1,HL_period);

spread = Ask-Bid;
return(0);
}
//+------------------------------------------------------------------+
//| Custor indicator deinitialization function |
//+------------------------------------------------------------------+
int deinit()
{
//----

//----
return(0);
}
//+------------------------------------------------------------------+
//| Custom indicator iteration function |
//+------------------------------------------------------------------+
int start()
{
int n,shift,Nbar,k,mm;
double MaH,MaL;

//----
if( Period() == 5 )
{
ArrayInitialize(ur,0);
ArrayInitialize(h1,0);
ArrayInitialize(l1,0);
for( shift = NumBars; shift>=0; shift-- )
{
if( TimeHour(Time[shift + 1]) != TimeHour(Time[shift]) )
{
Nbar = -1;
k = 0;
mm = 0;
n = shift - 15;
while( n <= shift + HL_period * 12 + 5 )
{
if( n < 0 )
{
n = 1;
Nbar = 0;
}
if( TimeHour(Time[n + 1]) != TimeHour(Time[n]) && Nbar == -1 )
{
Nbar = n;
mm = n;
n++;
continue;
}
if( TimeHour(Time[n + 1]) != TimeHour(Time[n]) && Nbar != -1 )
{
h1[k] = Highest(NULL,0,MODE_HIGH,n - Nbar,n-(n-Nbar)+1);
l1[k] = Lowest(NULL,0,MODE_LOW,n - Nbar,n-(n-Nbar)+1);
k++;
Nbar = n;
}
n++;
}
MaH = 0;
MaL = 0;
for( n = 0; n<HL_period; n++ )
{
MaH = MaH + High[h1[n]]+spread;
MaL = MaL + Low[l1[n]];
}
MaH = MaH / HL_period;
MaL = MaL / HL_period;
ur[shift][0] = MaH;
ur[shift][1] = MaL;
if( Close[mm + 1]+spread/2 >= MaH ) { ll = 1; hh = 0; }
if( Close[mm + 1]+spread/2 <= MaL ) { hh = 1; ll = 0; }
}
if( ur[shift,1] == 0 )
{
ur[shift][0] = ur[shift + 1][0];
ur[shift][1] = ur[shift + 1][1];
}
if( ll == 1 )
{
ExtMapBuffer2[shift]=0;
ExtMapBuffer1[shift]=ur[shift][1];
}
if( hh == 1 )
{
ExtMapBuffer1[shift]=0;
ExtMapBuffer2[shift]=ur[shift][0];
}
}
return(0);
}
//-----------------------------
if( Period() == 15 )
{
ArrayInitialize(ur,0);
ArrayInitialize(h1,0);
ArrayInitialize(l1,0);
for( shift = NumBars; shift>=0; shift-- )
{
if( TimeHour(Time[shift + 1]) != TimeHour(Time[shift]) )
{
Nbar = -1;
k = 0;
mm = 0;
n = shift - 5;
while( n <= shift + HL_period * 4 + 2 )
{
if( n < 0 )
{
n = 1;
Nbar = 0;
}
if( TimeHour(Time[n + 1]) != TimeHour(Time[n]) && Nbar == -1 )
{
Nbar = n;
mm = n;
n++;
continue;
}
if( TimeHour(Time[n + 1]) != TimeHour(Time[n]) && Nbar != -1 )
{
h1[k] = Highest(NULL,0,MODE_HIGH,n - Nbar,n-(n-Nbar)+1);
l1[k] = Lowest(NULL,0,MODE_LOW,n - Nbar,n-(n-Nbar)+1);
k++;
Nbar = n;
}
n++;
}
MaH = 0;
MaL = 0;
for( n = 0; n<HL_period; n++ )
{
MaH = MaH + High[h1[n]]+spread;
MaL = MaL + Low[l1[n]];
}
MaH = MaH / HL_period;
MaL = MaL / HL_period;
ur[shift][0] = MaH;
ur[shift][1] = MaL;
if( Close[mm + 1]+spread/2 >= MaH ) { ll = 1; hh = 0; }
if( Close[mm + 1]+spread/2 <= MaL ) { hh = 1; ll = 0; }
}
if( ur[shift,1] == 0 )
{
ur[shift][0] = ur[shift + 1][0];
ur[shift][1] = ur[shift + 1][1];
}
if( ll == 1 )
{
ExtMapBuffer2[shift]=0;
ExtMapBuffer1[shift]=ur[shift][1];
}
if( hh == 1 )
{
ExtMapBuffer1[shift]=0;
ExtMapBuffer2[shift]=ur[shift][0];
}
}
return(0);
}
//-------------------------
if( Period() == 30 )
{
ArrayInitialize(ur,0);
ArrayInitialize(h1,0);
ArrayInitialize(l1,0);
for( shift = NumBars; shift>=0; shift-- )
{
if( TimeMinute(Time[shift])==0 && (TimeHour(Time[shift])==0 || TimeHour(Time[shift])==4 || TimeHour(Time[shift])==8 || TimeHour(Time[shift])==12 || TimeHour(Time[shift])==16 || TimeHour(Time[shift])==20) )
{
Nbar = -1;
k = 0;
mm = 0;
n = shift - 10;
while( n <= shift + HL_period * 8 + 5 )
{
if( n < 0 )
{
n = 1;
Nbar = 0;
}
if( TimeMinute(Time[n])==0 && (TimeHour(Time[n])==0 || TimeHour(Time[n])==4 || TimeHour(Time[n])==8 || TimeHour(Time[n])==12 || TimeHour(Time[n])==16 || TimeHour(Time[n])==20) && Nbar == -1 )
{
Nbar = n;
mm = n;
n++;
continue;
}
if( TimeMinute(Time[n])==0 && (TimeHour(Time[n])==0 || TimeHour(Time[n])==4 || TimeHour(Time[n])==8 || TimeHour(Time[n])==12 || TimeHour(Time[n])==16 || TimeHour(Time[n])==20) && Nbar != -1 )
{
h1[k] = Highest(NULL,0,MODE_HIGH,n - Nbar,n-(n-Nbar)+1);
l1[k] = Lowest(NULL,0,MODE_LOW,n - Nbar,n-(n-Nbar)+1);
k++;
Nbar = n;
}
n++;
}
MaH = 0;
MaL = 0;
for( n = 0; n<HL_period; n++ )
{
MaH = MaH + High[h1[n]]+spread;
MaL = MaL + Low[l1[n]];
}
MaH = MaH / HL_period;
MaL = MaL / HL_period;
ur[shift][0] = MaH;
ur[shift][1] = MaL;
if( Close[mm + 1]+spread/2 >= MaH ) { ll = 1; hh = 0; }
if( Close[mm + 1]+spread/2 <= MaL ) { hh = 1; ll = 0; }
}
if( ur[shift,1] == 0 )
{
ur[shift][0] = ur[shift + 1][0];
ur[shift][1] = ur[shift + 1][1];
}
if( ll == 1 )
{
ExtMapBuffer2[shift]=0;
ExtMapBuffer1[shift]=ur[shift][1];
}
if( hh == 1 )
{
ExtMapBuffer1[shift]=0;
ExtMapBuffer2[shift]=ur[shift][0];
}
}
return(0);
}
//----
if( Period() == 60 )
{
ArrayInitialize(ur,0);
ArrayInitialize(h1,0);
ArrayInitialize(l1,0);
for( shift = NumBars; shift>=0; shift-- )
{
if( TimeMinute(Time[shift])==0 && (TimeHour(Time[shift])==0 || TimeHour(Time[shift])==4 || TimeHour(Time[shift])==8 || TimeHour(Time[shift])==12 || TimeHour(Time[shift])==16 || TimeHour(Time[shift])==20) )
{
Nbar = -1;
k = 0;
mm = 0;
n = shift - 6;
while( n <= shift + HL_period * 4 + 3 )
{
if( n < 0 )
{
Nbar = 0;
n = 1;
}
if( TimeMinute(Time[n])==0 && (TimeHour(Time[n])==0 || TimeHour(Time[n])==4 || TimeHour(Time[n])==8 || TimeHour(Time[n])==12 || TimeHour(Time[n])==16 || TimeHour(Time[n])==20) && Nbar == -1 )
{
Nbar = n;
mm = n;
n++;
continue;
}
if( TimeMinute(Time[n])==0 && (TimeHour(Time[n])==0 || TimeHour(Time[n])==4 || TimeHour(Time[n])==8 || TimeHour(Time[n])==12 || TimeHour(Time[n])==16 || TimeHour(Time[n])==20) && Nbar != -1 )
{
h1[k] = Highest(NULL,0,MODE_HIGH,n - Nbar,n-(n-Nbar)+1);
l1[k] = Lowest(NULL,0,MODE_LOW,n - Nbar,n-(n-Nbar)+1);
k++;
Nbar = n;
}
n++;
}
MaH = 0;
MaL = 0;
for( n = 0; n<HL_period; n++ )
{
MaH = MaH + High[h1[n]]+spread;
MaL = MaL + Low[l1[n]];
}
MaH = MaH / HL_period;
MaL = MaL / HL_period;
ur[shift][0] = MaH;
ur[shift][1] = MaL;
if( Close[mm + 1]+spread/2 >= MaH ) { ll = 1; hh = 0; }
if( Close[mm + 1]+spread/2 <= MaL ) { hh = 1; ll = 0; }
}
if( ur[shift,1] == 0 )
{
ur[shift][0] = ur[shift + 1][0];
ur[shift][1] = ur[shift + 1][1];
}
if( ll == 1 )
{
ExtMapBuffer2[shift]=0;
ExtMapBuffer1[shift]=ur[shift][1];
}
if( hh == 1 )
{
ExtMapBuffer1[shift]=0;
ExtMapBuffer2[shift]=ur[shift][0];
}
}
return(0);
}
//--------------
if( Period() == 240 )
{
ArrayInitialize(ur,0);
ArrayInitialize(h1,0);
ArrayInitialize(l1,0);
for( shift = NumBars; shift>=0; shift-- )
{
if( TimeDay(Time[shift + 1]) != TimeDay(Time[shift]) )
{
Nbar = -1;
k = 0;
mm = 0;
n = shift - 8;
while( n <= shift + HL_period * 8 + 4 )
{
if( n < 0 )
{
Nbar = 0;
n = 1;
}
if( TimeDay(Time[n + 1]) != TimeDay(Time[n]) && Nbar == -1 )
{
Nbar = n;
mm = n;
n++;
continue;
}
if( TimeDay(Time[n + 1]) != TimeDay(Time[n]) && Nbar != -1 )
{
h1[k] = Highest(NULL,0,MODE_HIGH,n - Nbar,n-(n-Nbar)+1);
l1[k] = Lowest(NULL,0,MODE_LOW,n - Nbar,n-(n-Nbar)+1);
k++;
Nbar = n;
}
n++;
}
MaH = 0;
MaL = 0;
for( n = 0; n<HL_period; n++ )
{
MaH = MaH + High[h1[n]]+spread;
MaL = MaL + Low[l1[n]];
}
MaH = MaH / HL_period;
MaL = MaL / HL_period;
ur[shift][0] = MaH;
ur[shift][1] = MaL;
if( Close[mm + 1]+spread/2 >= MaH ) { ll = 1; hh = 0; }
if( Close[mm + 1]+spread/2 <= MaL ) { hh = 1; ll = 0; }
}
if( ur[shift,1] == 0 )
{
ur[shift][0] = ur[shift + 1][0];
ur[shift][1] = ur[shift + 1][1];
}
if( ll == 1 )
{
ExtMapBuffer2[shift]=0;
ExtMapBuffer1[shift]=ur[shift][1];
}
if( hh == 1 )
{
ExtMapBuffer1[shift]=0;
ExtMapBuffer2[shift]=ur[shift][0];
}
}
return(0);
}
//----
if( Period() == 1440 )
{
ArrayInitialize(ur,0);
ArrayInitialize(h1,0);
ArrayInitialize(l1,0);
for( shift = NumBars; shift>=0; shift-- )
{
if( TimeDayOfWeek(Time[shift + 1]) == 5 && TimeDayOfWeek(Time[shift]) == 1 )
{
Nbar = -1;
k = 0;
mm = 0;
n = shift - 6;
while( n <= shift + HL_period * 5 + 3 )
{
if( n < 0 )
{
Nbar = 0;
n = 1;
}
if( TimeDayOfWeek(Time[n + 1])==5 && TimeDayOfWeek(Time[n])==1 && Nbar == -1 )
{
Nbar = n;
mm = n;
n++;
continue;
}
if( TimeDayOfWeek(Time[n + 1])==5 && TimeDayOfWeek(Time[n])==1 && Nbar != -1 )
{
h1[k] = Highest(NULL,0,MODE_HIGH,n - Nbar,n-(n-Nbar)+1);
l1[k] = Lowest(NULL,0,MODE_LOW,n - Nbar,n-(n-Nbar)+1);
k++;
Nbar = n;
}
n++;
}
MaH = 0;
MaL = 0;
for( n = 0; n<HL_period; n++ )
{
MaH = MaH + High[h1[n]]+spread;
MaL = MaL + Low[l1[n]];
}
MaH = MaH / HL_period;
MaL = MaL / HL_period;
ur[shift][0] = MaH;
ur[shift][1] = MaL;
if( Close[mm + 1]+spread/2 >= MaH ) { ll = 1; hh = 0; }
if( Close[mm + 1]+spread/2 <= MaL ) { hh = 1; ll = 0; }
}
if( ur[shift,1] == 0 )
{
ur[shift][0] = ur[shift + 1][0];
ur[shift][1] = ur[shift + 1][1];
}
if( ll == 1 )
{
ExtMapBuffer2[shift]=0;
ExtMapBuffer1[shift]=ur[shift][1];
}
if( hh == 1 )
{
ExtMapBuffer1[shift]=0;
ExtMapBuffer2[shift]=ur[shift][0];
}
}
return(0);
}
//----
if( Period() == 10080 )
{
ArrayInitialize(ur,0);
ArrayInitialize(h1,0);
ArrayInitialize(l1,0);
for( shift = NumBars; shift>=0; shift-- )
{
if( TimeMonth(Time[shift + 1]+1440*60) != TimeMonth(Time[shift]+1440*60) )
{
Nbar = -1;
k = 0;
mm = 0;
n = shift - 8;
while( n <= shift + HL_period * 8 + 4 )
{
if( n < 0 )
{
Nbar = 0;
n = 1;
}
if( TimeMonth(Time[n + 1]+1440*60) != TimeMonth(Time[n]+1440*60) && Nbar == -1 )
{
Nbar = n;
mm = n;
if( n>NumBars-18 ) Print(TimeToStr(Time[n]));
n++;
continue;
}
if( TimeMonth(Time[n + 1]+1440*60) != TimeMonth(Time[n]+1440*60) && Nbar != -1 )
{
h1[k] = Highest(NULL,0,MODE_HIGH,n - Nbar,n-(n-Nbar)+1);
l1[k] = Lowest(NULL,0,MODE_LOW,n - Nbar,n-(n-Nbar)+1);
k++;
Nbar = n;
}
n++;
}
MaH = 0;
MaL = 0;
for( n = 0; n<HL_period; n++ )
{
MaH = MaH + High[h1[n]]+spread;
MaL = MaL + Low[l1[n]];
}
MaH = MaH / HL_period;
MaL = MaL / HL_period;
ur[shift][0] = MaH;
ur[shift][1] = MaL;
if( Close[mm + 1]+spread/2 >= MaH ) { ll = 1; hh = 0; }
if( Close[mm + 1]+spread/2 <= MaL ) { hh = 1; ll = 0; }
}
if( ur[shift,1] == 0 )
{
ur[shift][0] = ur[shift + 1][0];
ur[shift][1] = ur[shift + 1][1];
}
if( ll == 1 )
{
ExtMapBuffer2[shift]=0;
ExtMapBuffer1[shift]=ur[shift][1];
}
if( hh == 1 )
{
ExtMapBuffer1[shift]=0;
ExtMapBuffer2[shift]=ur[shift][0];
}
}
return(0);
}
//----
return(0);
}
//+------------------------------------------------------------------+
Forex Trader
114269
Forex Trader  
Увидил Инджикатор,но было ыб интересно понять какую логику Вы там азкладывлаи дял релаьного применения

Давайте лучше по порядку поясните,что вы хотите увидыть и отвечу что можно сделать
Forex Trader
114269
Forex Trader  
всё долго объеснять просто хочу посмотреть как он сам по себе торгует без остальных индикаторов.этот индикатор тоже самое(почти)как скользящая средняя например постав скользящую 15 периода и его 3
Forex Trader
114269
Forex Trader  
всё долго объеснять просто хочу посмотреть как он сам по себе торгует без остальных индикаторов.этот индикатор тоже самое(почти)как скользящая средняя например постав скользящую 15 периода и его 3


Если Вы смогли написать такой индюк, то по нему советника написать - дело получаса от силы.

..................

Только сдается мне, что это HiLo индикатор, выдающий показания с учетом старших т\ф, взятый Вами с форума ..... (называть не буду) . Если это так, то не очень приятно, что Вы убрали копирайты. И, если это индюк с форума, то там, на том форуме, этот индикатор обсуждался - он перерисовывает историю.....

Если же это Ваш собственный индюк, то Вы сами легко напишете эксперта - по крайней мере это будет быстрее, чем ждать пока кто-либо заинтересуется.

Удачи.
Forex Trader
114269
Forex Trader  
дк мне его дали в нэте ,я сам в этом не смыслю
Forex Trader
114269
Forex Trader  
дк мне его дали в нэте ,я сам в этом не смыслю


Так бы и писали сразу. Вобщем на пауке это было - индикатор перерисовывает историю. Количество перерисовываемых баров пропорционально текущему т\ф (если не ошибаюсь - давно было) и, ИМХО,самостоятельно для работы непригоден. Я лично предпочитаю вообще не использовать индикаторов изменяющих показания на истории. Если изменения его сигалов трактовать как сиганл к покупке(продаже), то Вы можете увидеть, например, на текущем баре, что если бы пять баров назад стали в бай(селл) , то уже были бы в плюсах. Или что еще хуже, что вот ту сделку, пять баров назад, делать было ненужно - история перерисовалась и сигнал на бай пропал и остался синал на селл. Цифры условные - говорю же давно было не помню. Если это не Ваш личный индикатор, то скорее всего тот самый, о котором я говорю. Арзума его переделывал, чтобы показания на истории не менялись, но и соответственно это сразу стало неинтересно.

Удачи.
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий