Машинное обучение в трейдинге: теория, модели, практика и алготорговля - страница 14
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
ОК, можно подумать. Представьте, например, что на каждой итерации нейросеть делаеть не стандартное обратное распространение ошибки на основе отклонения цели от предсказания, а получает данные о том, что на предыдущей версии весов реальная торговля отличается от идеала на такое-то количество пунктов. И на основе этой информации обновляет веса. То есть инфа в машину должна идти параллельным потоком. Может быть, это реально сделать.
А зачем вам веса? Почему вы про них заговорили вообще?
Я так понял что нужны предыдущие веса, теперь я понял что я ничего не понял)
А зачем вам веса? Почему вы про них заговорили вообще?
Я так понял что нужны предыдущие веса, теперь я понял что я ничего не понял)
Ну, похоже на то ))
Веса нам не нужны. Я просто их упомянул, чтобы стало понятно ВАМ. Нам нужно знать, как торговала система на предыдущих весах. Нужен исход торговли в каком-то интегрированном виде. Все.
Веса обновляются алгоритмом.
Вот, простая функция работает. Более сложную надо пробовать делать. Она должна еще дифференцироваться, вот в чем заскок.
library(neuralnet)
y <- as.data.frame(matrix(runif(n = 10000, min = -15, max = 15), ncol = 2))
y$V3 <- runif(n = 5000, min = -15, max = 15)
y$V4 <- runif(n = 5000, min = -15, max = 15)
y$V5 <- runif(n = 5000, min = -15, max = 15)
y$V6 <- runif(n = 5000, min = -15, max = 15)
y$V7 <- runif(n = 5000, min = -15, max = 15)
y$V8 <- y$V1 ^ 2 + y$V2 ^ 2
colnames(y) <- c('input_1', 'input_2', 'noise_1', 'noise_2', 'noise_3', 'noise_4', 'noise_5', 'output')
f_f <- function(x, y){
1/2*(y-x)^2
}
print(
nn_model <- neuralnet(formula = output ~ input_1 + input_2 + noise_1
, data = y
, hidden = 1
, threshold = 0.01
, stepmax = 1e+05
, rep = 100
, startweights = NULL
, learningrate.limit = NULL
, learningrate.factor = list(minus = 0.5, plus = 1.2)
, learningrate=NULL
, lifesign = "none"
, lifesign.step = 10
, algorithm = "rprop+"
, err.fct = f_f #"sse"
, act.fct = "logistic"
, linear.output = F
, exclude = NULL
, constant.weights = NULL
, likelihood = FALSE
)
)
f_f <- function(x, y) 1/2*(y-x)^2
f_f - считает ошибку для сети верно?
х - это то каким должно быть значение (идеальная кривая)
у - это то каким оно есть по факту (реальная кривая)
разница между ними и есть ошибка
но что то я не пойму как данные в нее подавать, нужен вектор торговли по пред. свечам , а по каким правилам открывать эти сделки, как вообще должны выглядеть эти входные данные с торговлей
f_f <- function(x, y) 1/2*(y-x)^2
f_f - считает ошибку для сети верно?
х - это то каким должно быть значение (идеальная кривая)
у - это то каким оно есть по факту (реальная кривая)
разница между ними и есть ошибка
но что то я не пойму как данные в нее подавать, нужен вектор торговли по пред. свечам , а по каким правилам открывать эти сделки, как вообще должны выглядеть эти входные данные с торговлей
Подкинул один коллега ссылку на курс по теме машинного обучения, посмотрите плз, как оцените? Курс бесплатный, но блин на Питоне зачем-то ((
https://www.udacity.com/course/machine-learning-for-trading--ud501
Подкинул один коллега ссылку на курс по теме машинного обучения, посмотрите плз, как оцените? Курс бесплатный, но блин на Питоне зачем-то ((
https://www.udacity.com/course/machine-learning-for-trading--ud501
Самое эффективное:
1. ставите R - 5 минут
2. скачиваете пакет rattle, который оформлен как GUI, а посему не требует познаний в R.
3. Для сокращения первоначальных затрат берете мою статью. В ней есть пояснения, а главное прицеплен готовый файл. Один раз увидев мой файл Вы запросто сможете подготовить свой.
4. Получаете шесть моделей.
5. Главное в рамках rattle вы можете увидеть полный цикл машинного обучения:
Все это даст Вам некий фундамент без пробелов, а главное конкретный опыт машинного обучения с привязкой к форексу.
ПС.
rattle будет Вам очень полезен не только на первых шагах, но и в дальнейшем: минимальные затраты, чтобы что-то прикинуть, поэкспериментировать...
ПСПС
Конечно, без книг не обойтись. Вот здесь их полно. Поиск работает отлично.
Спасибо за подробные прояснения Dr.Trader!
Вы знаете наверное самое лучшее и правильное было бы обучать на самих разворотах даже того же зигзага, то есть давать три состояния 1)разворот вверх
2)разворот вниз
3)не разворот
но обучиться ли, это довольно сложно ловить развороты, плюс перекос по количеству наблюдений , классов "не разворот" будет в десятки а может и в сотни раз больше
А какие вы предикторы используете и какие результаты?
Я вот начал спектральный анализ осваивать, первые пробы оказались на много качественней чем просто с индикаторами, запускал через rattle , ошибка на обучении и проверке получилась 6% , но когда начал переносить код в R то ошибка сильно поднялась где то до 30% если не ошибаюсь, Сан Саныч говорит что переобучение , в общем пока мне многое не понятно
Также есть способ через спектральный анализ узнавать какие периоды доминируют в рынке и эти периоды можно подставлять в индикаторы, получаться адаптивные индикаторы а не подогнанные под историю, первые тесты обнадежили, но что то никак с силами не соберусь эту всю кучю в голове по полочкам разложыть
Я использую стандартные индикаторы как основу для создания предикторов. Пока-что ещё сам экспериментирую с этим, пробую идеи из этой темы форума.
Занимался этим последние недели, сейчас лучший результат получается так: (очень много вычислений, изучаю такой подход вообще на таймфрейме D1 чтобы было быстрее, потом перейду на тф помельче)
1) экспорт из mt5 в csv: ohlc, время, индикаторы, всё за последние 10 баров. Недавно начал брать время только с самого нового бара, считаю что время остальных баров является вычисляемым, и следовательно не несёт новой информации. Выходит несколько сотен "первичных" предикторов. Требуемый результат обучения - "1" или "0" - рост или падение цены за следующий бар. С зигзагами у меня всё выходит нестабильно и сложно, у меня сейчас лучше получается работать с ценами закрытия. Когда отработаю полный алгоритм обучения модели с нуля - можно будет браться и за зигзаги и предсказание трендов.
2) провожу в R разные математические операции с имеющимеся данными - сложение, дельты, мин, макс, итд. Выходит уже более тысячи предикторов.
3) Очевидно, что мусора после второго шага больше чем нужно. Я его отсеиваю по методу из статьи про основные компоненты http://www.r-bloggers.com/principal-components-regression-pt-2-y-aware-methods/, про это тут ранее писал СанСаныч. Саму PCR модель я не обучаю, остановился покачто на такой функции для предварительного отсева предикторов:
srcTable - таблица с предикторами, последняя колонка должна быть требуемым результатом обучения. pruneSig лучше оставить -1.
В результате функция вернёт список с названиями колонок из таблицы, которые несут какую-то полезную информацию. Или пустой список, если ничего полезного не найдётся. Этот способ в статье указан как не особ значительный, но оказывается он вполне адекватен, мусор он отсеивает очень хорошо. Ещё, список с результатами будет отсортирован по-значимости, с более полезных, до менее полезных.
4) Если функция вернула пустой список - я ещё раз провожу второй шаг, опять генерирую разные математические комбинации на имеющихся данных, потом третий шаг для отсева. Так приходится повторять 3-4 раза. Объём данных растёт с каждым повтором, поэтому лучше как-то ограничивать объём новых генерируемых данных. Можно изменить эту функцию для отсева, чтобы если список выходит пустой - то она возвращала сотню-две лучших результатов, и новые предикторы генерировать уже только из них.
5) Далее согласно статье нужно обучить саму модель основных компонент. С этим у меня проблемы, покачто лучший r-squared для обученной модели = 0.1, этого мало, в статье пишут что надо хотя-бы 0.95. Но, на полученных предикторах можно обучить какую-то другую модель из R, и результат будет лучше. У меня больше всего опыта с нейронкой, лучший результат во фронттесте с ней выходит с ошибкой около 37%. PCE модель по идее должна быть стабильней, без переобучения, итд, но пока не получается набрать для неё предикторов.
Если у вас ошибка в 30% во фронттесте то это уже вполне прибыльная модель, делайте по ней советник для mt5 и проверяйте в тестере стратегий.
Подкинул один коллега ссылку на курс по теме машинного обучения, посмотрите плз, как оцените? Курс бесплатный, но блин на Питоне зачем-то ((
https://www.udacity.com/course/machine-learning-for-trading--ud501