Обсуждение статьи "Использование алгоритма машинного обучения PatchTST для прогноза ценовых движений на следующие 24 часа"

 

Опубликована статья Использование алгоритма машинного обучения PatchTST для прогноза ценовых движений на следующие 24 часа:

В этой статье мы применим относительно сложный нейросетевой алгоритм PatchTST, реализованный в 2023 году, для прогнозирования ценовых движений на ближайшие 24 часа. Воспользуемся официальным репозиторием, внесем небольшие изменения, обучим модель для EURUSD и применим ее для формирования будущих прогнозов на языке Python или MQL5.

Впервые я столкнулся с алгоритмом под названием PatchTST, когда начал изучать достижения ИИ, связанные с прогнозами временных рядов на сайте Huggingface.co. Как известно всякому, кто работал с большими языковыми моделями (Large Language Model, LLM), изобретение трансформеров кардинально изменило правила игры в разработке инструментов для обработки естественного языка, изображений и видеоматериалов. А как насчет временных рядов? Разве о них просто забыли? Или большинство исследований просто проводят за закрытыми дверями? Оказывается, есть множество более новых моделей, успешно применяющих трансформеры для прогнозирования временных рядов. В этой статье мы рассмотрим одну из таких реализаций.


Что впечатляет в алгоритме PatchTST, так это быстрота, с которой он обучает модель, и простота использования обученной модели с MQL. Не скрою, я новичок в том, что касается теории нейросетей. Но пройдя через этот процесс и взяв на себя труд реализовать PatchTST на MQL5, как описано в этой статье, я почувствовал, что сделал огромный скачок вперед в изучении и понимании способов разработки, устранения неисправностей, обучения и использования этих сложных нейросетей. Это как взять едва научившегося ходить ребенка и отправить его в профессиональную футбольную команду, ожидая, что он забьет решающий гол в финале Чемпионата мира. 


Автор: Shashank Rai

 
Здравствуйте, не могли бы вы лучше объяснить, что это за бары, которые я вижу в MT5? Хорошо, они имеют два цвета - зеленый и красный, но что они обозначают? Спасибо
 
Federico Benetti #:
Здравствуйте, не могли бы вы лучше объяснить, что это за бары, которые я вижу в MT5? Хорошо, они имеют два цвета - зеленый и красный, но что они обозначают? Спасибо

Зеленый и красный бары генерируются из этого фрагмента кода:

ObjectSetInteger(0, obj_name, OBJPROP_COLOR, close > open ? clrGreen : clrRed);

Зеленый цвет означает, что модель считает, что закрытие будет выше, чем открытие (подобно зеленому бару на графике свечей), в будущем в это время. Красный означает, что закрытие будет ниже открытия для этого часа в будущем.

Например, вчера я тренировал модель для нескольких других пар. Я использовал индикатор, который я показываю на графике, но модель ONNX была обучена для USDJPY и AUDUSD. Сегодня утром я поймал сделку на 15R, основанную на прогнозе модели для USDJPY. Я даже не смотрел на графики, пока все это происходило. Я просто заключил сделку во второй половине дня после завершения обучения и позволил позиции работать в течение ночи (я оплатил своп). По моему опыту, пока что я могу сказать, что в целом можно доверять направлению, которое предсказывает модель. Также обратите внимание на любые закономерности, которые вы можете увидеть, например, большее количество последовательных красных баров на графике указывает на то, что модель считает, что цена пойдет вниз. Большее количество зеленых баров указывает на то, что модель считает, что цена будет расти.

Как видите, я также потерял около 1R для AUDUSD, основываясь на прогнозе модели, так что он не идеален. Вы все еще должны использовать свои другие навыки, такие как зоны спроса и предложения для установки SL и TP, макроэкономические основы, размер позиционирования, управление рисками и т.д. На мой взгляд, использование обученных моделей PatchTST даст вам гораздо больше точности и уверенности в размещении сделок в нужное время суток или, по крайней мере, в нужную сессию (Азия, Лондон или Нью-Йорк). Приведенный ниже скриншот - это оценка проп-фирмы, над которой я работаю в данный момент.

 
Здравствуйте, это потрясающая работа!

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

Я заметил, что вы также пробовали LSTM, какой из двух вариантов оказался лучше?

Вы также пробовали тренировать модель в течение месяца и на разных таймфреймах?

Думаю, мы также могли бы попробовать объединить модели, скажем, на h1 и m15 и получить общий прогноз на этих двух таймфреймах?

Или попробуйте создать скальпер на M1, используя прогноз как фильтр на 10 баров вперед, если 7/10 баров зеленые - покупайте.
Если 5-6/10, то это диапазон и торговать не стоит?

Просто подкидываю идеи :)

Спасибо, что поделились:)
 
Rohin Stirling Dufty #:
Здравствуйте, это потрясающая работа!

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

Я заметил, что вы также пробовали LSTM, какой из двух вариантов оказался лучше?

Вы также пробовали обучать модель в течение месяца и на разных таймфреймах?

Думаю, мы также могли бы попробовать объединить модели, скажем, на h1 и m15 и получить общий прогноз по этим двум?

Или попробовать создать скальпера на M1, используя прогноз как фильтр на 10 баров вперед, если 7/10 баров зеленые - покупать
Если 5-6/10, то это диапазон и торговать не стоит?

Просто подкидываю идеи :)

Спасибо, что поделились:)

