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

 
Mihail Marchukajtes:
Юрий, решил замахнутся на святая святых и запилить грааль, но выдало надпись что прогнозных значений не может быть больше 10. Это сознательное ограничение или предел алгоритма???? Потому как больше 10, это крайне актуально так то....

После 10 может произойти переполнение типа int, а в нём всего 32 бита, т.е. в него помещаются  до переполнения числа не превышающие значение 2^32=2147483648. Всего лишь чуть больше двух миллиардов. Можно конечно же запилить счётчики и с большей разрядностью, но скорость вычислений упадёт в разы.

Поэтому Dr.Trader не смог запустить полноценную libVMR переписанную на R - очень много вычислений и сильно жрёт память.

 
Yury Reshetov:

После 10 может произойти переполнение типа int, а в нём всего 32 бита, т.е. в него помещаются числа без переполнения не превышающие 2^32=2147483648. Всего лишь чуть больше двух миллиардов. Можно конечно же запилить счётчики и с большей разрядностью, но скорость вычислений упадёт в разы.

ХМ... скорость лучше не снижать... В предыдущих версиях это жутко напрягало. ну ладно 10 так 10, теперь усилить качество входов и думаю работаь можно....
 
Yury Reshetov:

После 10 может произойти переполнение типа int, а в нём всего 32 бита, т.е. в него помещаются  до переполнения числа не превышающие значение 2^32=2147483648. Всего лишь чуть больше двух миллиардов. Можно конечно же запилить счётчики и с большей разрядностью, но скорость вычислений упадёт в разы.

Поэтому Dr.Trader не смог запустить полноценную libVMR переписанную на R - очень много вычислений и сильно жрёт память.

Расскажу тебе одну историю, я помнится тебя спрашивал по поводу распаралеливания вычислений. Ну чтобы на математическом сопроцессоре можно было считать большее количество входов. Ответа не последовало и я пошёл другим путм. как раз подвернулся один мудила, по другому его не назовёшь, который переписал LibVMRx на С++ и вроде как распаралелил, у него был мощный комп и 8 столбцов считалось минут 40, как он говорил. Но в итоге пропал так и не скинул ни программы ни чего, олдни отговорки и отмазки лепил. Хотя я предоставил ему все данные, уже был готов поделится системой и соображениями по поводу построения модели. Но он так и отморозился. Вот бывают же такие. Туда дуй, а от туда уй....
 
Mihail Marchukajtes:
Расскажу тебе одну историю, я помнится тебя спрашивал по поводу распаралеливания вычислений. Ну чтобы на математическом сопроцессоре можно было считать большее количество входов. Ответа не последовало и я пошёл другим путм. как раз подвернулся один мудила, по другому его не назовёшь, который переписал LibVMRx на С++ и вроде как распаралелил, у него был мощный комп и 8 столбцов считалось минут 40, как он говорил. Но в итоге пропал так и не скинул ни программы ни чего, олдни отговорки и отмазки лепил. Хотя я предоставил ему все данные, уже был готов поделится системой и соображениями по поводу построения модели. Но он так и отморозился. Вот бывают же такие. Туда дуй, а от туда уй....

Я всё что распараллеливается, в последней версии 6.01 распараллелил. Больше ничего не получается. Если бы была возможность, то распараллелил бы ещё. Для себя же самого делал, т.е.  мне самому нужно чтобы быстрее всё это вычислялось.


Сейчас придумал алгоритм, как вычислять слабые предикторы, чтобы их можно было удалить. Считать будет долго, но овчинка выделки стоит, потому что вместо слабого предиктора, можно подставить более сильные. Или избавиться от слабых, повысив и скорость вычислений и обобщающую способность. Потому что для трейдинга нужно постоянно прогонять пересчёт моделей, как только рынок начинает идти на измены. А рынок он такой, как только другие трейдуны посливаются, они меняют свои стратегии и нужно заново под них подстраиваться.

 
Yury Reshetov:

Я всё что распараллеливается, в последней версии 6.01 распараллелил. Больше ничего не получается. Если бы была возможность, то распараллелил бы ещё. Для себя же самого делал, т.е.  мне самому нужно чтобы быстрее всё это вычислялось.

Сейчас придумал алгоритм, как вычислять слабые предикторы, чтобы их можно было удалить. Считать будет долго, но овчинка выделки стоит, потому что вместо слабого предиктора, можно подставить более сильные. Или избавиться от слабых, повысив и скорость вычислений и обобщающую способность. Потому что для трейдинга нужно постоянно прогонять пересчёт моделей, как только рынок начинает идти на измены. А рынок он такой, как только другие трейдуны посливаются, они меняют свои стратегии и нужно заново под них подстраиваться.

Вот это в точку. Жду с нетерпением изменнеиний. Мы с тобой на одной стороне барикад, я тоже считаю что рынок меняется постоянно и нужно под него подстраиватся каждый раз когда происходят события или новости выходят. А не искать грааль за 5 лет, как некоторые тут делают. Это утопия, но объяснять я уже запарился...
 
ХМ... смотрика сейчас натренировал модель, обе модели получили одни и теже значения уровня обобщения, тоесть участок рынка обоими моделями распилен одинаково. Думаю тут ключь к выбору адекватной модели. Продолжаю тренить, иска входы и т.д.
 
Я кстати в процессе оптимизации одно ядро высвобождаю, иначе на компьютере работать становится не возможно....
 
Mihail Marchukajtes:
Вот это в точку. Жду с нетерпением изменнеиний.

Можно вручную поштучно перебирать предикторы, но это долго и мучительно, хотя тоже верное направление. Нужно, чтобы пусть долго, но на автомате и за приемлемое время и не так мучительно.

Mihail Marchukajtes:


Мы с тобой на одной стороне барикад, я тоже считаю что рынок меняется постоянно и нужно под него подстраиватся каждый раз когда происходят события или новости выходят. А не искать грааль за 5 лет, как некоторые тут делают. Это утопия, но объяснять я уже запарился...

Слабые долгоиграющие граали можно найти. У меня было несколько таких. Но там профит на грани фола, прибыль копеечная даже с нормальным депо.

Найти сильный долгоиграющий грааль, теоретически наверно можно, но скорее всего вероятность такого ноль целых шишь десятых?

Самый верный путь:

  1. Правильный подбор наиболее сильных предикторов
  2. Построение моделей на короткой дистанции с систематической подстройкой по мере измены рынка. Но лучше всё это хозяйство сделать на полном автомате или хотя бы свести ручное вмешательство к минимуму.
 
Mihail Marchukajtes:
ХМ... смотрика сейчас натренировал модель, обе модели получили одни и теже значения уровня обобщения, тоесть участок рынка обоими моделями распилен одинаково. Думаю тут ключь к выбору адекватной модели. Продолжаю тренить, иска входы и т.д.

Смотри в файл 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;

}
 
Yury Reshetov:

Смотри в файл 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;

}

Ну дык это я в курсе, яж уже год как пользуюсь твоей билиотекой. Такие вещи для меня понятны..... У меня таких строк нет, все предикты задействованы.....
Причина обращения: