Машинное обучение в трейдинге: теория, модели, практика и алготорговля - страница 214

 
Vladimir Perervenko:


ПС. И распараллеливайте вычисления lm(). Это как раз тот случай когда нужно 

Спасибо.

Я видел как параллелится оперция в цикле через foreach %dopar%. А как это прицепить к скрытому циклу в DT не знаю. И не знаю, получится ли быстрее.

 
Alexey Burnakov:

Спасибо.

Я видел как параллелится оперция в цикле через foreach %dopar%. А как это прицепить к скрытому циклу в DT не знаю. И не знаю, получится ли быстрее.

 

Я имел в виду эту часть кода

lm_models <-    x[,
{
        lapply(c(1:20), function(x) summary(lm(data = .SD[, c(1:x, 21), with = F],    formula = V21 ~ . -1))$'fstatistic'[[1]])
}
, by = sampling
]

 Вместо lapply - foreach()

 

С графиками которые строятся несколько десятков секунд что то не так.

Посмотрите этот пакет ("nhstplot"). Рисует быстро и по моему неплохо.

> plotftest(f = 4, dfnum = 3, dfdenom = 5, title = "Fisher's F test")

 

 
Vladimir Perervenko:

С графиками которые строятся несколько десятков секунд что то не так.

Посмотрите этот пакет ("nhstplot"). Рисует быстро и по моему неплохо.

> plotftest(f = 4, dfnum = 3, dfdenom = 5, title = "Fisher's F test")

 

Я конечно посмотрю. Но, где полупрозрачность здесь, где сотни наложенных объектов? Протестируйте в тяжелых условиях и тогда поймем, быстрее или нет он.
 
Vladimir Perervenko:

Ааа. Я попробую, спасибо. Получается, цикл по lapply будет заменен параллельным циклом. А это все крутится в цикле DT, где 1000 итераций.

А есть еще способ эти 1000 итераций пропустить через foreach.

 
Alexey Burnakov:
Я конечно посмотрю. Но, где полупрозрачность здесь, где сотни наложенных объектов? Протестируйте в тяжелых условиях и тогда поймем, быстрее или нет он.

Быстрое рисование полупрозрачностей можно добиться видеокартой с OpenGL. В R есть библиотека rgl для этого, она больше под 3d заточена, но если получится сделать ортогональную проекцию, и рисование линий, то будет как раз то что надо. У меня так сходу не вышло разобраться, нужно читать документацию.

 

Дописал: 

Нарисовать полупрозрачные линии оказалось довольно просто, нужна только таблица с координатами X и Y. Можно ещё и третью колонку Z добавить для трёхмерности.

library(rgl)
for(i in 1:1000){
    lines3d(cbind(1:1000, cumsum(rnorm(1000))), col="blue", alpha=0.1)
}

Но это оказалось всё равно медленно. Судя про processexplorer - видюха используется всего на 5%, а один логический процессор на всех 100%. Мне кажется R слишком медленно подаёт данные в OpenGL, гораздо медленнее чем оно может принимать. Как-то так себе вышло.

 

 

Чисто ради позалипать :) выполните это, разверните окно на весь экран, и покрутите "фигуру" левой кнопкой мышки.

library(rgl)
for(i in 1:100){
    lines3d(cbind(cumsum(rnorm(100)), cumsum(rnorm(100)), cumsum(rnorm(100))), alpha=0.2)
}
 
Можно так. Линий вывести штук сто выборочно. А распределения по полной программе. Намного быстрее будет
 

наконец то сделал первую пробу пера идеи с кластерами которую озвучивал ранее, проба тестовая, просто чтобы посмотреть что да как, предикторы простые

скользящие ряды по 5 значений OHLC + volume + volatil  итого  6 предикторов по 5 значений в каждом

обучающей истории 100 000 баров 

каждый предиктор нормировался естесно ) и потом кластеризировался на 100 кластеров извините за туфтологию 

 

целевую создал на скорую руку можно сказать от балды(пока только сел), просто взял разворот в таком виде :  целевая это экстремум  который выше 4-ех предыдущих свечей и выше 10-ти следующих свечей после него.

 

начал искать повторяющиеся паттерны...

лучшее что удалось найти с такими никакими предикторами это такой паттерн

 

open high low close volum volat target_avg target_count
91      30  41    91    100   0.4        9

 в (open high low close volum volat) находятся номера кластеров которые характеризуют данный паттерн

 target_avg - это с какой вероятностью мой разворот срабатывал в этом паттерне, найти паттерны на этих предикторах с вероятностью срабатывания 80-90% мне не удалось

 target_count - это сколько раз этот паттерн попадался на данной истории, найти какие то значимые паттерны которые бы попадались 30-50 раз мне тоже не удалось на этих предикторах

 

Итого лучшее что я нашел на этих предикторах это паттерн в котором разворот(целевая) срабатывает в 40% случаев и наблюдений таких(кол. паттернов)  всего 9 штук

Вот это и есть тот возможно единственный кусочек полезной информации, тот самый заветный "НЕ ШУМ"  который можно выжать из этого набора предикторов и объясняет он всего лишь одну причину разворота, да и то  на 40%, а причины у разных разворотов разные и их точно не 10 и не 30 имхо..

 А теперь подумайте как алгоритм МО может объяснить все движения на рынке с такими предикторами??? это же невозможно,ведь предикторы могут объяснить всего 2% а все остальное шум...

плюс нет контроля статистической повторяемости те МО может принимать решение по всего одному наблюдению или двум, и так и есть  по сути причем в подавляющем большинстве случаев под 95% случаев

 

ну да ладно я отвлекся... продолжим по паттерну , оценив качество входов на новой выборке скажу так, это далеко не мерседесс но если randomforest это убитый запорожец то этот подход девятка только с завода 

Качество входов намного лучше, четче, ошибок меньше...

 

еще казус был такой, полный паттерн это  

open high low close volum volat
91   6    30  41    91    100

 когда запустил разпознавание на новых данных в 50 000 свечей, то алгорим не нашел ни одного такого паттерна, те он просто не появился ))

 пришлось урезать паттерн, оставил только цены

open high low close volum volat
91   6    30  41    91    100

 тогда уже нашлось около 20-ти таких паттернов

 

вот входы по паттерну, ничего не выбирал "аля лучшые входы "  просто зафотал как есть в той последовательности в которой шли сделки, сделки не все конечно просто несколько первых, для того чтобы можно было оценить 

й 

 еквити приятное, хоть и риск стоит больше чем предполагалось

 к

напомню, это всего один паттерн, и только шорт 

если кому то нужен код , то выложу, хотя сомневаюсь, все и так предельно понятно
 

214 страниц - это оч много для изучения/освоения. При этом каждый о своем и не всегда понятном.)

А можно как то в одном посте, пусть даже не оч коротком, резюмировать эти все страницы? Типа: поставленная цель, методы решения, результаты, выводы.

Сразу скажу, что моя модель рынка - это случайный процесс (броуновское движение), точнее сумма нескольких (м.б. многих) таких движений охваченных обратной связью. И что либо прогнозировать или искать какие либо закономерности кроме статистических - абсолютно бесплодное занятие. Т.е., какие либо значимые предикторы просто не существуют, по крайней мере для спекулятивных целей.

 
код выкладывайте,конечно. интересно же
Причина обращения: