Скачать MetaTrader 5
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Не нашел нужную программу? Закажи ее!
3lout
31
3lout 2011.06.16 15:34 

Есть индикатор который рисует линию относительно средней (т.е. относительно 0). При выводе этого значения принтом в индикаторе получается одно число, а в советнике через iCustom совсем другое и разница достигает 8. Помогите победить заразу. Вот код индикатора:

#property indicator_separate_window
#property indicator_buffers 1
#property indicator_color1 Yellow
//---- input parameters
extern int MA_Period=13;
extern int ROC_Period=21;
extern double M_A=0;
//---- buffers
double b[];
//| Custom indicator initialization function |
int init()
{
//---- indicators
SetIndexStyle(0,DRAW_LINE);
SetIndexBuffer(0,b);
IndicatorShortName("M_A1("+MA_Period+", "+ROC_Period+")");
//----
return(0);
}
//| Custom indicator deinitialization function |
int deinit()
{
return(0);
}
//| Custom indicator iteration function |
int start()
{
int i=Bars-(ROC_Period+MA_Period)-1;
double t,curr,prev;
while(i>=0)
{
curr=iMA(NULL,0,MA_Period,0,MODE_EMA,PRICE_CLOSE,i);
prev=iMA(NULL,0,MA_Period,0,MODE_EMA,PRICE_CLOSE,i+ROC_Period);
if(prev!=0)
{
t=(curr-prev)/prev;
}
b[i]=t;
M_A=b[0];
Print ("M_A = "+M_A);
i--;
}
return(0);
}

Вот это в советнике:

double cenaUp2=iCustom(NULL, 0, "M_A",3, 0, 0);
Print("cenaUp 2= ",cenaUp2);
Анатолий
645
Анатолий 2011.06.16 16:00  
extern ? double M_A=0; 
double cenaUp2=iCustom(NULL, 0, "M_A",3, 0, 0); ?

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

3lout
31
3lout 2011.06.16 20:37  
storm:

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


Прошу прощения, но я не понял этого:

extern ? double M_A=0; 

Смею предположить вопрос (?) относительно - double. Почему не int? Пробовал int - разницы нет.

Насчет этого если можно поподробнее:

double cenaUp2=iCustom(NULL, 0, "M_A",3, 0, 0); ?

3 - потому что в индикаторе переменная M_A объявлена третьей.

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

Alexander
2441
Alexander 2011.06.17 06:19  
3lout:

Есть индикатор который рисует линию относительно средней (т.е. относительно 0). При выводе этого значения принтом в индикаторе получается одно число, а в советнике через iCustom совсем другое и разница достигает 8. Помогите победить заразу. Вот код индикатора:


Еще бы, у вас по умолчанию в индикаторе знчения 13, 21, 0 а в советнике задаете 3,0,0. И по хорошему уберите переменную M_A из настраиваемых, она все равно пересчитывается.
Victor Nikolaev
Модератор
14060
Victor Nikolaev 2011.06.17 06:23  
Roger:

Еще бы, у вас по умолчанию в индикаторе знчения 13, 21, 0 а в советнике задаете 3,0,0. И по хорошему уберите переменную M_A из настраиваемых, она все равно пересчитывается.

А может индикатор в начале надо сделать корректным
Alexander
2441
Alexander 2011.06.17 06:26  
Vinin:

А может индикатор в начале надо сделать корректным


Это может потянуть на то, что нам придется исправлять и настраивать его индикатор, а как-то не тянет :)

Вопрос был, почему не совпадает.

Victor Nikolaev
Модератор
14060
Victor Nikolaev 2011.06.17 06:31  
Roger:


Это может потянуть на то, что нам придется исправлять и настраивать его индикатор, а как-то не тянет :)

Вопрос был, почему не совпадает.


Просто здесь две проблемы. Одна в индикаторе, другая в советнике.

Хотя есть еще одна - но о ней пока не буду.

Невозможно из кривого индикатора получить корректные данные в кривом советнике.

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