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

[Удален]
Rorschach #:
"Ключевая идея проста: обучаем обычную модель машинного обучения, а затем извлекаем из неё математическую формулу. Мы используем полиномиальную регрессию с Ridge-регуляризацией для прогнозирования цены и логистическую регрессию для направления. Затем SymPy превращает коэффициенты в уравнения."

Ну символьная регрессия. Дальше я бы опасался читать такие статьи (опасно для мозга)

самое полезное - просто узнать, что существует символьная регрессия :))

Похоже, Gemini 3 обучали на mql5.com - наверно впервые ИИ выдал код, который сразу откомпилировался и запустился без ошибок.
[Удален]
Aleksey Nikolayev #:
Похоже, Gemini 3 обучали на mql5.com - наверно впервые ИИ выдал код, который сразу откомпилировался и запустился без ошибок.

input bool getprofit = true? :)

https://xbox-dns.ru/ для более приятного использования

XBox DNS — Свободный доступ к играм и сервисам
  • xbox-dns.ru
Решите ошибку 0x80a40401 и обойдите региональные ограничения. Мгновенный доступ к ChatGPT, Spotify и другим играм и сервисам
Maxim Dmitrievsky #:
input bool getprofit = true? :)

if(getprofit) {MessageBox("BABLO?", "BABLO?"); Alert("BABLO!");}

Maxim Dmitrievsky #:
https://xbox-dns.ru/ для более приятного использования
Спасибо, попробую прикрутить к своему линуксу.
Maxim Dmitrievsky #:
input bool getprofit = true? :)
Попросил написать скрипт с максимально полной проверкой допуска к торговле. Показалось что результат заметно основан на примерах из книги Короткого.
[Удален]
Aleksey Nikolayev #:

if(getprofit) {MessageBox("BABLO?", "BABLO?"); Alert("BABLO!");}

На каждом тике :))
[Удален]
Aleksey Nikolayev #:
Попросил написать скрипт с максимально полной проверкой допуска к торговле. Показалось что результат заметно основан на примерах из книги Короткого.
Клауде 4.5 тоже что-то там может. Просил нарисовать на канвасе простую панельку. Почти что справился. 
Aleksey Nikolayev #:

if(load_profit) {MessageBox("BABLO?", "BABLO?"); Alert("BABLO!");}

Спасибо, попробую прикрутить к своему линуксу.

казалось бы, все просто

а ведь нет, не помогает ;)

[Удален]
Maxim Dmitrievsky #:

Фишка разметки в том, что она не look ahead, то есть без заглядывания в будущее. Например, сигналы с помощью любого осциллятора (перекупленность/перепроданность). Потом обобщение.

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

Попытка более подробного описания что было сделано:

https://www.mql5.com/ru/articles/20343

Обучаем нейросети на осцилляторах без подглядывания в будущее
Обучаем нейросети на осцилляторах без подглядывания в будущее
  • 2025.11.24
  • www.mql5.com
В статье описывается подход к разметке сделок с помощью осцилляторов для моделей машинного обучения. Это позволяет избавиться от look ahead bias. Показано, что такая разметка не приводит к переобучению моделей, а стратегии продолжают работать продолжительное время.
[Удален]

Какой эффект может дать "усиление" высокочастотных компонент во временном ряду перед разметкой и обучением, кто-нибудь задумывался? В плане как это будет влиять на саму модель и ее обобщающие св-ва.

Обычно делают наоборот - сглаживают ряд.

Простой пример:

def amplify_high_freq(df: pd.DataFrame, long_period: int = 100, amplification_factor: float = 2.0) -> pd.DataFrame:
    """
    Усиливает высокочастотные компоненты в столбце 'close'
    путем добавления к цене усиленных остатков от долгосрочного EMA.

    :param df: Исходный DataFrame с ценами (индекс - время, столбец - 'close').
    :param long_period: Период для долгосрочного EMA (низкочастотный компонент).
    :param amplification_factor: Коэффициент усиления высокочастотных остатков (k > 1).
    :return: DataFrame с новым столбцом 'close_amplified'.
    """
    if 'close' not in df.columns:
        raise ValueError("DataFrame должен содержать столбец 'close'.")
        
    # 1. Вычисление низкочастотной компоненты (долгосрочное сглаживание)
    # Используем EMA, так как оно лучше отслеживает тренд, чем SMA.
    df['EMA_long'] = df['close'].ewm(span=long_period, adjust=False).mean()

    # 2. Выделение высокочастотной компоненты (Остатки)
    # Остаток = Цена - Тренд
    df['High_Freq_Component'] = df['close'] - df['EMA_long']

    # 3. Применение коэффициента усиления и создание нового ряда
    # P_amplified = P + k * (P - EMA_long)
    df['close_amplified'] = df['close'] + amplification_factor * df['High_Freq_Component']

    # Удаляем временные столбцы для чистоты
    return df.drop(columns=['EMA_long', 'High_Freq_Component']).dropna()

До и после амплификации:

Можно усиливать разные компоненты и посмотреть как это влияет на обучение. Можно не через МА.