Блог им. 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 и добавить индикатор.


★30
а dll на чем было?
avatar

Андрей К

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

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

Mikhail Sukhov

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

Mikhail Sukhov

Mikhail Sukhov,
Резюмируя, это рискованно, если постоянно не следить.

 в принципе, можно написать службу, которая следит за этим, не обязательно глазами следить ведь?
avatar

sortarray sortarray

sortarray sortarray, вполне. Но я предложил путь именно бескостыльный, а именно как правильнее всего поступить с т.з. подхода к разработке.
avatar

Mikhail Sukhov

Маркин Павел, это как то странно оптимизировать на паскале. Ладно бы еще на си. Лень вникать, вот нашел тесты, первые попавшиеся

hildstrom.com/projects/langcomp/index.html

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

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

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

sortarray sortarray

sortarray sortarray, 
 это как то странно оптимизировать на паскале. Ладно бы еще на си. Лень вникать, вот нашел тесты, первые попавшиеся

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


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




Маркин Павел, вот это подарк!!++++
avatar

Legendario

kirilles, ???
Маркин Павел, круто, спасибо что выложили и поделились!
только квик вырубился, когда нажал добавить на график, до этого распаковав оба файля в папку луа?
avatar

Legendario

kirilles, точно в ту папку? а QUIK версия?



Маркин Павел, в неё родимую, квик предпоследний, сейчас обновлю, заодно опци недельные гляну, может просто глюканул?
там ваши индикатогры(в папке ) уже присутствуют кстати, спасибо))
avatar

Legendario

Маркин Павел, 
снова слетел
avatar

Legendario

kirilles, а на графике какие ещё индикаторы? инструменты?
у меня вообще никак не падает как не пытался.
а винда?
Маркин Павел, позже на голый попытаюсь, отпишу, стояли стандартные индюки квиковские, кол-во в последней сделке и объем кажется стояли, квик до последней обновлен, винда семь ультимейт
avatar

Legendario

Маркин Павел, добрый день, подскажите, где можно скачать столько Луа индикаторов, спасибо.
Закс Гольдман, где скачать не знаю — я сам для себя пишу.
У Вас есть система, в которой замена простой оценки угла наклона на робастную дает ощутимый выигрыш?
avatar

SergeyJu

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

SergeyJu

Переходи на МТ5 )
avatar

Чёрный кот

Чёрный кот, не могу, вера не позволяет
Маркин Павел, так, практическое применение состоит в том, чтобы визуально оценить направление тренда?
Маркин Павел, Добрый день.

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

nicknh

 Мне понравился индикатор, еще бы можно было менять переменные. =)

Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.

Залогиниться

Зарегистрироваться
....все тэги
Регистрация
UPDONW