Помогите найти ошибку в коде!!!

 

Пробую объеденить Два индикатора JJMA и JJ2MA в один!!! т.е. что бы не забрасывать в чарт сначала JJMA а потом еше JJ2MA тудаже. А только один индикатор и наблюдать две JJMA в окне чарта и еше возможность получать сигналы на пересечений! Проблема в том что вроде объеденил и при компеляций не выдает ошибок а вот при добавлений в Чарт индикатора наблюдаю только одну JJMA ох ((( а вторая то где??? Помогите найти ошибку в коде!!!

--------------------------------------------------------------------------------------->>>

#property indicator_chart_window
//#include <JJMASeries.mqh>
#property indicator_buffers 2
#property indicator_color1 Lime
#property indicator_color2 Red
//---- input parameters
extern string jj1="Настройки первой линии JJMA1";
extern int Length = 5; // глубина сглаживания
extern int Phase = 5; // параметр, изменяющийся в пределах -100 ... +100, влияет на качество переходного процесса;
extern int Shift = 0; // cдвиг индикатора вдоль оси времени
extern int Input_Price_Customs = 0;//Выбор цен, по которым производится расчёт индикатора
//(0-"Close", 1-"Open", 2-"(High+Low)/2", 3-"High", 4-"Low", 5-"Heiken Ashi Close", 6-"(Open+Close)/2")
//---- buffers

//******************************************************************************************************
extern string jj2="Настройки второй линии JJMA2";
extern int Length1 = 5; // глубина первого сглаживания
extern int Length2 = 5; // глубина второго сглаживания
extern int Phase1 = 5; // параметр первого сглаживания, изменяющийся в пределах -100 ... +100, влияет на качество переходного процесса;
extern int Phase2 = 5; // параметр второго сглаживания, изменяющийся в пределах -100 ... +100, влияет на качество переходного процесса;
extern int Shift2 = 0; // cдвиг индикатора вдоль оси времени
extern int Input_Price_Customs2 = 0;//Выбор цен, по которым производится расчёт индикатора
//(0-"Close", 1-"Open", 2-"(High+Low)/2", 3-"High", 4-"Low", 5-"Heiken Ashi Close", 6-"(Open+Close)/2")

//---- buffers
double JJMA2[];
double Series2,Temp_Series2;
int IPC2;

double JJMA[];
double Series,Temp_Series;
int IPC;

//+SSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSS+
//| Custom indicator initialization function |
//+SSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSS+
int init()
{
//---- indicator line
SetIndexStyle (0,DRAW_LINE);
SetIndexBuffer(0,JJMA);
SetIndexShift (0, Shift);
//IndicatorShortName ("Vladon edit v 1.0","\nJJMA( Length="+Length+", Phase="+Phase+", Shift="+Shift+")","\nJ2JMA( Length1="+Length1+", Phase1="+Phase1+", Length2="+Length2+", Phase2="+Phase2+", Shift="+Shift2+")");
SetIndexLabel (0, "JJMA");
IndicatorDigits(MarketInfo(Symbol(),MODE_DIGITS));IPC=Input_Price_Customs;
//+================================================================================================================================+
if(Phase<-100){Alert("Параметр Phase должен быть от -100 до +100" + " Вы ввели недопустимое " +Phase+ " будет использовано -100");}
if(Phase> 100){Alert("Параметр Phase должен быть от -100 до +100" + " Вы ввели недопустимое " +Phase+ " будет использовано 100");}
if(Length< 1){Alert("Параметр Length должен быть не менее 1" + " Вы ввели недопустимое " +Length+ " будет использовано 1" );}
if(IPC<0){Alert("Параметр Input_Price_Customs должен быть не менее 0" + " Вы ввели недопустимое "+IPC+ " будет использовано 0" );}
if(IPC>6){Alert("Параметр Input_Price_Customs должен быть не более 6" + " Вы ввели недопустимое "+IPC+ " будет использовано 0" );}
//+================================================================================================================================+
//--+
//*****************************2222222222222222************************************
//---- indicator line
SetIndexStyle (1,DRAW_LINE);
SetIndexBuffer(1,JJMA2);
SetIndexShift (1, Shift2);
SetIndexLabel (1, "J2JMA");
IndicatorDigits(MarketInfo(Symbol(),MODE_DIGITS));IPC2=Input_Price_Customs2;
//+===================================================================================================================================+
if(Phase1<-100){Alert("Параметр Phase1 должен быть от -100 до +100" + " Вы ввели недопустимое " +Phase1+ " будет использовано -100");}
if(Phase1> 100){Alert("Параметр Phase1 должен быть от -100 до +100" + " Вы ввели недопустимое " +Phase1+ " будет использовано 100");}
if(Phase2<-100){Alert("Параметр Phase2 должен быть от -100 до +100" + " Вы ввели недопустимое " +Phase2+ " будет использовано -100");}
if(Phase2> 100){Alert("Параметр Phase2 должен быть от -100 до +100" + " Вы ввели недопустимое " +Phase2+ " будет использовано 100");}
if(Length1< 1){Alert("Параметр Length1 должен быть не менее 1" + " Вы ввели недопустимое " +Length1+ " будет использовано 1" );}
if(Length2< 1){Alert("Параметр Length2 должен быть не менее 1" + " Вы ввели недопустимое " +Length2+ " будет использовано 1" );}
if(IPC2<0){Alert("Параметр Input_Price_Customs должен быть не менее 0" + " Вы ввели недопустимое "+IPC2+ " будет использовано 0" );}
if(IPC2>6){Alert("Параметр Input_Price_Customs должен быть не более 6" + " Вы ввели недопустимое "+IPC2+ " будет использовано 0" );}
//+===================================================================================================================================+
//*************************************************************************************
return(0);
}
//+SSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSS+
//| JJMA iteration function |
//+SSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSS+
int start()
{

Comment("Vladon Edit v 3 JJMA+JJ2MA","\nВопросы,пожелания,предложения expforex@mail.ru");
int x,counted_bars=IndicatorCounted();
int limit=Bars-counted_bars-1;
//----+ Введение и инициализация внутренних переменных функции JJMASeries, nJMAnumberJ=1(Одно обращение к функции)
if (limit==Bars-1){int reset=-1;int set=JJMASeries(1,0,0,0,0,0,0,0,reset);if((reset!=0)||(set!=0))return(-1);}
//----+
for(x=limit;x>=0;x--)
{
switch(IPC)
{
//----+ Выбор цен, по которым производится расчёт индикатора +----+
case 0: Series=Close[x];break;
case 1: Series= Open[x];break;
case 2: {Series=(High[x]+Low [x])/2;}break;
case 3: Series= High[x];break;
case 4: Series= Low[x];break;
case 5: {Series=(Open[x]+High [x]+Low[x]+Close[x])/4;}break;
case 6: {Series=(Open[x]+Close[x])/2;}break;
default: Series=Close[x];break;
//----+-----------------------------------------------------------+
}
//----+ Обращение к функции JJMASeries за номером 0, параметры nJMAPhase и nJMALength не меняются на каждом баре (nJMAdin=0)
reset=1;JJMA[x]=JJMASeries(0,0,Bars-1,limit,Phase,Length,Series,x,reset);if(reset!=0)return(-1);
}

//******************************************2222222*************************************************
int x2,counted_bars2=IndicatorCounted();
int limit2=Bars-counted_bars2-1;
//----+ Введение и инициализация внутренних переменных функции JJMASeries, nJMAnumber=2(Два обращения к функции JJMASeries)
if (limit2==Bars-1){int reset2=-1;int set2=JJMASeries(2,0,0,0,0,0,0,0,reset2);if((reset2!=0)||(set2!=0))return(-1);}
//----+
for(x2=limit2;x2>=0;x2--)
{
switch(IPC2)
{
//----+ Выбор цен, по которым производится расчёт индикатора +----------------------+
case 0: Series2=Close[x2];break;
case 1: Series2= Open[x2];break;
case 2: {Series2=(High[x2]+Low [x2])/2;}break;
case 3: Series2= High[x2];break;
case 4: Series2= Low[x2];break;
case 5: {Series2=(Open[x2]+High [x2]+Low[x2]+Close[x2])/4;}break;
case 6: {Series2=(Open[x2]+Close[x2])/2;}break;
default: Series2=Close[x2];break;
//----+-----------------------------------------------------------------------------+
}
//----+ Обращение к функции JJMASeries за номером 0, параметры nJMAPhase и nJMALength не меняются на каждом баре
reset2=1;Temp_Series2=JJMASeries(0,0,Bars-1,limit2,Phase1,Length1,Series2,x2,reset2);if(reset2!=0)return(-1);
//----+ Обращение к функции JJMASeries за номером 1, параметры nJMAPhase и nJMALength не меняются на каждом баре
//(В этом обращении параметр nJMAMaxBar уменьшен на 30 т. к. это повторное JMA сглаживание)
reset2=1;JJMA2[x2]=JJMASeries(1,0,Bars-1-30,limit2,Phase2,Length2,Temp_Series2,x2,reset2);if(reset2!=0)return(-1);
}
//************************************************

return(0);
}

--------------------------------------------------------------------------------------->>>

 

Вам можно памятник при жизни ставить! Не мучайтесь так, воспользуйтесь функцией iCustom(...)

 
Integer >>:

Вам можно памятник при жизни ставить! Не мучайтесь так, воспользуйтесь функцией iCustom(...)

ОХ! я бы с радостью но не пойму что с этой функцией делать??? Вот и забрел в такой лес! я же только учусь.

 
Integer >>:

Вам можно памятник при жизни ставить! Не мучайтесь так, воспользуйтесь функцией iCustom(...)

А можно раскрыть тему iCustom(...) подробнее!!! как его применить то к моему примеру! Непонятнооо???

 

есть продвижки! получилось! теперь две линий JJMA скальзят по тренду, пересекаються и все такое. но осталось проблема! вторая JJMA падает на 2 баре а в историй все нормаль рисует!



АЙ НИД ХЕЛПППППП!!!!

Файлы:
 
small писал(а) >>

есть продвижки! получилось! теперь две линий JJMA скальзят по тренду, пересекаються и все такое. но осталось проблема! вторая JJMA падает на 2 баре а в историй все нормаль рисует!

АЙ НИД ХЕЛПППППП!!!!

Установите на буфере значение с помощью SetIndexEmptyValue(XXX,0.0);

 
Cronex >>:

Установите на буфере значение с помощью SetIndexEmptyValue(XXX,0.0);

SetIndexEmptyValue - Устанавливает значение пустой величины для линии индикатора. Пустые значения не рисуются и не показываются в DataWindow. А мне на до что бы рисовалосььььь

 
small писал(а) >>

SetIndexEmptyValue - Устанавливает значение пустой величины для линии индикатора. Пустые значения не рисуются и не показываются в DataWindow. А мне на до что бы рисовалосььььь

У Вас и рисуется значение 0 :-) (это же не Empty), от сюда и нормаль.

 
Спасибо я разобрался! с падением линий! но лучше не стало! потому как она перестала рисоваться дальше! ОХ???

Причина обращения: