Скачать MetaTrader 5

Отклонение значений индикатора на графике от значений вычисляемых с помощью встроенных функций.

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Олег
19
Олег  
Сделал советник, который использует индикатор OsMA. Расчет значений индикатора производится с помощью функции iOsMA. После запуска эксперта на тестере открываю график. Так вот значения по каждому столбику графика OsMA не соответствуют рассчитанным значениям эксперта. Почему так происходит и как можно решить такую проблему?
o_o
Модератор
24082
o_o  

проблема в коде.

проверьте промежуточные расчеты и сверьте параметры индюков

Vladimir Gomonov
8305
Vladimir Gomonov  

Без кода эксперта, хотя бы части соответствующей описанной проблеме, вряд ли удасться осмысленно ответить на этот вопрос.

Урежте эксперта (уберите принимающую торговые решения часть) и выложите сюда. Тогда шансы разобраться будут реальными.

Олег
19
Олег  
Пример кода:
//--- input parameters
int i=0;
double OsMA_1;
double OsMA_2;
double EMA_1;
double EMA_2;
static int prevtime=0;

//+------------------------------------------------------------------+
//| expert start function |
//+------------------------------------------------------------------+
int start()
{

// Ждем, когда сформируется новая свеча
if(Time[0] == prevtime) return(0);
prevtime = Time[0];

OsMA_1=iOsMA(NULL,PERIOD_D1,12,26,9,PRICE_CLOSE,1);
OsMA_2=iOsMA(NULL,PERIOD_D1,12,26,9,PRICE_CLOSE,0);
EMA_1=iMA(NULL,PERIOD_D1,26,0,MODE_EMA,PRICE_CLOSE,1);
EMA_2=iMA(NULL,PERIOD_D1,26,0,MODE_EMA,PRICE_CLOSE,0);


if (OsMA_1<OsMA_2 && EMA_1<EMA_2)
{
ObjectCreate("marker"+i+" | "+OsMA_2, OBJ_ARROW, 0, prevtime, EMA_2);
ObjectSet("marker"+i+" | "+OsMA_2, OBJPROP_ARROWCODE, SYMBOL_ARROWUP);
}
if (OsMA_1>OsMA_2 && EMA_1>EMA_2)
{
ObjectCreate("marker"+i+" | "+OsMA_2, OBJ_ARROW, 0, prevtime, EMA_2);
ObjectSet("marker"+i+" | "+OsMA_2, OBJPROP_ARROWCODE, SYMBOL_ARROWDOWN);
}

i++;

return(0);
}
Так покрасивей будет? Всего лишь кнопка SRC - вставка кода.
Victor Nikolaev
Модератор
15104
Victor Nikolaev  

Индикатор отображает свои значения по сформированным барам, а данный код при открытии бара.

Алексей Тарабанов
7324
Алексей Тарабанов  
timoshechkin:
Сделал советник, который использует индикатор OsMA. Расчет значений индикатора производится с помощью функции iOsMA. После запуска эксперта на тестере открываю график. Так вот значения по каждому столбику графика OsMA не соответствуют рассчитанным значениям эксперта. Почему так происходит и как можно решить такую проблему?

А можно увидеть эти значения?

У Вас программа не очень корректно сформирована,- возможно, причина - просто небрежность.

Vladimir Gomonov
8305
Vladimir Gomonov  
Вот этот кусок кода выглядит подозрительно (в любом случае. не знаю насколько это связано с объявленной проблемой):
timoshechkin:
// Ждем, когда сформируется новая свеча
if(Time[0] == prevtime) return(0);
prevtime = Time[0];

OsMA_1=iOsMA(NULL,PERIOD_D1,12,26,9,PRICE_CLOSE,1);
OsMA_2=iOsMA(NULL,PERIOD_D1,12,26,9,PRICE_CLOSE,0);
EMA_1=iMA(NULL,PERIOD_D1,26,0,MODE_EMA,PRICE_CLOSE,1);
EMA_2=iMA(NULL,PERIOD_D1,26,0,MODE_EMA,PRICE_CLOSE,0);
Здесь запрограммирован съём значений индикаторов в момент открытия нового бара. В этот момент на нулевом баре значение PRICE_CLOSE == PRICE_OPEN (не верите - читайте документацию), а на предыдущем баре она равна цене закрытия, как и положено и как наверное и ожидается. Разница между ними близка к нулю (идин-два пипса, ежели не геп, конечно) Это так задумано, или это баг? Склоняюсь к последнему, иначе PRICE_OPEN была бы (надеюсь) прописана явно.
Олег
19
Олег  
MetaDriver:
Вот этот кусок кода выглядит подозрительно (в любом случае. не знаю насколько это связано с объявленной проблемой):
Здесь запрограммирован съём значений индикаторов в момент открытия нового бара. В этот момент на нулевом баре значение PRICE_CLOSE == PRICE_OPEN (не верите - читайте документацию), а на предыдущем баре она равна цене закрытия, как и положено и как наверное и ожидается. Разница между ними близка к нулю (идин-два пипса, ежели не геп, конечно) Это так задумано, или это баг? Склоняюсь к последнему, иначе PRICE_OPEN была бы (надеюсь) прописана явно.

Да, ты прав. По сформированным барам значения индикатора равны. Спасибо. Попробую исправить.
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий