Обсуждение статьи "Разработка робота на Python и MQL5 (Часть 2): Выбор модели, создание и обучение, кастомный тестер Python" - страница 2

 

Все-таки row цены оказываются лучшими фичами.

Раньше был скептически настроен из-за их нестационарности. Но после некоторых манипуляций тоже начал добывать достойные модели на этих признаках.

Так из незнания рождается знание, а из знания - незнание :)

 
Ivan Butko #:
Хорошая мотивация, когда есть результаты! 
Причём, как я понял, не на неделю вперёд, и не на месяц, а нормально так, год работает

Спасибо большое! Да, меня такое очень мотивирует! Буду продолжать исследования) Вновь ночь, со мной чашка кофе и идеи по коду)))

 
Maxim Dmitrievsky #:

Все-таки row цены оказываются лучшими фичами.

Раньше был скептически настроен из-за их нестационарности. Но после некоторых манипуляций тоже начал добывать достойные модели на этих признаках.

Так из незнания рождается знание, а из знания - незнание :)

 Вот типа такого пытался, у меня теща трейдер с опытом 15+ лет, она все говорит надо на объемах делать фичи)) https://www.mql5.com/ru/code/50133

Индикатор Price / Volume
Индикатор Price / Volume
  • www.mql5.com
Одна из простых фич для машинного обучения
 
Yevgeniy Koshtenko #:

 Вот типа такого пытался, у меня теща трейдер с опытом 15+ лет, она все говорит надо на объемах делать фичи)) https://www.mql5.com/ru/code/50133

Да, чаще правда волатильность добавляют (например индикатор std), но не сильно много дает. Или приращения, деленные на волатильность.

 

Евгений, с Ваших статей начал изучать ML применительно к торговле, за это большое спасибо.

Не могли бы Вы объяснить следующие моменты.

После обработки данных функцией label_data их объем значительно уменьшается(мы получаем случайный набор баров, которые удовлетворяет условиям функции). Затем данные проходят через несколько функций, и мы делим их на train и test выборки. Модель обучается на train выборке. После этого из тестовой выборки удаляются столбцы ['labels'] , и мы пытаемся предсказать их значения, чтобы оценить модель. Нет ли в тестовых данных подмены понятий? Ведь для тестов мы используем данные, которые прошли функцию label_data(т.е. набор не последовательных баров, выбранных заранее функцией, которая учитывает будущие данные). А далее в тестере есть параметр 10,который, как я понимаю, должен отвечать за то, через сколько баров закрыть сделку, но т.к. у нас не последовательный набор баров, то не понятно, что мы получаем.

Получается следующие вопросы: Где я не прав? Почему для тестов используется не все бары >= FORWARD? И если не использовать все бары >= FORWARD, то как не зная будущего выбирать нужные для предсказания бары?

 Спасибо.

 
Отличная работа, очень интересная, практичная и доступная. Трудно встретить такую хорошую статью с реальными примерами, а не просто теорию без результатов. Большое спасибо за вашу работу и за то, что делитесь с нами, я буду следить за этой серией и с нетерпением ждать ее появления.
 
Eric Ruvalcaba #:
Отличная работа, очень интересная, практичная и доступная. Трудно встретить такую хорошую статью с реальными примерами, а не просто теорию без результатов. Большое спасибо за вашу работу и за то, что делитесь с нами, я буду следить за этой серией и ждать ее с нетерпением.

Спасибо большое! Да, впереди еще много реализаций идей, в том числе и расширение этой с переводом на ONNX)

 
Есть ли какая-то особая причина использовать RandomForestClassifier для выбора признаков и XGBclassifier для классификации модели?
 

Критические недостатки:

  1. Проблемы с предотвращением утечки данных:
    • Функция augment_data() создает серьезные проблемы с утечкой данных между тренировочным и тестовым наборами
    • При аугментации смешиваются данные из разных временных периодов
  2. Ошибки в методологии оценки эффективности:
    • Тестирование модели не учитывает реальные рыночные условия
    • Модель обучается на будущих данных и тестируется на исторических, что недопустимо
  3. Технические проблемы в коде:
    • Функция generate_new_features() создает признаки, но не возвращает их (возвращает исходные данные)
    • В test_model() используется X_test.iloc[i]['close'] , но 'close' может отсутствовать после преобразования признаков
  4. Непоследовательная обработка данных:
    • Данные маркируются дважды разными способами ( markup_data() и label_data() )
    • Результаты кластеризации ( cluster ) не используются в дальнейшем обучении
  5. Методологические проблемы в торговой стратегии:
    • Статический выход через 10 баров вместо адаптивной стратегии
    • Отсутствие управления рисками (кроме простого stop-loss)
    • Нет учета транзакционных издержек (кроме простого спреда)
  6. Неэффективная валидация:
    • Отсутствует валидация модели на исторических данных с учетом временной структуры (walk-forward analysis)
    • Перекрестная валидация применяется к временным рядам без учета их специфики

Рекомендации по улучшению:

  1. Устранить утечку данных — строго разделить данные по времени
  2. Внедрить правильную walk-forward валидацию
  3. Реализовать более реалистичное тестирование с учетом проскальзывания и комиссий
  4. Доработать логику входа/выхода из позиций
  5. Использовать методы, специфичные для временных рядов