Как по мне - это "пальцем в небо"
Возьмите для примера среднюю вероятность за предыдущих 20 баров (этих 0 и 1) и сравните насколько отличается эта "средняя вероятность" с текущим баром по всей выборке
* и если честно мне пока не понятно где и для каких задач вы будете применять это? (это же всё равно что угадать орёл или решка, или что выпадет на кубике от 1 до 6 - в таких случаях очень трудно добиться положительного матожидания)
Итак задачка такая. Есть набор наблюдений со случайной частотой в выборке, однако частота эта имеет временную шкалу, и каждое наблюдение принимает значение 0 или 1.
Если посчитать в процентном соотношении, то вероятность получения единицы, допустим 40%, а нуля соответственно 60%.
Задача - определить, сохраниться эта пропорция дальше, или она существенно изменится. Или, допустим, может сильно колебаться на длительных интервалах.
Для решения данной задачи можно использовать анализ временных рядов. Один из подходов заключается в использовании модели ARIMA (авторегрессия-скользящее среднее). ARIMA - это модель, которая используется для прогнозирования временных рядов, она основывается на предположении, что временной ряд является комбинацией тренда, цикла и случайной составляющей.
В вашем случае, можно рассматривать наблюдения как временной ряд, где каждое наблюдение принимает значение 0 или 1. С помощью ARIMA можно построить модель для прогнозирования значений в будущем и проверить, сохранится ли пропорция 0 и 1, или она изменится. ARIMA позволяет оценить как тренд, так и сезонность и учитывать корреляцию между соседними значениями ряда.
Пример кода для ARIMA:
import pandas as pd import numpy as np from statsmodels.tsa.arima_model import ARIMA # Создаем временной ряд из наблюдений obs = pd.Series(np.random.binomial(1, 0.4, size=1000)) # Разделяем выборку на обучающую и тестовую train = obs[:800] test = obs[800:] # Определяем параметры модели ARIMA model = ARIMA(train, order=(1, 0, 1)) # order=(p, d, q) - параметры модели ARIMA # Обучаем модель на обучающей выборке model_fit = model.fit(disp=0) # Прогнозируем значения на тестовой выборке y_pred = model_fit.forecast(len(test))[0] # Считаем метрику качества mse = np.mean((y_pred - test)**2) print('MSE:', mse)
Если mse полученного прогноза большой, то это может указывать на то, что пропорция 0 и 1 может изменяться в будущем. Если же mse маленький, то можно сделать вывод, что пропорция 0 и 1 остается примерно одинаковой во времени.
Также можно использовать другие методы анализа временных рядов, например, моделирование волн с помощью вейвлет-анализа или моделирование с помощью рекуррентных нейронных сетей.
Ответ сгенерирован ChatGPT.
Для решения данной задачи можно использовать анализ временных рядов. Один из подходов заключается в использовании модели ARIMA (авторегрессия-скользящее среднее). ARIMA - это модель, которая используется для прогнозирования временных рядов, она основывается на предположении, что временной ряд является комбинацией тренда, цикла и случайной составляющей.
В вашем случае, можно рассматривать наблюдения как временной ряд, где каждое наблюдение принимает значение 0 или 1. С помощью ARIMA можно построить модель для прогнозирования значений в будущем и проверить, сохранится ли пропорция 0 и 1, или она изменится. ARIMA позволяет оценить как тренд, так и сезонность и учитывать корреляцию между соседними значениями ряда.
Пример кода для ARIMA:
Если mse полученного прогноза большой, то это может указывать на то, что пропорция 0 и 1 может изменяться в будущем. Если же mse маленький, то можно сделать вывод, что пропорция 0 и 1 остается примерно одинаковой во времени.
Также можно использовать другие методы анализа временных рядов, например, моделирование волн с помощью вейвлет-анализа или моделирование с помощью рекуррентных нейронных сетей.
Ответ сгенерирован ChatGPT.
А каковы результаты предложенного вами метода?
Это пример использования MSE для решения задач прогнозирования временных рядов, анализа сигналов и других задач, где необходимо прогнозировать числовое значение
Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий
Разговор с искусственным интеллектом (ИИ) о форексе.
Lilita Bogachkova, 2023.03.24 22:18
Продолжая изучать модель глубокого обучения, написанного ChatGPT, я дам краткое описание модели и покажу результаты тестирования наиболее успешного результата обучения на данный момент с использованием различных валютных пар в тесте.
Модель представляет собой нейронную сеть, которая состоит из нескольких слоев и используется для решения задачи регрессии.
Алгоритм применения этой нейронной сети заключается в следующем:
- Задается структура модели, включающая в себя сверточные слои, слои пакетной нормализации, плотные слои, слои LSTM, регуляризацию и отсев нейронов.
- Модель компилируется с помощью функции потерь mean squared error (MSE), оптимизатора Adam и метрик MSE и mean absolute error (MAE).
- Модель готова к обучению на наборе данных, представленном в виде массивов numpy.
Стоит отметить, что данная модель была реализована с использованием фреймворка TensorFlow и библиотеки Keras. Она может быть использована для решения задач прогнозирования временных рядов, анализа сигналов и других задач, где необходимо предсказать числовую величину.
Первые три слоя - это сверточные слои (Conv1D) с функцией активации ReLU. Они обрабатывают входные данные с размерностью (window_size_value, 1) и извлекают признаки из исходных данных. После каждого сверточного слоя применяется слой нормализации данных (BatchNormalization).
Следующие три слоя - это полносвязные слои (Dense), которые применяются для обработки выходных данных сверточных слоев. После первого полносвязного слоя применяется слой отсева (Dropout) с коэффициентом 0.2, который случайным образом выключает некоторые нейроны для предотвращения переобучения. Последний полносвязный слой имеет один нейрон и использует линейную функцию активации.
Следующие два слоя - это рекуррентные слои LSTM. Они предназначены для обработки последовательных данных и позволяют учитывать контекст из прошлых временных шагов. После каждого LSTM слоя также применяется слой нормализации данных (BatchNormalization) и слой отсева (Dropout) с коэффициентом 0.2.
Последние два слоя - это полносвязные слои с регуляризацией (kernel_regularizer и bias_regularizer) и случайной инициализацией весов (kernel_initializer). Первый полносвязный слой имеет размерность filters_min_value и использует функцию активации ReLU. После него применяется слой отсева (Dropout) с коэффициентом 0.5. Последний полносвязный слой имеет один нейрон и использует линейную функцию активации.
Код использует два callback-объекта в обучении модели:
-
LearningRateScheduler - позволяет динамически изменять скорость обучения модели в зависимости от номера эпохи. В данном случае скорость обучения определяется лямбда-функцией, которая увеличивает скорость обучения в 10 раз каждые 50 эпох. Это помогает ускорить обучение в начале процесса и уменьшить скорость в конце, чтобы достичь более точных результатов.
-
EarlyStopping - позволяет остановить обучение модели раньше, если модель перестает улучшаться на проверочных данных. Это помогает предотвратить переобучение и ускорить процесс обучения. Монитором, на основе которого будет приниматься решение о прекращении обучения, является val_loss , который отслеживает значение функции потерь на проверочных данных. patience_value определяет количество эпох, которые необходимо дождаться, чтобы убедиться в том, что модель не улучшается, прежде чем остановить обучение. Параметр restore_best_weights=True позволяет сохранить веса модели, которые достигли наилучших результатов на проверочных данных, чтобы использовать их в дальнейшем.
Результаты теста:
Верхний график — фактические данные, нижний график — прогнозные данные AUDCAD
Pearson Correlation coefficient: 0.95, Average correlation, window size 24: 0.74
Верхний график — фактические данные, нижний график — прогнозные данные AUDNZD
Pearson Correlation coefficient: 0.95, Average correlation, window size 24: 0.73
Верхний график — фактические данные, нижний график — прогнозные данные AUDCHF
Pearson Correlation coefficient: 0.95, Average correlation, window size 24: 0.74
Верхний график — фактические данные, нижний график — прогнозные данные AUDJPY
Pearson Correlation coefficient: 0.95, Average correlation, window size 24: 0.75
Верхний график — фактические данные, нижний график — прогнозные данные AUDUSD
Pearson Correlation coefficient: 0.95, Average correlation, window size 24: 0.75
Верхний график — фактические данные, нижний график — прогнозные данные CHFJPY
Pearson Correlation coefficient: 0.95, Average correlation, window size 24: 0.76
Верхний график — фактические данные, нижний график — прогнозные данные EURAUD
Pearson Correlation coefficient: 0.94, Average correlation, window size 24: 0.73
Верхний график — фактические данные, нижний график — прогнозные данные EURCAD
Pearson Correlation coefficient: 0.94, Average correlation, window size 24: 0.70
Верхний график — фактические данные, нижний график — прогнозные данные EURCHF
Pearson Correlation coefficient: 0.94, Average correlation, window size 24: 0.68
Верхний график — фактические данные, нижний график — прогнозные данные EURGBP
Pearson Correlation coefficient: 0.95, Average correlation, window size 24: 0.71
Верхний график — фактические данные, нижний график — прогнозные данные EURJPY
Pearson Correlation coefficient: 0.94, Average correlation, window size 24: 0.76
Верхний график — фактические данные, нижний график — прогнозные данные EURUSD
Pearson Correlation coefficient: 0.95, Average correlation, window size 24: 0.73
Верхний график — фактические данные, нижний график — прогнозные данные GBPAUD
Pearson Correlation coefficient: 0.94, Average correlation, window size 24: 0.76
Верхний график — фактические данные, нижний график — прогнозные данные GBPCHF
Pearson Correlation coefficient: 0.95, Average correlation, window size 24: 0.71
Верхний график — фактические данные, нижний график — прогнозные данные GBPJPY
Pearson Correlation coefficient: 0.95, Average correlation, window size 24: 0.75
Верхний график — фактические данные, нижний график — прогнозные данные GBPUSD
Pearson Correlation coefficient: 0.95, Average correlation, window size 24: 0.74
Верхний график — фактические данные, нижний график — прогнозные данные NZDUSD
Pearson Correlation coefficient: 0.94, Average correlation, window size 24: 0.74
Верхний график — фактические данные, нижний график — прогнозные данные USDCAD
Pearson Correlation coefficient: 0.94, Average correlation, window size 24: 0.72
Верхний график — фактические данные, нижний график — прогнозные данные USDCHF
Pearson Correlation coefficient: 0.95, Average correlation, window size 24: 0.72
Верхний график — фактические данные, нижний график — прогнозные данные USDJPY
Pearson Correlation coefficient: 0.95, Average correlation, window size 24: 0.76
Как по мне - это "пальцем в небо"
Возьмите для примера среднюю вероятность за предыдущих 20 баров (этих 0 и 1) и сравните насколько отличается эта "средняя вероятность" с текущим баром по всей выборке
* и если честно мне пока не понятно где и для каких задач вы будете применять это? (это же всё равно что угадать орёл или решка, или что выпадет на кубике от 1 до 6 - в таких случаях очень трудно добиться положительного матожидания)
Понятно, что задача не понятна :) Не нужно сравнивать среднее значение с элементом, а нужно сравнивать набор средних значений с одним набором. По сути нужно определить, похожи ли в целом средние значения событий. Если они похожи, то и дальше могут быть похожи, а если это единоразовые явления, скопившиеся в паре измерений - выбросы, то дальше их может не быть.
Представьте задачу так - есть Т-образный перекресток, к которому подъезжают водители и они поворачивают то направо (1), то налево (0). Вот мы каждый день считаем в течении месяца среднее значение. Показания каждый день колеблются, но не существенно, есть факторы которые не известны, но они цикличные - допустим в пятницу больше поворачивают налево - это дорого из города, но не зимой, а в среду проходит товарный поезд через весь город прям на завод, поэтому люди едут в объезд и поворачивают направо. Причина для наблюдателя не понятна, но будет некая закономерность. И вдруг ремонт дороги, что пересекает дорога направо и весь месяц увеличивается поток машин налево. Ремонт дорог - дело редкое в регионах и длился процесс два месяца - после ремонта решили по плану трубы поменять, что шли как раз вдоль полотна или даже под ним. За весь период наблюдения поворот направо был осуществлен в 65%, а налево 35%, при этом в месяцы ремонта дороги - налево свернуло 10%, а направо 90%.
Так вот, нужно понять, видимо, были ли выбросы - сверх редкие события, или это не выбросы, а периодически сильные отклонения, как часто они происходят, что бы попасться на следующем временном интервале (или на 3х - чем дольше стабильность - тем лучше), а может и другие умозаключения, которые помогут определить вероятность сильного изменения пропорции.
Сразу не написал в задаче, но надо найти отрицательную величину изменения, что это - есть эталон и мы определяем дельту, так вот эта дельта не должна стать отрицательной на новых данных. К примеру единиц 36% в выборке, а эталон 30%, значит положительное значение дельты 6%, если значение дельты будет ниже нуля, то это негативная ситуация, которую надо идентифицировать.
Поэтому колебания могут быть показателей, но есть опасный придел, который и нужно детектировать.
Если что не понятно с примером - спрашиваете - к сожалению, я часто недостаточно детально объясняю.
Это пример использования MSE для решения задач прогнозирования временных рядов, анализа сигналов и других задач, где необходимо прогнозировать числовое значение
Нужно научить модель работать с непохожими наблюдениями, т.е. разными времянными рядами.
Поэтому и стоит вопрос в описательных метриках для аккумуляции знания о тенденциях и их характеристиках.
К тому же, прогноз нам потребуеся за сто баров вперед - тут простые модельки не справятся, думаю. А для сложных нет факторов\предикторов.
Уважаемые участники форума!
Передо мной встала задача из области статистики и прогнозирования. Прошу помочь идеями и желательно кодом!
Итак задачка такая. Есть набор наблюдений со случайной частотой в выборке, однако частота эта имеет временную шкалу, и каждое наблюдение принимает значение 0 или 1.
Если посчитать в процентном соотношении, то вероятность получения единицы, допустим 40%, а нуля соответственно 60%.
Задача - определить, сохраниться эта пропорция дальше, или она существенно изменится. Или, допустим, может сильно колебаться на длительных интервалах.
Как я представляю сейчас себе решение:
1. Разбиваю все данные (выборку) на подвыборки с равным интервалом (по числу событий или времени - пока не важно).
2. Оцениваю процент единиц на каждом интервале. Сохраняю результаты в отдельный массив (arr_Chisla).
3. Рассчитываю статистические описательные метрики для полученной выборки.
4. На базе метрик из пункта 3 строю модель с помощью машинного обучения.
Так вот, хотелось бы больше идей по описательной статистике, нежели есть в стандартных библиотеках MQL5.
Что я отобрал, показываю в виде функции ниже
Какие ещё есть идеи полезных метрик?
Доброе время суток!
Здравствуйте.
Такой длины выборки не будет. Выборка изначальная может быть разной длины.
Смысл в том, что бы работать с разными подобными выборками, поэтому выборка сворачивается до процентного представления.
Но даже выборку в процентах я подавать не хочу на вход, так как в других выборках это будут совсем другие - не сопоставимые данные.Уважаемые участники форума!
Передо мной встала задача из области статистики и прогнозирования. Прошу помочь идеями и желательно кодом!
Итак задачка такая. Есть набор наблюдений со случайной частотой в выборке, однако частота эта имеет временную шкалу, и каждое наблюдение принимает значение 0 или 1.
Если посчитать в процентном соотношении, то вероятность получения единицы, допустим 40%, а нуля соответственно 60%.
Задача - определить, сохраниться эта пропорция дальше, или она существенно изменится. Или, допустим, может сильно колебаться на длительных интервалах.
Как я представляю сейчас себе решение:
1. Разбиваю все данные (выборку) на подвыборки с равным интервалом (по числу событий или времени - пока не важно).
2. Оцениваю процент единиц на каждом интервале. Сохраняю результаты в отдельный массив (arr_Chisla).
3. Рассчитываю статистические описательные метрики для полученной выборки.
4. На базе метрик из пункта 3 строю модель с помощью машинного обучения.
Так вот, хотелось бы больше идей по описательной статистике, нежели есть в стандартных библиотеках MQL5.
Что я отобрал, показываю в виде функции ниже
Какие ещё есть идеи полезных метрик?
Почитайте про точный тест Фишера. Для его расчёта нужна функция CDF гипергеометрического распределения. Она есть в стат. библиотеке MQL5, но иногда считает с ошибками (если не исправили).
Здравствуйте.
Такой длины выборки не будет. Выборка изначальная может быть разной длины.
Смысл в том, что бы работать с разными подобными выборками, поэтому выборка сворачивается до процентного представления.
Но даже выборку в процентах я подавать не хочу на вход, так как в других выборках это будут совсем другие - не сопоставимые данные.Я даже начинаю догадываться зачем Вам "это" ... :) Но без выборки трудно предложить конкретное решение. Решений может быть 100500 и предлагаете их здесь все предлагать чтобы потом был сделан соответствующий выбор?
В качестве альтернативы можно взять тот же столбец 5584 из выборки train.csv. Если принимается, то попробую на ней что-нибудь поколдовать.
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Уважаемые участники форума!
Передо мной встала задача из области статистики и прогнозирования. Прошу помочь идеями и желательно кодом!
Итак задачка такая. Есть набор наблюдений со случайной частотой в выборке, однако частота эта имеет временную шкалу, и каждое наблюдение принимает значение 0 или 1.
Если посчитать в процентном соотношении, то вероятность получения единицы, допустим 40%, а нуля соответственно 60%.
Задача - определить, сохраниться эта пропорция дальше, или она существенно изменится. Или, допустим, может сильно колебаться на длительных интервалах.
Как я представляю сейчас себе решение:
1. Разбиваю все данные (выборку) на подвыборки с равным интервалом (по числу событий или времени - пока не важно).
2. Оцениваю процент единиц на каждом интервале. Сохраняю результаты в отдельный массив (arr_Chisla).
3. Рассчитываю статистические описательные метрики для полученной выборки.
4. На базе метрик из пункта 3 строю модель с помощью машинного обучения.
Так вот, хотелось бы больше идей по описательной статистике, нежели есть в стандартных библиотеках MQL5.
Что я отобрал, показываю в виде функции ниже
Какие ещё есть идеи полезных метрик?