Спасибо за интерес и вдумчивые комментарии по поводу торгового алгоритма ML! Я рад, что идея показалась вам интересной. Позвольте мне ответить на ваши вопросы по порядку:

  1. Производительность LSTM против PatchTST:
    • PatchTST оказался более точным в предсказании трендов.
    • LSTM, похоже, лучше работает во время консолидации.
    • В целом, PatchTST показал немного лучший результат в моих тестах.
  2. Период обучения и временные рамки:
    • Я экспериментировал с обучением на разных таймфреймах.
    • По моему опыту, лучше всего работает 1-часовой таймфрейм.
    • Я специально не пробовал тренироваться только на месячном периоде, поскольку более длинные исторические данные обычно дают более надежные модели.
  3. Комбинирование моделей и таймфреймов:
    • Ваша идея сочетать модели на разных таймфреймах (например, H1 и M15) интересна.
    • Но здесь нужно учитывать компромисс: использование более коротких таймфреймов требует большего количества точек данных и увеличивает время обучения в геометрической прогрессии.
    • Например, при использовании 15-минутного таймфрейма для эквивалентного обучения потребуется в 4 раза больше баров, чем при использовании 1-часового таймфрейма, что также увеличивает горизонт прогнозирования в 4 раза.
  4. Стратегия скальпера на M1:
    • Ваше предложение о создании скальпера на таймфрейме M1, использующего прогнозы в качестве фильтра, является креативным.
    • Идея использовать 7/10 зеленых баров для покупок и 5-6/10 для диапазонов - хорошая отправная точка для стратегии.
    • Такой подход может потенциально уменьшить количество ложных сигналов и улучшить время входа.
  5. Текущая работа и будущие направления:
    • В настоящее время я работаю над трехуровневым подходом: a) Одна модель, прогнозирующая ценовое действие на 1-недельном таймфрейме b) Другая модель для 1-дневного таймфрейма c) Третья модель для 5-минутного таймфрейма
    • Все это разные модели, адаптированные к конкретным таймфреймам.
    • Цель состоит в том, чтобы создать более комплексную торговую систему, учитывающую несколько временных горизонтов.
  6. Дополнительные соображения:
    • Объединение прогнозов, полученных с помощью нескольких таймфреймов и моделей, действительно может повысить общую эффективность стратегии.
    • Однако очень важно контролировать сложность и избегать чрезмерной подгонки.
    • Для подтверждения эффективности любого комбинированного подхода необходимо проводить бэктестирование и форвард-тестирование на данных вне выборки.

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

 
Этот код выдает ошибку. У вас есть решение?
# Step 11: Train the model
for epoch in range(num_epochs):
    model.train()
    total_loss = 0
    for batch_X, batch_y in train_loader:
        optimizer.zero_grad()
        batch_X = batch_X.to(device)
        batch_y = batch_y.to(device)

        outputs = model(batch_X)
        outputs = outputs[:, -pred_length:, :4]

        loss = loss_fn(outputs, batch_y)

        loss.backward()
        optimizer.step()
        total_loss += loss.item()

    print(f"Epoch {epoch+1}/{num_epochs}, Loss: {total_loss/len(train_loader):.10f}")
RuntimeError: permute(sparse_coo): number of dimensions in the tensor input does not match the length of the desired ordering of dimensions i.e. input.dim() = 
3 is not equal to len(dims) = 4
 
Все числовые ряды считаются на обычном калькуляторе. При желании в эксельку всё забивается, или индюк для МТ пишется.
 

Спасибо за публикацию такой увлекательной статьи. У меня есть опыт работы с python, но я не так много занимался моделями искусственного интеллекта.

Если я хочу тренироваться на данных M1, а не H1, будет ли это разумным изменением в сценарии обучения? Спасибо.

seq_length = 10080  # 1 week of M1 data

pred_length = 30     # Predict next 30 minutes
 
Bogard_11 #:
Все числовые ряды рассчитываются на обычном калькуляторе. При желании вы можете ввести все в Excel или написать МТ-индуктор.

Алгоритм PatchTST действительно сложнее, чем базовые числовые расчеты, но так и задумано. Если для базовых вычислений можно использовать Excel или более простые инструменты, то нейронные сети, подобные PatchTST, позволяют улавливать сложные закономерности в рыночных данных, которые могут быть не видны при использовании более простых методов анализа. Сила модели заключается в ее способности автоматически изучать эти закономерности на основе исторических данных.

 
ceejay1962 #:

Спасибо за публикацию такой увлекательной статьи. У меня есть опыт работы с python, но я не так много занимался моделями искусственного интеллекта.

Если я хочу тренироваться на данных M1, а не H1, будет ли это разумным изменением в сценарии обучения? Спасибо.

Спасибо за проявленный интерес! Да, эти изменения параметров в принципе будут работать, но есть несколько важных соображений при переходе на данные M1:

1. Объем данных: Обучение на данных M1 длительностью 10080 минут (1 неделя) означает обработку значительно большего количества точек данных, чем в случае с H1. Это приведет к:

  • Значительно увеличит время обучения
  • Потребуется больше памяти
  • Потенциально необходимо GPU-ускорение для эффективного обучения

2. Корректировка архитектуры модели: На шаге 8 обучения модели и шаге 4 кода предсказания, возможно, потребуется настроить другие параметры, чтобы учесть большую входную последовательность:

class Config:
    def __init__(self):
        self.patch_len = 120  # Consider larger patch sizes for M1 data
        self.stride = 120     # Adjust stride accordingly
        self.d_model = 128    # Might need larger model capacity
3. Качество предсказания: Хотя вы получите более детальные предсказания, имейте в виду, что данные M1 обычно содержат больше шума. Возможно, вам захочется поэкспериментировать с различными длинами последовательностей и окнами предсказания, чтобы найти оптимальный баланс.
 
Mahammadjamil Kazi #:
этот код выдает ошибку. у вас есть решение?

Извините, что не ответил раньше - вы смогли разобраться с этим?