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

[Удален]
Ivan Butko #:

Блин, шагнули вперёд

3 года периодического зад....ва

и это на питоне, на MQL дольше писать, потому что мало готового

Если даже крутого МОшника попросишь - он не решит задачу, потому что сильно специфическая. Оптимизаторшики тем более.

То есть они вообще не в курсе как к этому подойти. Начнут обучать всякие глубокие нейросети, с известным исходом. Всякие обучения с подкреплением, оптимиздация всего что движется, миллион признаков, вот это вот чушь вся.
Maxim Dmitrievsky #:

3 года периодического зад....ва

и это на питоне, на MQL дольше писать, потому что мало готового

Если даже крутого МОшника попросишь - он не решит задачу, потому что сильно специфическая. Оптимизаторшики тем более.

То есть они вообще не в курсе как к этому подойти. Начнут обучать всякие глубокие нейросети, с известным исходом. Всякие обучения с подкреплением, оптимиздация всего что движется, миллион признаков, вот это вот чушь вся.
Точно, пробовал разбирать RL. Всё сводится к одному: суть q-таблицы - это запоминание истории, и навешивание формул сверху выглядит как попытка «быстрее» запомнить. Отлично работает стационарно, когда надо научить болванку ходить прямо и по лестнице. 


Если ты ещё не завернул в коммерческую тайну: как объясняется роботоспособность твоей модели? Если даже сотни нейронов в 7 слоёв не справляются
[Удален]
Ivan Butko #:
Точно, пробовал разбирать RL. Всё сводится к одному: суть q-таблицы - это запоминание истории, и навешивание формул сверху выглядит как попытка «быстрее» запомнить. Отлично работает стационарно, когда надо научить болванку ходить прямо и по лестнице. 


Если ты ещё не завернул в коммерческую тайну: как объясняется роботоспособность твоей модели? Если даже сотни нейронов в 7 слоёв не справляются
К поиску паттернов сводится. Любое кол-во признаков, в n-мерном пространстве, будет содержать n кол-во паттернов. Потом проверка их на новых данных и запрет торговать там, где паттерны плохие.

Столько-то паттернов классифицируются меткой 0, столько-то 1. Они должны отличаться "серьезно", чтобы модель их классифицировала с низкой ошибкой. И иметь мало противоречий внутри класса, то есть мало ошибочно размеченных.
[Удален]
Кластеризация допустим чё делает. Она размечает группы наблюдений, которые максимально компактно расположены в одном кластере от других кластеров, которые максимально далеко расположены друг от друга и тоже имеют компактные представления других наюлюдений. Для модели это хорошо, потому что есть расстояние между группами, они слабо пересекаются или вообще не пересекаются, значит модель не переобучается. Эти группы можно рассматривать как отдельные паттерны. Потом нужно проверять как каждая группа предсказывает следующие наблюдения. Выбирать лучшие, остальные фильтровать или не разрешать торговлю. 

Допустим взять среднее прогнозов по каждому кластеру на n баров вперёд и стандартное отклонение. Если среднее смещено в сторону покупок или продаж - это хороший кластер. Но там все равно будет какая-то фракция плохих примеров. Если 50/50, то плохой кластер. Надо хотя бы 70/30.

Потом берешь второй кластер, который максимально далеко от этого и смотришь в нем. Там должен быть перевес в другую сторону.

Вот тебе типа ТС с сигналами на покупку и продажу.

На практике нужно делать дополнительные усилия, потому что в общем случае границы между кластерами обычно размыты и предсказания близки к 50/50.
Очень инновационные идеи。 Можете ли вы продолжать писать статьи об этом методе кластерной корекции тегов, например, кластеры второго уровня, которые еще не очень понятны?
[Удален]
bestvishes #:
Очень инновационные идеи。 Можете ли вы продолжать писать статьи об этом методе кластерной корекции тегов, например, кластеры второго уровня, которые еще не очень понятны?

Пока не готов полностью описывать свой подход. Вот пример разделения датасета на группы, где наблюдения с метками 0 и 1 будут максимально далеко расположены в пространстве признаков, например по Эвклидовому расстоянию.

Можно развить эту тему и написать на основе этого что-нибудь интересное.

import numpy as np
from sklearn.cluster import KMeans
from sklearn.metrics import pairwise_distances

def filter_samples_by_clusters(X, y, n_clusters=2, threshold_percentile=20, min_distance_percentile=80):
    # Разделяем данные на два класса
    X_0 = X[y == 0]
    X_1 = X[y == 1]
    
    # Применяем K-means к каждому классу отдельно
    kmeans_0 = KMeans(n_clusters=n_clusters, random_state=42).fit(X_0)
    kmeans_1 = KMeans(n_clusters=n_clusters, random_state=42).fit(X_1)
    
    # Получаем центроиды кластеров
    centroids_0 = kmeans_0.cluster_centers_
    centroids_1 = kmeans_1.cluster_centers_
    
    # Вычисляем расстояния до центроидов своего класса
    distances_0 = pairwise_distances(X_0, centroids_0).min(axis=1)
    distances_1 = pairwise_distances(X_1, centroids_1).min(axis=1)
    
    # Вычисляем расстояния до центроидов противоположного класса
    distances_0_to_1 = pairwise_distances(X_0, centroids_1).min(axis=1)
    distances_1_to_0 = pairwise_distances(X_1, centroids_0).min(axis=1)
    
    # Оставляем только те точки, которые:
    # 1. Близки к своим центроидам
    # 2. Далеки от центроидов другого класса
    threshold_0 = np.percentile(distances_0, threshold_percentile)
    threshold_1 = np.percentile(distances_1, threshold_percentile)
    
    min_dist_0 = np.percentile(distances_0_to_1, min_distance_percentile)
    min_dist_1 = np.percentile(distances_1_to_0, min_distance_percentile)
    
    good_indices_0 = np.where(y == 0)[0][
        (distances_0 <= threshold_0) & 
        (distances_0_to_1 >= min_dist_0)
    ]
    good_indices_1 = np.where(y == 1)[0][
        (distances_1 <= threshold_1) & 
        (distances_1_to_0 >= min_dist_1)
    ]
    
    # Объединяем индексы
    good_indices = np.concatenate([good_indices_0, good_indices_1])
    
    return good_indices
Улучшения вне выборки - это очень сложная вещь, трудно найти удовлетворительные идеи по всей сети, чувствовать, что вы делитесь, это замечательно, спасибо.
Maxim Dmitrievsky #:
Не смотрел, afk
Средняя сделка в районе 30 пунктов на евро, на флэтовых парах чуть меньше 
Можно скрин со страницы статистики? Интересно другие оценки узнать: какая длительность обучающего и ООС участков например. Ну и все остальное для сравнения.
[Удален]
Forester #:
Можно скрин со страницы статистики? Интересно другие оценки узнать: какая длительность обучающего и ООС участков например. Ну и все остальное для сравнения.

Не интересно 

модели разные, статистики разные, инструменты разные. Ноль полезной инфы

Интересны способы их получения.

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

Пока не готов полностью описывать свой подход. Вот пример разделения датасета на группы, где наблюдения с метками 0 и 1 будут максимально далеко расположены в пространстве признаков, например по Эвклидовому расстоянию.

Можно развить эту тему и написать на основе этого что-нибудь интересное.

    data = filter_samples_by_clusters(pr, n_clusters=2, threshold_percentile=100, min_distance_percentile=90)

тыдыщ, евро, обучение до 21 года