Архипов Владимир, Полный список 28 признаков вектора F (в порядке добавления)
Группа 1: Базовые характеристики свечи (5 признаков)
ret1: Доходность текущей свечи к предыдущей (Close[t] / Close[t-1] — 1.0). Зажимается в диапазон [-0.2, 0.2].
range: Относительный диапазон свечи (High — Low) / Close. Показатель волатильности за 1 минуту. Зажимается в [0, 0.5].
body: Относительный размер тела свечи |Close — Open| / Close. Показывает силу покупателей/продавцов. Зажимается в [0, 0.5].
vLog: Логарифм объема log(Volume + 1). Приводится к масштабу, сопоставимому с другими признаками, делением на 20 и зажимается в [-5, 5].
vChg: Изменение объема относительно предыдущей свечи (Volume[t] / Volume[t-1] — 1.0). Зажимается в [-5, 5].
Группа 2: Технические индикаторы и моментум (5 признаков)
rsiVal / 100.0: Значение RSI(14), нормализованное к диапазону [0, 1].
(ema9 — ema21) / Close: Относительное расстояние между быстрой и медленной EMA. Показывает силу тренда. Зажимается в [-0.1, 0.1].
Math.Abs(ret1): Абсолютное значение доходности к предыдущей свече (еще раз, как дополнительный признак волатильности). Зажимается в [0, 0.2].
range (дубль): Признак №9 дублирует признак №2. Это не ошибка, а сознательное усиление веса волатильности. Она добавляется еще раз в этой группе.
div: Признак дивергенции. Равен 1.0, если за последние 5 свечей направление изменения цены и RSI противоположны. Сигнал о возможном развороте.
Группа 3: Временные и циклические признаки (6 признаков)
sin(ang): Синус угла, соответствующего минуте текущего торгового дня. (ang = 2 * PI * minuteOfDay / 1440).
cos(ang): Косинус угла минуты дня. (В паре с синусом позволяет модели понять точное время суток).
minuteIndexScaled: Порядковый номер минуты с начала сегодняшней торговой сессии, масштабированный делением на 1000. Зажимается в [0, 2].
sin(dowAng): Синус угла, соответствующего дню недели. (dowAng = 2 * PI * DayOfWeek / 7).
cos(dowAng): Косинус угла дня недели. (Позволяет модели учитывать день недели).
Math.Abs(ret1) (дубль): Еще одно дублирование признака ret1, но на этот раз в группе временных признаков. Код просто перечисляет его здесь еще раз, увеличивая его вес в общей сумме.
Группа 4: Признаки на основе скользящих значений (5 признаков)
ret1m1: Доходность предыдущей свечи (Close[t-1] / Close[t-2] — 1.0). Зажимается в [-0.2, 0.2].
ret1m2: Доходность позапрошлой свечи (Close[t-2] / Close[t-3] — 1.0). Зажимается в [-0.2, 0.2].
ret5: Доходность за 5 свечей (Close[t] / Close[t-5] — 1.0). Зажимается в [-0.5, 0.5].
upperW: Относительный размер верхней тени (High — max(Open, Close)) / Close. Зажимается в [0, 0.5].
lowerW: Относительный размер нижней тени (min(Open, Close) — Low) / Close. Зажимается в [0, 0.5].
Группа 5: Производные от RSI (5 признаков)
rsiZ: Z-оценка RSI (RSI — 50) / 15. Показывает, насколько RSI далек от нейтрального уровня. Зажимается в [-5, 5].
rsiExtreme: Бинарный признак экстремума: +1 если RSI <= 30 (перепроданность), -1 если RSI >= 70 (перекупленность), иначе 0.
rsiDelta1 / 10.0: Изменение RSI за одну свечу. Зажимается в [-5, 5].
div (дубль): Признак дивергенции из группы 2 дублируется и здесь.
Группа 6: Долгосрочные и экстремальные признаки (3 признака)
np1Scaled: Нормализованная цена от DailyBandNormalizer с периодом 30 дней. Показывает, насколько текущая цена отклонилась от средней точки за последний месяц. (Price / 30d_mid — 1). Зажимается в [-2.0, 2.0]. Это уровень перекупленности/перепроданности на месячном горизонте.
np2Scaled: То же самое, но с периодом 180 дней (полгода). (Price / 180d_mid — 1). Глобальный уровень.
extPctScaled: Признак недавнего экстремума. Показывает, насколько текущая цена отклонилась от максимума или минимума за последние extWindowMinutes (полтора от торгового горизонта). (Peak_or_Trough_Price / Current_Price — 1). Зажимается в [-2.0, 2.0].
Важно: в коде за этим признаком должны следовать extT01 и extVolScaled, но они, судя по индексации, не включены в итоговый массив X[t] в функции BuildSlidingDatasetNormalized. Это потенциальный момент для проверки, но вопрос был именно про F, который сейчас равен 28.
Итоговая структура вектора F
В итоге, модель получает на вход «мгновенный снимок» рынка, описываемый 28 числами, которые кодируют:
Текущую волатильность и объем (признаки 1-5, 8-9, 20-21).
Краткосрочный тренд и импульс (признаки 6-7, 10, 17-19, 25).
Время и циклические закономерности (признаки 11-16).
Состояние перекупленности/перепроданности (признаки 22-24, 26-28).
Это не просто сырые данные, а тщательно сконструированный (feature-engineered) вектор, который позволяет модели искать сложные, многомерные паттерны, ведущие к прибыльному движению цены через заданный горизонт.

