Маркин Павел
Маркин Павел личный блог
02 февраля 2017, 14:31

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


28 Комментариев
  • Андрей К
    02 февраля 2017, 14:54
    а dll на чем было?
      • Mikhail Sukhov
        02 февраля 2017, 15:59
        Маркин Павел, рекомендую сделать как у нас doc.stocksharp.ru/html/1fdfb45f-9d48-4560-bfc4-8d9b5b20a1cf.htm

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

           в принципе, можно написать службу, которая следит за этим, не обязательно глазами следить ведь?
          • Mikhail Sukhov
            02 февраля 2017, 16:58
            sortarray sortarray, вполне. Но я предложил путь именно бескостыльный, а именно как правильнее всего поступить с т.з. подхода к разработке.
      • sortarray sortarray
        02 февраля 2017, 16:42
        Маркин Павел, это как то странно оптимизировать на паскале. Ладно бы еще на си. Лень вникать, вот нашел тесты, первые попавшиеся

        hildstrom.com/projects/langcomp/index.html

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

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

        Так что обобщать не стоило бы.
        А вообще, языки типа луа предназначены не для байтодрочерства, а для проектирования, в основном, они не могут быть оптимально быстрыми by design
  • SergeyJu
    02 февраля 2017, 15:10
    У Вас есть система, в которой замена простой оценки угла наклона на робастную дает ощутимый выигрыш?
      • SergeyJu
        02 февраля 2017, 15:23
        Маркин Павел, занятно. То есть, Вы считаете, что на рынке много аномальных значений цен?
  • Чёрный кот
    02 февраля 2017, 15:37
    Переходи на МТ5 )
      • Евгений Гуревич
        03 февраля 2017, 09:40
        Маркин Павел, так, практическое применение состоит в том, чтобы визуально оценить направление тренда?
      • nicknh
        05 февраля 2017, 13:16
        Маркин Павел, Добрый день.

        А можно ппросить у Вас код на Lua (исходный без dll). Интересует алгоритм реализации.
        Если это возможно, конечно.
  • Закс Гольдман
    10 мая 2017, 17:17
     Мне понравился индикатор, еще бы можно было менять переменные. =)

Активные форумы
Что сейчас обсуждают

Старый дизайн
Старый
дизайн