Блог им. SerSer

QUIK, LUA, Робастность и прочее...

Зачитался, я тут на днях про робастную регрессию, и очень мне захотелось «пощупать» этого зверя хоть в каком нибудь виде на графике в Квике.

Выбрал наипростейшую — "Оценочная функция Тейла – Сена"
Эта оценочная функция может быть эффективно вычислена и она нечувствительна к выбросам. Она может быть существенно более точна, чем неробастный метод наименьших квадратов для несимметричных и гетероскедастичных данных и хорошо конкурирует с неробастным методом наименьших квадратов даже для нормально распределенных данных в терминах статистической мощности.
Метод признан «наиболее популярной непараметрической техникой оценки линейного тренда»
QUIK, LUA, Робастность и прочее...

Сказано — сделано.  

Сваял регрессию по функция Тейла – Сена на QLUA.
QUIK, LUA, Робастность и прочее...

Заодно медианные и квартильные отклонения...

УВЫ!

Скорость работы оставляла желать лучшего — на периоде больше 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 и добавить индикатор.


★32
28 комментариев
а dll на чем было?
avatar
Андрей К, free pascal
avatar
Маркин Павел, рекомендую сделать как у нас doc.stocksharp.ru/html/1fdfb45f-9d48-4560-bfc4-8d9b5b20a1cf.htm

В кратце, через LUA поднимается FIX сервер, и роботы работают с ним. Расчеты все в отдельной программе, тем самым не нагружая Квик (даже если вы это вынесли в отдельную ДЛЛ, то все равно нагрузка на единичный процесс). Сильные нагрузки влияют на соединение, и оно просто разорвется с сервером в нужный. Резюмируя, это рискованно, если постоянно не следить.
avatar
Mikhail Sukhov, ради 10-12 сделок в неделю подключаться к FIX серверу? а смысл?
avatar
Маркин Павел, потому что иначе при высокой нагрузке придется следить всю неделю из-за этих 10-12 сделок за Квиком (вот если бы у вас было 10-12 в час, тогда сутиация была бы значительно лучше). Робот, для которого нужен человек, бессмысленнен.
avatar
Mikhail Sukhov,
Резюмируя, это рискованно, если постоянно не следить.

 в принципе, можно написать службу, которая следит за этим, не обязательно глазами следить ведь?
avatar
sortarray sortarray, вполне. Но я предложил путь именно бескостыльный, а именно как правильнее всего поступить с т.з. подхода к разработке.
avatar
Маркин Павел, это как то странно оптимизировать на паскале. Ладно бы еще на си. Лень вникать, вот нашел тесты, первые попавшиеся

hildstrom.com/projects/langcomp/index.html

не особо впечатляет разница.
Это все достаточно субъективно, на самом деле, зависит все не только от языка, но и от степени знания языка, в каждом языке свои тонкости, Вы какой то одной строкой могли посадить производительность на 99%.

Например, в JS Вы могли бы значительно посадить перформанс используя forEach вместо find на больших массивах,  потому что forEach всегда обрабатывает весь массив, даже если в каких то случаях уже после 3-его элемента смысла в этом нет

Так что обобщать не стоило бы.
А вообще, языки типа луа предназначены не для байтодрочерства, а для проектирования, в основном, они не могут быть оптимально быстрыми by design
avatar
sortarray sortarray, 
 это как то странно оптимизировать на паскале. Ладно бы еще на си. Лень вникать, вот нашел тесты, первые попавшиеся

не поленился, установил C++, взял тесты с ваших тестов, сократил количество итераций со 100 до 10 (по 20 минут на каждый тест неохота вешать машины) и добавил в каждом тесте счетчик тиков
Результат на лицо)))


Очень результаты не в пользу си
Исходники




avatar
kirilles, ???
avatar
У Вас есть система, в которой замена простой оценки угла наклона на робастную дает ощутимый выигрыш?
avatar
SergeyJu, есть, но не по углу наклона.
avatar
Маркин Павел, занятно. То есть, Вы считаете, что на рынке много аномальных значений цен?
avatar
kirilles, точно в ту папку? а QUIK версия?



avatar
Маркин Павел, добрый день, подскажите, где можно скачать столько Луа индикаторов, спасибо.
Закс Гольдман, где скачать не знаю — я сам для себя пишу.
Переходи на МТ5 )
avatar
Чёрный кот, не могу, вера не позволяет
avatar
Маркин Павел, так, практическое применение состоит в том, чтобы визуально оценить направление тренда?
Маркин Павел, Добрый день.

А можно ппросить у Вас код на Lua (исходный без dll). Интересует алгоритм реализации.
Если это возможно, конечно.
avatar
kirilles, а на графике какие ещё индикаторы? инструменты?
у меня вообще никак не падает как не пытался.
а винда?
avatar
 Мне понравился индикатор, еще бы можно было менять переменные. =)

теги блога Маркин Павел

....все тэги



UPDONW
Новый дизайн