Машинное обучение в трейдинге: теория, модели, практика и алготорговля - страница 74
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Юрий, решил замахнутся на святая святых и запилить грааль, но выдало надпись что прогнозных значений не может быть больше 10. Это сознательное ограничение или предел алгоритма???? Потому как больше 10, это крайне актуально так то....
После 10 может произойти переполнение типа int, а в нём всего 32 бита, т.е. в него помещаются до переполнения числа не превышающие значение 2^32=2147483648. Всего лишь чуть больше двух миллиардов. Можно конечно же запилить счётчики и с большей разрядностью, но скорость вычислений упадёт в разы.
Поэтому Dr.Trader не смог запустить полноценную libVMR переписанную на R - очень много вычислений и сильно жрёт память.
После 10 может произойти переполнение типа int, а в нём всего 32 бита, т.е. в него помещаются числа без переполнения не превышающие 2^32=2147483648. Всего лишь чуть больше двух миллиардов. Можно конечно же запилить счётчики и с большей разрядностью, но скорость вычислений упадёт в разы.
После 10 может произойти переполнение типа int, а в нём всего 32 бита, т.е. в него помещаются до переполнения числа не превышающие значение 2^32=2147483648. Всего лишь чуть больше двух миллиардов. Можно конечно же запилить счётчики и с большей разрядностью, но скорость вычислений упадёт в разы.
Поэтому Dr.Trader не смог запустить полноценную libVMR переписанную на R - очень много вычислений и сильно жрёт память.
Расскажу тебе одну историю, я помнится тебя спрашивал по поводу распаралеливания вычислений. Ну чтобы на математическом сопроцессоре можно было считать большее количество входов. Ответа не последовало и я пошёл другим путм. как раз подвернулся один мудила, по другому его не назовёшь, который переписал LibVMRx на С++ и вроде как распаралелил, у него был мощный комп и 8 столбцов считалось минут 40, как он говорил. Но в итоге пропал так и не скинул ни программы ни чего, олдни отговорки и отмазки лепил. Хотя я предоставил ему все данные, уже был готов поделится системой и соображениями по поводу построения модели. Но он так и отморозился. Вот бывают же такие. Туда дуй, а от туда уй....
Я всё что распараллеливается, в последней версии 6.01 распараллелил. Больше ничего не получается. Если бы была возможность, то распараллелил бы ещё. Для себя же самого делал, т.е. мне самому нужно чтобы быстрее всё это вычислялось.
Сейчас придумал алгоритм, как вычислять слабые предикторы, чтобы их можно было удалить. Считать будет долго, но овчинка выделки стоит, потому что вместо слабого предиктора, можно подставить более сильные. Или избавиться от слабых, повысив и скорость вычислений и обобщающую способность. Потому что для трейдинга нужно постоянно прогонять пересчёт моделей, как только рынок начинает идти на измены. А рынок он такой, как только другие трейдуны посливаются, они меняют свои стратегии и нужно заново под них подстраиваться.
Я всё что распараллеливается, в последней версии 6.01 распараллелил. Больше ничего не получается. Если бы была возможность, то распараллелил бы ещё. Для себя же самого делал, т.е. мне самому нужно чтобы быстрее всё это вычислялось.
Сейчас придумал алгоритм, как вычислять слабые предикторы, чтобы их можно было удалить. Считать будет долго, но овчинка выделки стоит, потому что вместо слабого предиктора, можно подставить более сильные. Или избавиться от слабых, повысив и скорость вычислений и обобщающую способность. Потому что для трейдинга нужно постоянно прогонять пересчёт моделей, как только рынок начинает идти на измены. А рынок он такой, как только другие трейдуны посливаются, они меняют свои стратегии и нужно заново под них подстраиваться.
Вот это в точку. Жду с нетерпением изменнеиний.
Можно вручную поштучно перебирать предикторы, но это долго и мучительно, хотя тоже верное направление. Нужно, чтобы пусть долго, но на автомате и за приемлемое время и не так мучительно.
Mihail Marchukajtes:
Мы с тобой на одной стороне барикад, я тоже считаю что рынок меняется постоянно и нужно под него подстраиватся каждый раз когда происходят события или новости выходят. А не искать грааль за 5 лет, как некоторые тут делают. Это утопия, но объяснять я уже запарился...Слабые долгоиграющие граали можно найти. У меня было несколько таких. Но там профит на грани фола, прибыль копеечная даже с нормальным депо.
Найти сильный долгоиграющий грааль, теоретически наверно можно, но скорее всего вероятность такого ноль целых шишь десятых?
Самый верный путь:
ХМ... смотрика сейчас натренировал модель, обе модели получили одни и теже значения уровня обобщения, тоесть участок рынка обоими моделями распилен одинаково. Думаю тут ключь к выбору адекватной модели. Продолжаю тренить, иска входы и т.д.
Смотри в файл java. Если там есть строчки "Variable got under reduction", то они указывают на слабые предикторы. Такие предикторы из кода модели исключаются - они нигде не вычисляются в коде бинарного классификатора.
Правда, если все предикторы примерно одинаковы, то такие строчки не появляются.
Вот например (выделил жирным). Шестой предиктор v5 (считаются с нулевого) - седьмой столбец в CSV можно заменить на какой нибудь другой, более сильный:
Смотри в файл java. Если там есть строчки "Variable got under reduction", то они указывают на слабые предикторы. Такие предикторы из кода модели исключаются - они нигде не вычисляются в коде бинарного классификатора.
Правда, если все предикторы примерно одинаковы, то такие строчки не появляются.
Вот например (выделил жирным). Шестой предиктор v5 (считаются с нулевого) - седьмой столбец в CSV можно заменить на какой нибудь другой, более сильный:
double getBinaryClassificator1(double v0, double v1, double v2, double v3, double v4, double v5) {
double x0 = 2.0 * (v0 + 1.0) / 2.0 - 1.0;
double x1 = 2.0 * (v1 + 1.0) / 2.0 - 1.0;
double x2 = 2.0 * (v2 + 1.0) / 2.0 - 1.0;
double x3 = 2.0 * (v3 + 1.0) / 2.0 - 1.0;
double x4 = 2.0 * (v4 + 1.0) / 2.0 - 1.0;
//Variable v5 got under reduction
double decision = -0.23641879194630872 -0.10890380313199105 * x2
-0.14546040268456376 * x0 * x2
+ 0.07270693512304251 * x1 * x2
-0.07182997762863534 * x3
-0.07383982102908278 * x0 * x1 * x2 * x3
-0.4362541387024608 * x4
;
return decision;
}