Блог им. Feliks

Хорошо пошло обучение нейронных сетей по индексу SP_500

Всем добрый день!

Занимаюсь машинным обучением, нейронными сетями.Очень хорошо пошло прогнозирование по SP_500 по часовикам.

Хорошо пошло обучение нейронных сетей по индексу SP_500

Есть желающие поучаствовать в работе с датасетом и улучшении модели? Слишком широк выбор вариантов дальнейшего развития модели
★4
39 комментариев
сипи торгуется элементарно, т.к в нем аптренд в 11 лет… можно выкупать любое падение и сдавать выше

попробуй обучить нейросеть на лукойле… вот тогда может и будет толк

ну и на часовиках тестить нельзя
avatar
ves2010, почему нельзя на часовиках?
Феликс Дзержинский, из практики… чтоб гарантированно исключить гэп на открытии из торговли и тестов надо выкинуть первую свечку… выкидывать один час торгов из 6.5 слишком много… т.е. надо тестить на таймфрейме 15 мин и ниже...
более того… надо внимательно смотреть сами свечи… на америке в свечи зачастую включена предторговая и послеторговая сессия… т.е надо чтобы свечи были строго с 9.30 до 16.00
на дневках вообще тестить нельзя совсем… т.к многие бумаги торгуются вне времени торгов, и эти цены включают в дневки...

более того… надо смотреть среднюю сделку… в %… бывает профит есть по тестам, но профит не отбивается никак комисами
avatar
ves2010, что-то мешает торговать не основную сессию?
avatar
Replikant_mih, а смысл? там овердокуя технических ньюансов  
avatar
ves2010, Ну я торговал, кроме пониженной ликвидности ничео особо не помню такого.
avatar
Replikant_mih, а как тебе широкий спред? и переменное количество свечей, что сбивает индюки настроенные на период
avatar
ves2010, ну, широкий спред — производная от ликвидности. А свечи… ну если ты на этом обучился, и при торговли это обучение и используешь, то все остальное должно быть побоку. Если нет — ну тогда да.
avatar
ves2010, надо чтобы свечи были строго с 9.30 до 16.00 — это учел. В датасете именно такие данные.
По коммиссионным согласен, надо в итоге считать. Но это уже последняя стадия, натренируем эту сетку, будем тренировать другую — для поиска оптимального момента и определения стратегии поведения с учетом коммисионных
Феликс Дзержинский, у тя изначально подход неверный… телега впереди лошади… я не могу объяснить в чем стратегическая ошибка но она как бы есть… просто констатирую факт

тебе надо сесть и крепко подумать… как переставить телегу и лошадь

ну как бы предствь что нейросеть учится не торгового бота делать, а дом… и сразу поймешь недостаток своего подхода
avatar
Привет. Я б поучаствовал. Но я пока вожусь с простыми моделями. До нейросеток ещё не добрался).
avatar
 А че на графике? — это приращение факт и прогноз на out_of_sample??
avatar
Replikant_mih, да, именно. На будущих данных. Не всегда так хорошо, но в среднем хорошо. Хочу улучшить, поэтому пришел сюда
мне интересны обучающиеся модели. а на графике что — прогноз или результат на обучающей выборке?
avatar
sis12qw, на тестовой выборке. на данных, которые не использовались во время обучения
Мне интересны нейросети. Готов поучаствовать.
Что необходимо сделать и в какие сроки?
avatar
Александр, ниже расписал все. Если что непонятно — спрашивайте
Феликс, как с вами связаться.
avatar
rinman, пишите на [email protected] свой номер, я позвоню
Это out of sample?
avatar
Михаил, именно
cloud.mail.ru/public/5n9a/2LuoibKv7 — вот ссылка на датасет. Загружаете на комп, импортируете в Python командой joblib.load('marked_dataset_for_regression_with_high_average_delta.pkl').

