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

 
Maxim Dmitrievsky:
Щас сделаю в Гугл колабе. Сможете сами загружать Файлы и преобразовывать, без установки питона 

Спасибо!

Посмотрел видео, спасибо! Я так понимаю, что можно не всю выборку преобразовывать а только её часть?

И, может знаете, как сохранить файлы в архиве? А то слишком медленный у меня интернет :( 

 
elibrarius:

Тут https://github.com/catboost/catboost/blob/3cde523d326e08b32caf1b8b138c2c5303dc52e5/library/cpp/grid_creator/binarization.cpp

все 5 типов квантования. Начните с самого простого (как раз по скученности) ф-я называется GenerateMedianBorders

Спасибо! Но, слишком непонятный код для меня :((( Может Вы сможете его преобразовать в MQL5?

 
Renat Akhtyamov:

на графике баланса прирост за последних 4.5 года из 5-ти представленных, практически равен нулю

как можно такое вытерпеть?

явно рано говорить о прибыльности

А не 50% прирост относительно прошлого роста? За 5 лет 350% - это хороший показатель, если считать, что стратегий примитивная и изначально сливная, и используются индикаторы со стандартными настройками из MT5. Показан подход, который кажется эффективным.

[Удален]  
Aleksey Vyazmikin:

Спасибо!

Посмотрел видео, спасибо! Я так понимаю, что можно не всю выборку преобразовывать а только её часть?

И, может знаете, как сохранить файлы в архиве? А то слишком медленный у меня интернет :( 

все файлы выделите и санчайте, они в зип упакуются автоматом

разная длина выборок тогда будет, если часть оверсемплить

загрузил туда зип отдельно. Интернет надо менять, сами наплодили файлов по 200 mb ))

 
Aleksey Vyazmikin:

Спасибо! Но, слишком непонятный код для меня :((( Может Вы сможете его преобразовать в MQL5?

Преобразовывать лень)
Объясню суть:

1) сортируем столбец
2) считаем среднее количество элементов в кванте, например 10000 элеметов / 255 квантов = 39,21
3) в цикле перемещаемся на 39,21 элементов на каждом шаге и добавляем значение из отсортированного массива в массив значений квантов. Т.е. 0 значение массива = значению 0 кванта, 39-е значение = 1 кванту, 78-е = 2 кванту и т.д.

Если значение уже есть в массиве, то есть попали в зону где много дубликатов, то дубликат не добавляем.

На каждом шаге добавляем именно  39,21 а потом сумму округляем для выбора элемента в массиве, чтобы было равномерно. Т.е. вместо 195 (39*5 = 195) элемента взять 196 ( 39,21 * 5 = (int)196,05 )

 
Maxim Dmitrievsky:

все файлы выделите и санчайте, они зипом скачаются

разная длина выборок тогда будет, если часть

Спасибо, так и есть - можно скачать архивом, что радует!

А вот разная длина выборок - это плохо, я думал выделить наиболее рандомные столбцы, где допустимы малые отклонения.

Думаю, что на exam выборку не надо применять этот метод - иначе как потом в реале его использовать.

Запускаю на обучение, посмотрим, что выйдет.

[Удален]  
Aleksey Vyazmikin:

Спасибо, так и есть - можно скачать архивом, что радует!

А вот разная длина выборок - это плохо, я думал выделить наиболее рандомные столбцы, где допустимы малые отклонения.

Думаю, что на exam выборку не надо применять этот метод - иначе как потом в реале его использовать.

Запускаю на обучение, посмотрим, что выйдет.

на экзам не надо, но может пригодится

 
elibrarius:

Преобразовывать лень)
Объясню суть:

1) сортируем столбец
2) считаем среднее количество элементов в кванте, например 10000 элеметов / 255 квантов = 39,21
3) в цикле перемещаемся на 39,21 элементов на каждом шаге и добавляем значение из отсортированного массива в массив значений квантов. Т.е. 0 значение массива = значению 0 кванта, 39-е значение = 1 кванту, 78-е = 2 кванту и т.д.

Если значение уже есть в массиве, то есть попали в зону где много дубликатов, то пропускаем дубликат не добавляем.

На каждом шаге добавляем именно  39,21 а потом сумму округляем для выбора элемента в массиве, чтобы было равномерно. Т.е. вместо 195 (39*5 = 195) элемента взять 196 ( 39,21 * 5 = (int)196,05 )

С равномерным распределением понятно - я бы в начале массив уникальных значений создал и по нему резал.

А есть же другие методы разбить сетку:

    THolder<IBinarizer> MakeBinarizer(const EBorderSelectionType type) {
        switch (type) {
            case EBorderSelectionType::UniformAndQuantiles:
                return MakeHolder<TMedianPlusUniformBinarizer>();
            case EBorderSelectionType::GreedyLogSum:
                return MakeHolder<TGreedyBinarizer<EPenaltyType::MaxSumLog>>();
            case EBorderSelectionType::GreedyMinEntropy:
                return MakeHolder<TGreedyBinarizer<EPenaltyType::MinEntropy>>();
            case EBorderSelectionType::MaxLogSum:
                return MakeHolder<TExactBinarizer<EPenaltyType::MaxSumLog>>();
            case EBorderSelectionType::MinEntropy:
                return MakeHolder<TExactBinarizer<EPenaltyType::MinEntropy>>();
            case EBorderSelectionType::Median:
                return MakeHolder<TMedianBinarizer>();
            case EBorderSelectionType::Uniform:
                return MakeHolder<TUniformBinarizer>();
        }
[Удален]  
Aleksey Vyazmikin:

С равномерным распределением понятно - я бы в начале массив уникальных значений создал и по нему резал.

А есть же другие методы разбить сетку:

сэмплов должно быть много, иначе модель ничему не обучится