Уважаемые поделитесь кодом канала линейной регрессии, тем что в мт4 встроен. Я как понял у него размах по High/Low.
- Канал линейной регрессии из MQL4
- Картинка для форума на metaquotes
- Проведение прямой через множество точек по методу наименьших квадратов
Mihail Gorjunov:
Уважаемые поделитесь кодом канала линейной регрессии, тем что в мт4 встроен. Я как понял у него размах по High/Low.
Уважаемые поделитесь кодом канала линейной регрессии, тем что в мт4 встроен. Я как понял у него размах по High/Low.
Только он не будет совпадать по границам со встроенным инструментом. Во встроенном инструменте либо ошибка, либо неизвестный алгоритм построения границ.
//+-------------------------------------------------------------------------------------+ //| Отображение графического объекта - трендовой линии | //+-------------------------------------------------------------------------------------+ void ShowTrendLine(string name, datetime time1, double price1, datetime time2, double price2, color clr, ENUM_LINE_STYLE style, bool ray) { if (Point == 0) return; //string name = PREFIX + SIGN_LINE + time1 + DoubleToStr(price1 / Point, 0); if (ObjectFind(name) < 0) // Если объект не существует { ObjectCreate(name, OBJ_TREND, // Создадим его 0, time1, price1, time2, price2); ObjectSet(name, OBJPROP_COLOR, clr); ObjectSet(name, OBJPROP_RAY, ray); ObjectSet(name, OBJPROP_STYLE, style); return; } ObjectMove(name, 0, time1, price1); // Перемещение существующего объекта ObjectMove(name, 1, time2, price2); // Перемещение существующего объекта ObjectSet(name, OBJPROP_RAY, ray); } //+-------------------------------------------------------------------------------------+ //| Расчет значения отклонения границ канала линейной регрессии | //+-------------------------------------------------------------------------------------+ double GetLinearRegressionValues(int rightBar, int leftBar, double &leftValue, double &kKoef, double &bKoef) { // - 1 - == Инициализация переменных ==================================================== int n = leftBar - rightBar + 1; // Количество баров для расчета if (n <= 0) // Если количество баров не является.. return(0); // ..натуральным числом, то это ошибка double sumy = 0, // Сумма значений функции sumx = 0.0, // Сумма аргументов функции sumxy = 0.0, // Сумма произведения аргументов и.. // ..значений sumx2 = 0.0; // Сумма квадратов аргументов функции // - 1 - == Окончание блока ============================================================= // - 2 - == Нахождение необходимых сумм ================================================= for (int i = rightBar; i <= leftBar; i++) // Справа налево по графику { sumy += Close[i]; sumxy += Close[i]*i; sumx += i; sumx2 += i*i; } // - 2 - == Окончание блока ============================================================= // - 3 - == Вычисление коэффициентов К и В ============================================== double denominator = sumx2*n - sumx*sumx; // Знаменатель для нахождения коэф. К if (denominator == 0.0) return(0); kKoef = (sumxy * n - sumx * sumy) / denominator;// Нахождение значения коэффициента K bKoef = (1.0 / n) * (sumy - kKoef * sumx); // Коэффициент B // - 3 - == Окончание блока ============================================================= // - 4 - == Расчет значений линии на крайних барах ====================================== leftValue = kKoef*leftBar + bKoef; // Значение линии на левом баре return(kKoef*rightBar + bKoef); // Значение линии на правом баре // - 4 - == Окончание блока ============================================================= } //+-------------------------------------------------------------------------------------+ //| Определение максимального отклонения от прямой регрессии на указанном участке | //+-------------------------------------------------------------------------------------+ double GetMaxLRDeviation(int leftBarIndex, int rightBarIndex, double kKoef, double bKoef) { double max = 0.0; for (int i = leftBarIndex; i >= rightBarIndex; i--) { double lineValue = kKoef * i + bKoef; double deviation = MathAbs(Close[i] - lineValue); max = MathMax(max, deviation); } return max; } //+-------------------------------------------------------------------------------------+ //| Отображение графического объекта - канала линейной регрессии | //+-------------------------------------------------------------------------------------+ void ShowRegressionChannel(int leftBarIndex, int rightBarIndex, color clr, int raySign) { // Определение цен крайних точек прямой регрессии double leftLRPrice, kKoef, bKoef; double rightLRPrice = GetLinearRegressionValues(rightBarIndex, leftBarIndex, leftLRPrice, kKoef, bKoef); if (rightLRPrice <= 0) return; // Определение максимального отклонения от прямой регрессии double maxDev = GetMaxLRDeviation(leftBarIndex, rightBarIndex, kKoef, bKoef); // Центральная линия канала datetime time1 = Time[leftBarIndex]; datetime time2 = Time[rightBarIndex]; ShowTrendLine(PREFIX + SIGN_CHANNEL_AV + time1, time1, leftLRPrice, time2, rightLRPrice, clr, STYLE_SOLID, raySign); // Верхняя линии канала double bKoefUp = bKoef + maxDev; ShowTrendLine(PREFIX + SIGN_CHANNEL_UP + time1, time1, kKoef * leftBarIndex + bKoefUp, time2, kKoef * rightBarIndex + bKoefUp, clr, STYLE_SOLID, raySign); // Нижняя линия канала double bKoefDn = bKoef - maxDev; ShowTrendLine(PREFIX + SIGN_CHANNEL_DN + time1, time1, kKoef * leftBarIndex + bKoefDn, time2, kKoef * rightBarIndex + bKoefDn, clr, STYLE_SOLID, raySign); }
Канал Линейной Регрессии - Каналы - Линейные инструменты - Технический Анализ
- www.metatrader5.com
Канал Линейной Регрессии - Каналы - Линейные инструменты - Технический Анализ
спасибо будем разбирается.
В код базе есть, который совпадает с каналом, но надо искать.
По точкам сам не понял, как он строит канал - т.е. с какой точки начинает - кажется с клозета...
Приложил - не знаю как искать в базе.
Файлы:
0LinRegrBuf.mq4
4 kb
Yuriy Asaulenko:
Полосы Боллинджера оказались одним из худших конвертов.... впрочем, может я их не умею готовить...
Самый простой индикатор лин. регрессии - линии (полосы) Боллинджера. Лучше вместо МАшки использовать в нем что-то поинтересней. Скажем, можно WMA - просто проще, чем писать самому фильтр. Ну, и изменить настройки периода полос и их сглаживания.
Эффективность такой регрессии выше, чем ах+b.
-Aleks-:
Полосы Боллинджера оказались одним из худших конвертов.... впрочем, может я их не умею готовить...
Наверное не умеете. ) В принципе, полосы Боллинджеры приближение той-же полиномиальной (линейной) регрессии. Я не рассматриваю стандартные стратегии на их основе, но если нужна регрессия, то их (п.Бол-ра) модификация дает неплохое приближение.
Полосы Боллинджера оказались одним из худших конвертов.... впрочем, может я их не умею готовить...
Yuriy Asaulenko:
Наверное не умеете. ) В принципе, полосы Боллинджеры приближение той-же полиномиальной (линейной) регрессии. Я не рассматриваю стандартные стратегии на их основе, но если нужна регрессия, то их (п.Бол-ра) модификация дает неплохое приближение.
хорошая мысль. надо попробовать болинджера. интересно что получится. писал я тут в сапорт код не дают заразы.
Наверное не умеете. ) В принципе, полосы Боллинджеры приближение той-же полиномиальной (линейной) регрессии. Я не рассматриваю стандартные стратегии на их основе, но если нужна регрессия, то их (п.Бол-ра) модификация дает неплохое приближение.
Mihail Gorjunov:
хорошая мысль. надо попробовать болинджера. интересно что получится. писал я тут в сапорт код не дают заразы.
Я же дал индикатор, он совпадает с каналом терминала.
хорошая мысль. надо попробовать болинджера. интересно что получится. писал я тут в сапорт код не дают заразы.
Mihail Gorjunov:
надо попробовать болинджера. интересно что получится. писал я тут в сапорт код не дают заразы.
Зачем его давать, если он давно уже в свободном доступе?
надо попробовать болинджера. интересно что получится. писал я тут в сапорт код не дают заразы.
Юрий, а можете сделать индикатор лент боллинджера с изменениями, которые вы выше предложили ?
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь