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

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

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

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

 

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

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

 
Пример кода:
//--- 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 - вставка кода.
 

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

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

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

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

 
Вот этот кусок кода выглядит подозрительно (в любом случае. не знаю насколько это связано с объявленной проблемой):
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 была бы (надеюсь) прописана явно.
 
MetaDriver:
Вот этот кусок кода выглядит подозрительно (в любом случае. не знаю насколько это связано с объявленной проблемой):
Здесь запрограммирован съём значений индикаторов в момент открытия нового бара. В этот момент на нулевом баре значение PRICE_CLOSE == PRICE_OPEN (не верите - читайте документацию), а на предыдущем баре она равна цене закрытия, как и положено и как наверное и ожидается. Разница между ними близка к нулю (идин-два пипса, ежели не геп, конечно) Это так задумано, или это баг? Склоняюсь к последнему, иначе PRICE_OPEN была бы (надеюсь) прописана явно.

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