Сделал советник, который использует индикатор OsMA. Расчет значений индикатора производится с помощью функции iOsMA. После запуска эксперта на тестере открываю график. Так вот значения по каждому столбику графика OsMA не соответствуют рассчитанным значениям эксперта. Почему так происходит и как можно решить такую проблему?
- Triple Exponential Moving Average - Трендовые индикаторы - Использование технических индикаторов - Графики котировок, технический и фундаментальный анализ
- Визуализация тестирования: график, объекты, индикаторы
- ChartSetSymbolPeriod
проблема в коде.
проверьте промежуточные расчеты и сверьте параметры индюков
Без кода эксперта, хотя бы части соответствующей описанной проблеме, вряд ли удасться осмысленно ответить на этот вопрос.
Урежте эксперта (уберите принимающую торговые решения часть) и выложите сюда. Тогда шансы разобраться будут реальными.
Пример кода:
//--- 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 не соответствуют рассчитанным значениям эксперта. Почему так происходит и как можно решить такую проблему?
Сделал советник, который использует индикатор OsMA. Расчет значений индикатора производится с помощью функции iOsMA. После запуска эксперта на тестере открываю график. Так вот значения по каждому столбику графика OsMA не соответствуют рассчитанным значениям эксперта. Почему так происходит и как можно решить такую проблему?
А можно увидеть эти значения?
У Вас программа не очень корректно сформирована,- возможно, причина - просто небрежность.
Вот этот кусок кода выглядит подозрительно (в любом случае. не знаю насколько это связано с объявленной проблемой):
timoshechkin:
Здесь запрограммирован съём значений индикаторов в момент открытия нового бара. В этот момент на нулевом баре значение PRICE_CLOSE == PRICE_OPEN (не верите - читайте документацию), а на предыдущем баре она равна цене закрытия, как и положено и как наверное и ожидается. Разница между ними близка к нулю (идин-два пипса, ежели не геп, конечно) Это так задумано, или это баг? Склоняюсь к последнему, иначе PRICE_OPEN была бы (надеюсь) прописана явно.
// Ждем, когда сформируется новая свеча 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);
MetaDriver:
Вот этот кусок кода выглядит подозрительно (в любом случае. не знаю насколько это связано с объявленной проблемой):
Здесь запрограммирован съём значений индикаторов в момент открытия нового бара. В этот момент на нулевом баре значение PRICE_CLOSE == PRICE_OPEN (не верите - читайте документацию), а на предыдущем баре она равна цене закрытия, как и положено и как наверное и ожидается. Разница между ними близка к нулю (идин-два пипса, ежели не геп, конечно) Это так задумано, или это баг? Склоняюсь к последнему, иначе PRICE_OPEN была бы (надеюсь) прописана явно.
Вот этот кусок кода выглядит подозрительно (в любом случае. не знаю насколько это связано с объявленной проблемой):
Здесь запрограммирован съём значений индикаторов в момент открытия нового бара. В этот момент на нулевом баре значение PRICE_CLOSE == PRICE_OPEN (не верите - читайте документацию), а на предыдущем баре она равна цене закрытия, как и положено и как наверное и ожидается. Разница между ними близка к нулю (идин-два пипса, ежели не геп, конечно) Это так задумано, или это баг? Склоняюсь к последнему, иначе PRICE_OPEN была бы (надеюсь) прописана явно.
Да, ты прав. По сформированным барам значения индикатора равны. Спасибо. Попробую исправить.
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь