Зачитался, я тут на днях про
робастную регрессию, и очень мне захотелось «пощупать» этого зверя хоть в каком нибудь виде на графике в Квике.
Выбрал наипростейшую — "
Оценочная функция Тейла – Сена"
Эта оценочная функция может быть эффективно вычислена и она нечувствительна к выбросам. Она может быть существенно более точна, чем неробастный метод наименьших квадратов для несимметричных и гетероскедастичных данных и хорошо конкурирует с неробастным методом наименьших квадратов даже для нормально распределенных данных в терминах статистической мощности.
Метод признан «наиболее популярной непараметрической техникой оценки линейного тренда»
Сказано — сделано.
Сваял регрессию по функция Тейла – Сена на
QLUA.
Заодно медианные и квартильные отклонения...
УВЫ!
Скорость работы оставляла желать лучшего — на периоде больше
200 Квик начинал тормозить, а если подцепить на десяток разных инструментов просто умирал.
Проблема не нова — расчет медианного значения это сортировка, а с большими, множественными и постоянными сортировками LUA-интерпретатор не справляется.
УРА!
"
Пионеры любят преодолевать трудности"
Вспомнил детство золотое, прочитал
LUA API, потыкался пару деньков, и в итоге засунул все расчёты в
dll, а в lua файле из важного осталось лишь:
function Init()
package.path = ""
package.cpath = getScriptPath().. "\\".."Robust.dll"
require "Robust"
Robust.InitGraf()
return 5
end
function OnCalculate(index)
return Robust.CALC(index,Settings.period)
end
В общем спрятал всю математику, обращение к свечкам графика, и прочие мелочи.
ИТОГИ и ВЫВОДЫ.
Скорость и производительность выросла приблизительно в 5-6 раз!!! (
без распараллеливания расчётов)
Милая LUA — не прощай, конечно, но постой в сторонке.
Плюшки для писателей мелких приложений на LUA — алгоритмы и логика скрыты, скорость, удобство включения ограничений на использование.
ИНДИКАТОР
Robust_Regression.zip
Распаковать в папку LuaIndicators и добавить индикатор.