Последний столбец 'class' — и есть таргет, изменение SP&500 по часам. Это целевой показатель, уже сдвинутый назад на час. Это и является прогнозируемым показателем, разница High последующего часа минус (High+Low)/2 текущего часа. Пока что у меня loss='mean_squared_error' получается около 16.
Феликс Дзержинский, то есть по сути вы подглядываете в будущее на величину (Close - (High+Low)/2), что мягко говоря не очень. 
avatar
Михаил, Close вообще не участвует. Точка наблюдения — конец текущего часа. Мы знаем High и Low, и можем вычислить среднюю цену часа. Из будущего часа мы берем High в датасет, чтобы обучить модель. Конечно. После обучения уже не зная High, модель сама его прогнозирует, что вы и видите на картинке.
Феликс Дзержинский, в конце часа вы знаете Сlose, а соответственно и величину (Close - (High+Low)/2). Таргет у вас очень странный. Обычно изменение относительно Close берут в качестве таргета. 
avatar
Михаил, моделируем. Мне кажется мы не понимаем друг друга. Сейчас 20.59 минут 59 секунд. Я знаю (High+Low)/2     для часа который только что закончился. Часа с 20.00 до 20.59.59. Из будущего часа, с 21.00 до 21.59.59 для целей машинного обучения я беру High, который будет таргетом для меня. Это же понятно, мы кормим компьютеру данные, он учится. Потом, после обучения, он уже сам способен мне сказать, в реальной ситуации, какой же High будет в часе, который наступает. Что сложного, ничего сложного не вижу.
И обьясню почему Close нельзя брать. Это фиксация на конкретную минуту, какой-то цены. Даже секунду. Влияние случайности высокое, предсказать трудно.
А вот High — он один для целого часа. Это существенная характеристика временного промежутка. И он легче, намного легче поддается прогнозированию
Феликс Дзержинский, выпрогнозируете high или “разница High последующего часа минус (High+Low)/2”? Если второе, то к концу часа вы знаете часть этой разницы — это очевидный лик. И второй момент — зачем прогнозировать high? Как его потом реально отторговать? Как продать купить примерно по close или open вполне понятно — торгуй в конце часа и получишь близкую величину. А вот как технически продать по high или по (High+Low)/2 не понятно, поэтому это выглядит как прогнозирование ради прогнозирования, а не с целью реально потом совершать какие-то сделки. 
avatar
Михаил, разница High последующего часа минус (High+Low)/2 текущего часа. Текущего! Я ничего не знаю, ликов нет.
Как отторговать? Допустим, в 20.59.59 вы знаете, что High в следующем часе будет выше на 0,5%. Мы просто покупаем сейчас и дожидаемся в следующем часе этих 0,5% для продажи
Феликс Дзержинский, в текущем часе вы знаете close текущего часа, следовательно Close - (High+Low)/2 — значительную составляющую вашего таргета.
А как вы перед этим купили по (High+Low)/2? А если он не вырос на 0,5% — что вы будете делать? При вашем подходе ошибка прогноза ничего не говорит о реальном результате ваших сделок. 
Если же вы прогнозируете close следующего часа относительно close текущего часа, понятно как продавать и покупать по ценам близким к ним и ошибка прогноза будет близко к жизни показывать насколько вы будете ошибаться при совершении этих сделок. 
avatar
Суть в чем. Одна строка — это данные агрегированные по американскому рынку в течение часа. Последний столбец — факт, то насколько высоко забрался HIGH по индексу в течение следующего часа.
То есть если у вас получится хорошо натренировать сеть, то вы сможете прогнозировать изменение SP&500 в течение ближайшего часа. Потом уже можно заняться датасетом по нижней границе LOW.

Предполагается, что вы разбираетесь в способах машинного обучения. Это не только нейросети, там куча всего — xgboost, рандом-форрест и т.п.

Не забывайте про валидацию. Я на валидацию ставил последние 3000 сэмплов, это где-то 2 года наблюдений. Таким образом обеспечиваете имитацию испытания модели в реале
Феликс Дзержинский, Я вынужден Вас огорчить, но машинное обучение неприменимо в том виде, в каком Вы его рассматриваете. Целью любого машинного обучения является прогнозирование (или классификация как вариант прогнозирования). Цена же НЕ является стационарным временным рядом (сигналом). 
https://ru.wikipedia.org/wiki/%D0%A1%D0%BB%D1%83%D1%87%D0%B0%D0%B9%D0%BD%D1%8B%D0%B9_%D0%BF%D1%80%D0%BE%D1%86%D0%B5%D1%81%D1%81
Ц
итата: «Случайная функция называется стационарной в широком смысле, если её математическое ожидание и дисперсия постоянны, а АКФ зависит только от разности моментов времени, для которых взяты ординаты случайной функции. Понятие ввёл А. Я. Хинчин.».
Поэтому рано или поздно, но Вы сольете :-)
На самом деле машинное обучение и вообще нейросети в трейдинге применяются, но они обучаются анализировать совершенно иные параметры, в число которых цена не входит в принципе.
avatar
agraton, проанализировал этот момент. поэтому в качестве временного ряда берется не цена, а отклонение цены от некой величины. формулу я расписал при постановке задачи, см. выше.
можете взять целевой столбец. он имеет нормальное распределение, типичный колокол. с вполне четким матожиданием и дисперсией
Eugene Logunov, Согласен). Но хз.
avatar
Eugene Logunov, это один из лучших отрывков. В основном похуже, но тоже привлекает внимание. Не зря же я сюда пришел, хочу улучшить
взялся Железный Феликс и за машинное обучение, теперь все наладится)
avatar
Тема эта поднимается здесь уже несколько раз, поэтому повторюсь- прогнозирование high и low следующего часа ( или дня, или другого таймфрейма) не так легко превращается с прибыльную стратегию, несмотря на привлекательность картинок. Примерно в 50% случаев, цена будет недолетать совсем немного до вашего прогноза, и вместо прибыли вы получите убыток, а итоговая прибыль будет чуть хуже случайного подбрасывания монетки. Можете проверить. И да, для прогнозирования этой величины можно использовать более простые методы прогноза, чем нейросеть. Захотите пообсуждать детали- пишите.
avatar

Вот 15 минутки сургутка CNN тупо решение в лоб. По цене закрытия. Если уж и брать, что-то другое, кроме закрытия, то простое среднее min max цены как то математически не очень красиво, должно быть что-то посложнее, ИМХО. Насчет часовиков и дневок согласен, дневки лучше, но где ж их столько взять. Поведение цены меняется с годами, старые данные не пойдут.
А у вас что за сеть? LSTM?
И какую вы помощь по датасету ждете от народа? Я его вообще никак не обрабатывал, ну кроме как к 0-1 привел.

avatar

теги блога Феликс Дзержинский

....все тэги



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