Обсуждение статьи "Угловой анализ ценовых движений: гибридная модель прогнозирования финансовых рынков" - страница 2

В который раз, мышки плакали, кололись, какались, но с упорством продолжали жрать кактус! ;)

Вот вам более менее доработанный шаблон Ганна для МТ4, код открытый.

https://disk.yandex.ru/d/7YhmKzcqttnQnQ

При правильной настройке все что описал ТС, видно заранее за несколько часов, что или тренд или коррекция подходят к концу. Плюсом еще и время конца тренда можно заранее посчитать. 

Как правильно настраивать, каждый разбирается сам. 

P.S. - у Ганна в трудах всё есть (математика моделей), ничего нового вы не найдете и не изобретете, 2х2 всегда будет 4. Лучше углубитесь в изучение первоисточника. 

Gann_Box_144_test_FULL_NULL_NEN_SQH4-----.mq4
Gann_Box_144_test_FULL_NULL_NEN_SQH4-----.mq4
  • disk.yandex.ru
Посмотреть и скачать с Яндекс Диска

золото

Там еще одно подтверждение в шаблоне есть, что тренд затухал и стоило ждать реакцию. 

Отсутствует защита от возврата None функцией `copy_rates_range`. Если символ, таймфрейм или история недоступны, функция `mt5.copy_rates_range` возвращает `None`, а `pd.DataFrame(None)` выдает бесполезную ошибку.
Параметр `shuffle=True` в `train_test_split` приводит к утечке данных. Каждая строка признака имеет 14 из 15 значений `angle_j`, совпадающих со значениями соседней строки (из-за сильно перекрывающихся скользящих окон), при этом данные упорядочены по времени. Перемешивание распределяет почти дублирующиеся окна между обучающей и тестовой выборками, поэтому отчетная точность/RMSE будут выглядеть гораздо лучше, чем фактическая производительность модели вне выборки.
Расхождение «на один» между окном признака и его меткой, как в `prepare_features`, так и в (дублируемой) логике в `backtest_signals`: `window = filtered_df.iloc[i-lookback:i]` охватывает бары от `i-lookback` … i-1, но целевое значение считывается из filtered_df.iloc[i]['future_direction_24'] / future_change_pct_24 — что описывает движение от бара i (а не i-1) до i+24. Таким образом, current_price и все характеристики, выведенные из окна, привязаны на один бар позади фактического объекта прогнозирования на протяжении всего обучения и бэктестинга.
predict_future_movement не использует такую же привязку. Он использует angular_df.tail(lookback) и рассматривает последний бар этого окна как «текущую цену» для сигнала в реальном времени — но, согласно пункту №3, модель была обучена с использованием «текущей цены», которая на один бар опережает точку привязки истинной метки. Прогнозы в реальном времени и метки обучения рассчитываются не по одним и тем же правилам.
Возможно деление на ноль в create_angular_features: если time_range (max time − min time) равно 0 (например, из-за дубликатов или некорректных временных меток), scale_factor принимает значение inf/nan и распространяется на все углы.
Формат массива, возвращаемого CatBoostClassifier.predict() — в зависимости от установленной версии catboost он может возвращаться как (n, 1) вместо (n,). Он передаётся напрямую в accuracy_score/classification_report без проверки на изменение формы, поэтому стоит проверить его в соответствии с той версией, которая в итоге будет установлена.
Незначительная проблема: вызовы в стиле figsize=(750/100, 750/200) приводят к нецелым размерам в дюймах (7,5×3,75; 7,5×6,0; 7,5×5,0) — это не является ошибкой, просто необычный способ указания размера фигуры.

Файлы: