Машинное обучение в трейдинге: теория, модели, практика и алготорговля - страница 2129
![MQL5 - Язык торговых стратегий для клиентского терминала MetaTrader 5](https://c.mql5.com/i/registerlandings/logo-2.png)
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Вот гистограмма по балансу - синим новые модели, красным старые.
Все настройки одинаковы.
Значимость предикторов
Модели используют время по максимуму. Хорошо это или плохо - сложно сказать, но вроде как плохо, когда какой либо предиктор получает преимущество за счет похожести на аналоги.
Recall
Precision
В итоге - разница есть, конечно не большая, но всё же.
Балансик неплохой.
В старой версии минуты подаете? Если нет, то подайте, для правильного сравнения. В версии синус + косинус они учтены. Либо из син+кос уберите минуты, если так быстрее.
Ну так синус + косинус времени лучше, чем просто номерами?
В старой версии минуты подаете? Если нет, то подайте, для правильного сравнения. В версии синус + косинус они учтены. Либо из син+кос уберите минуты, если так быстрее.
Метрику я предоставил - выглядит хуже. Причина - большая вероятность попадания в случайный набор предикторов для построения сплита дерева предиктора связанного со временем.
Да, я не использовал у себя минуты в старой версии.
Метрику я предоставил - выглядит хуже. Причина - большая вероятность попадания в случайный набор предикторов для построения сплита дерева предиктора связанного со временем.
Вы катбустом делали? Там не должно быть случайного выбора предикторов. В бустах используются все предикторы, но неглубокие деревья.
В случайном лесу - да. Задается например по
The number of features to consider when looking for the best split:
Да, я не использовал у себя минуты в старой версии.
Может они и ухудшили результат? Попробуйте в новой версии их удалить.
Вот так, должна быть полная аналогия вашему старому варианту
if(nameInd[nInd]=="Hour") {CopyTime (sim,per,startDt,n_bar+1,dtm);TimeToStruct(dtm[0],dts);ArrayResize(tmp,1);tmp[0]=(double)(dts.hour)*360.0/24.0;tmp[0]=(buf==0?MathSin(tmp[0]*pi/180.0):MathCos(tmp[0]*pi/180.0));}
if(nameInd[nInd]=="WeekDay") {CopyTime (sim,per,startDt,n_bar+1,dtm);TimeToStruct(dtm[0],dts);ArrayResize(tmp,1);tmp[0]=(double)(dts.day_of_week)*360.0/7.0;tmp[0]=(buf==0?MathSin(tmp[0]*pi/180.0):MathCos(tmp[0]*pi/180.0));}
Вы катбустом делали? Там не должно быть случайного выбора предикторов. В бустах используются все предикторы, но неглубокие деревья.
В случайном лесу - да. Задается например по
Может они и ухудшили результат? Попробуйте в новой версии их удалить.
Вот так, должна быть полная аналогия вашему старому варианту
if(nameInd[nInd]=="Hour") {CopyTime (sim,per,startDt,n_bar+1,dtm);TimeToStruct(dtm[0],dts);ArrayResize(tmp,1);tmp[0]=(double)(dts.hour)*360.0/24.0;tmp[0]=(buf==0?MathSin(tmp[0]*pi/180.0):MathCos(tmp[0]*pi/180.0));}
if(nameInd[nInd]=="WeekDay") {CopyTime (sim,per,startDt,n_bar+1,dtm);TimeToStruct(dtm[0],dts);ArrayResize(tmp,1);tmp[0]=(double)(dts.day_of_week)*360.0/7.0;tmp[0]=(buf==0?MathSin(tmp[0]*pi/180.0):MathCos(tmp[0]*pi/180.0));}
По поводу рандома - там его достаточно.
Вас не удивило, что у меня отдельно время и с синусом и с косинусом, а как я сейчас понимаю, должно быть одно, но использоваться то синус то косинус?
Отсюда вопрос, что такое buf, и почему когда он равен нулю, то берем косинус?
По поводу рандома - там его достаточно.
Вас не удивило, что у меня отдельно время и с синусом и с косинусом, а как я сейчас понимаю, должно быть одно, но использоваться то синус то косинус?
Отсюда вопрос, что такое buf, и почему когда он равен нулю, то берем косинус?
buf номер буфера.
Для времени их 2.Есть индикаторы с 1 буфером, есть и больше 2.
Я у себя в цикле перебираю количество буферов при составлении столбцов для обучающего набора.
Нужно обязательно подавать и синус и косинус, а не что-то одно. Объяснение почему - тут https://megaobuchalka.ru/9/5905.html
Числовые данные, казалось бы, не надо кодировать. Но в ряде случаев целесообразно кодировать и числовые данные [22]. При кодировании числовых данных необходимо учитывать содержательное значение данных, расположение значений в интервале значений, точность измерения данных. Продемонстрируем это на примерах. Например, кодирование позволяет учесть содержательное значение данных. Если входными данными сети является угол между двумя направлениями, например, направление ветра, то ни в коем случае не следует подавать на вход сети значение угла (не важно, в градусах или радианах). Такая подача приведет к необходимости "уяснения" сетью того факта, что 0 градусов и 360 градусов одно и тоже. Разумнее выглядит подача в качестве входных данных синуса и косинуса этого угла. Число входных сигналов сети увеличивается, но зато близкие значения входа кодируются близкими входными сигналами.
buf номер буфера.
Для времени их 2.Есть индикаторы с 1 буфером, есть и больше 2.
Я у себя в цикле перебираю количество буферов при составлении столбцов для обучающего набора.
Нужно обязательно подавать и синус и косинус, а не что-то одно. Объяснение почему - тут https://megaobuchalka.ru/9/5905.html
Значит я правильно изначально всё сделал - просто уже не помню, что делал...
Просто число минут с понедельника 0:00 = Хотя - плохая идея. Чтобы добраться например до первых 10 минут каждого часа, придется очень много сплитов сделать.
Наверное лучше, как вы - просто дни, часы. Ну и может минуты.
А может вообще обойтись одним входом вместо 4-х?
Просто число минут с понедельника 0:00 = Хотя - плохая идея. Чтобы добраться например до первых 10 минут каждого часа, придется очень много сплитов сделать.
Наверное лучше, как вы - просто дни, часы. Ну и может минуты.
Запустил уже обучение без минут - посмотрим.
Я использую ещё время по типу 1/4 бара - часовки, 4часовки, дни.
Запустил уже обучение без минут - посмотрим.
Я использую ещё время по типу 1/4 бара - часовки, 4часовки, дни.
Вообще получается, что деревянным моделям надо подавать много входов, которые предварительно максимально поделены, т.е. имеют минимальное количество возможных собственных делений.
Вообще получается, что деревянным моделям надо подавать много входов, которые предварительно максимально поделены, т.е. имеют минимальное количество возможных собственных делений.
Если делать самому квантование, то да, но там же ещё встроена автоматика.
Выше на гистограммах - это как раз разное число квантов на предиктор, видно, как они влияют на итоговый результат.
Если вытаскивать прожилки ценной информации в виде отдельного кванта предиктора, то можно эту прожилку закодировать в виде бинарного признака и подавать отдельно.