preview
Нелинейные признаки OHLC из эллиптических кривых

Нелинейные признаки OHLC из эллиптических кривых

MetaTrader 5Торговые системы |
143 0
Yevgeniy Koshtenko
Yevgeniy Koshtenko

Вы строите модель направления следующей дневной свечи EURUSD и сталкиваетесь с практической проблемой: классический набор TA-признаков (returns, MA/RSI, волатильность, свечные пропорции) даёт ограниченный прирост, а попытки его усложнить ведут к переобучению и низкой переносимости между режимами рынка. Нужен новый, детерминированно вычисляемый из OHLC источник признаков, который даёт нелинейное представление цены, легко интегрируется в существующий ML-пайплайн и проверяется честной временной валидацией по AUC.


В этой статье мы решаем именно эту задачу. Метод прост в формулировке: маппим OHLC в точки эллиптической кривой secp256k1 через SHA-256 + try-and-increment, извлекаем из точек и процесса маппинга метаданные (nonce, биты x, групповая арифметика Open+Close/High+Low), объединяем их с классическими TA-признаками и тестируем добавочную ценность в CatBoost на временном разбиении. Эксперимент на 2000 свечах EURUSD D1 даёт измеримый результат (AUC на тесте = 0,6508), при этом сигнал оказывается режим-зависимым — ключевой практический вывод статьи.

Далее:

  • интуиция по эллиптическим кривым,
  • код маппинга цен,
  • инженерия признаков,
  • результаты CatBoost на 2000 свечах EURUSD D1.


Что такое эллиптические кривые и почему secp256k1

Эллиптическая кривая — это множество точек (x, y), удовлетворяющих уравнению:

y² ≡ x³ + ax + b (mod p)

Для Bitcoin используется кривая secp256k1 (используемая в Bitcoin), где a = 0, b = 7. Все вычисления происходят по модулю огромного простого числа p = 2²⁵⁶ – 2³² – 977. На кривой помещается около 2²⁵⁶ точек — больше, чем атомов во Вселенной.

Параметр Значение Описание
Кривая secp256k1 Используется в Bitcoin
Уравнение y² = x³ + 7 Коэффициенты a=0, b=7
Поле Fp, p = 2²⁵⁶ – 2³² – 977 Огромное простое число
Порядок ~2²⁵⁶ Число точек на кривой
Маппинг SHA-256 + try-and-increment Цена → x → проверка y²

Почему это интересно для трейдинга?

На эллиптической кривой определены две операции: сложение точек и скалярное умножение. Когда мы переводим цены Open и Close в точки кривой и складываем их, мы получаем третью точку — комбинированный «отпечаток» свечи в нелинейном пространстве. Для нахождения точки на кривой нужно, чтобы x³ + 7 было квадратичным вычетом по модулю p. Поэтому используем try-and-increment: хешируем цену и проверяем кандидат x. Если проверка не проходит, увеличиваем nonce и повторяем. Этот nonce сам по себе оказывается информативным признаком.

Маппинг: от цены к точке на кривой

Шаг 1. Хеширование цены. Принимаем цену (Float64), конкатенируем с солью (тип цены + индекс свечи) и nonce. Пропускаем через SHA-256. Получаем 256-битное число.

Шаг 2. Получение x. Берём хеш по модулю p: x = hash mod p. Кандидатура на x-координату.

Шаг 3. Проверка y². Вычисляем y² = x³ + 7 mod p. Если квадратичный вычет — находим y через алгоритм Тонелли-Шенкса.

Шаг 4. Try-and-increment. Если нет — увеличиваем nonce и повторяем. Количество попыток (nonce) — метаданные о «сложности» маппинга.

P = 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFC2F
A, B = 0, 7

def price_to_curve_point(value, salt="eurusd"):
    """
    Маппинг числового значения цены на точку эллиптической кривой secp256k1.
    Метод: SHA-256 хеширование + try-and-increment
    """
    value_str = f"{salt}:{value:.10f}"
    for nonce in range(256):
        data = f"{value_str}:{nonce}".encode('utf-8')
        h = hashlib.sha256(data).digest()
        x = int.from_bytes(h, 'big') % P
        y_sq = (pow(x, 3, P) + B) % P
        y = tonelli_shanks(y_sq, P)
        if y is not None:
            if y % 2 != 0:
                y = P - y  # каноническая форма (чётный y)
            return (x, y, nonce)
    return None

Обратите внимание: соль включает тип цены (open, high, low, close) и индекс свечи. Это гарантирует, что одинаковые цены в разных свечах получают разные точки на кривой.

Алгоритм Тонелли-Шенкса

def tonelli_shanks(n, p):
    """Нахождение квадратного корня n mod p"""
    if pow(n, (p - 1) // 2, p) != 1:
        return None  # нет квадратного корня — не квадратичный вычет

    Q, S = p - 1, 0
    while Q % 2 == 0:
        Q //= 2
        S += 1

    if S == 1:
        return pow(n, (p + 1) // 4, p)

    z = 2
    while pow(z, (p - 1) // 2, p) != p - 1:
        z += 1

    M, c = S, pow(z, Q, p)
    t, R = pow(n, Q, p), pow(n, (Q + 1) // 2, p)

    while True:
        if t == 1:
            return R
        i, temp = 0, t
        while temp != 1:
            temp = pow(temp, 2, p)
            i += 1
        b = pow(c, 1 << (M - i - 1), p)
        M, c = i, pow(b, 2, p)
        t, R = (t * c) % p, (R * b) % p

Арифметика на кривой: сложение точек

Это ключевая операция, которая позволяет комбинировать точки Open и Close:

def extended_gcd(a, b):
    if a == 0: return b, 0, 1
    g, x, y = extended_gcd(b % a, a)
    return g, y - (b // a) * x, x

def mod_inverse(a, m=P):
    if a < 0: a = a % m
    g, x, _ = extended_gcd(a, m)
    return x % m

def point_add(p1, p2):
    """Сложение двух точек на secp256k1"""
    if p1 is None: return p2
    if p2 is None: return p1
    x1, y1 = p1
    x2, y2 = p2
    
    if x1 == x2 and y1 != y2:
        return None  # точка на бесконечности
    
    if x1 == x2:
        # Удвоение точки
        lam = (3 * x1 * x1) * mod_inverse(2 * y1) % P
    else:
        lam = (y2 - y1) * mod_inverse(x2 - x1) % P
    
    x3 = (lam * lam - x1 - x2) % P
    y3 = (lam * (x1 - x3) - y1) % P
    return (x3, y3)

На 2000 свечах EURUSD D1: 54% цен маппятся с nonce=0, 24% со второй, 14% с третьей попытки. Это соответствует теоретическому ожиданию: примерно половина элементов Fp является квадратичными вычетами.

Инженерия признаков: извлечение из кривой

Мы разработали 96 признаков в 5 группах. Из них 65 — производные эллиптической кривой (EC), 31 — классический TA. Все признаки вычисляются для 4 окон lookback: 5, 10, 20, 50 баров.

Группа Кол-во признаков Тип Примеры
Nonce features ~28 EC nonce_mean_50, nonce_entropy_20
x-coordinate ~25 EC x_slope_20, x_high, x_byte0
Point arithmetic ~12 EC oc_x, hl_x, dx_norm
Классический TA ~25 TA return_1, sharpe_20, rsi
Кросс-признаки ~6 EC×TA nonce_x_ret_5, x_x_vol_20

Nonce entropy:

# Энтропия nonce за lookback окно
from collections import Counter

def nonce_entropy(nonces_window):
    cnt = Counter(nonces_window)
    total = sum(cnt.values())
    return -sum(
        (v/total) * np.log2(v/total + 1e-10) 
        for v in cnt.values()
    )

x_slope — тренд x-координат на кривой.

# x_slope — тренд x-координат на кривой
def compute_x_slope(x_bits_array, lookback):
    """Линейный тренд нормализованных x-координат"""
    if len(x_bits_array) < 3:
        return 0
    x_idx = np.arange(len(x_bits_array))
    slope = np.polyfit(x_idx, x_bits_array, 1)[0]
    return slope

Point arithmetic — комбинированный отпечаток свечи.

# Комбинированный «отпечаток» свечи на кривой
pt_open = price_to_curve_point(candle['open'], f"open:{i}")
pt_close = price_to_curve_point(candle['close'], f"close:{i}")

# Сложение на кривой: Open + Close → новая точка
combined = point_add(
    (pt_open[0], pt_open[1]),
    (pt_close[0], pt_close[1])
)

# x-координата комбинированной точки → фича
oc_x = int.from_bytes(
    combined[0].to_bytes(32, 'big')[:8], 'big'
) / (2**64)



Подключение к MetaTrader 5

Для работы с реальными данными используем библиотеку MetaTrader 5 для Python:

import MetaTrader5 as mt5
from datetime import datetime

def load_mt5_data(symbol="EURUSD", timeframe="D1", n=2000):
    """Загрузка данных через MetaTrader 5"""
    if not mt5.initialize():
        print(f"MT5 init failed: {mt5.last_error()}")
        return None
    
    tf_map = {
        'M1': mt5.TIMEFRAME_M1, 'M5': mt5.TIMEFRAME_M5,
        'M15': mt5.TIMEFRAME_M15, 'H1': mt5.TIMEFRAME_H1,
        'H4': mt5.TIMEFRAME_H4, 'D1': mt5.TIMEFRAME_D1,
        'W1': mt5.TIMEFRAME_W1, 'MN1': mt5.TIMEFRAME_MN1,
    }
    
    rates = mt5.copy_rates_from_pos(
        symbol, tf_map[timeframe], 0, n
    )
    mt5.shutdown()
    
    if rates is None or len(rates) == 0:
        print(f"Нет данных для {symbol}")
        return None
    
    return [{
        'date': datetime.fromtimestamp(r['time']).strftime('%Y-%m-%d'),
        'open': round(float(r['open']), 5),
        'high': round(float(r['high']), 5),
        'low': round(float(r['low']), 5),
        'close': round(float(r['close']), 5),
    } for r in rates]

Скрипт автоматически пытается подключиться к MetaTrader 5. Если терминал не запущен — работает на генерируемых данных с regime-switching моделью для тестирования.

CatBoost: обучение и результаты

Мы обучили три ансамбля CatBoost, каждый из 3 моделей с разными гиперпараметрами (depth 3–6, lr 0.01–0.05). Целевая переменная: направление следующей свечи (1 = бычья, 0 = медвежья). Временное разбиение: 70/15/15.

from catboost import CatBoostClassifier, Pool

# Три конфигурации для ансамбля
configs = [
    {'depth': 4, 'lr': 0.02, 'l2': 3, 'iters': 1000, 'sub': 0.8, 'rsm': 0.8},
    {'depth': 6, 'lr': 0.01, 'l2': 1, 'iters': 1500, 'sub': 0.7, 'rsm': 0.7},
    {'depth': 3, 'lr': 0.05, 'l2': 5, 'iters': 800,  'sub': 0.9, 'rsm': 0.9},
]

models = []
for cfg in configs:
    model = CatBoostClassifier(
        iterations=cfg['iters'],
        depth=cfg['depth'],
        learning_rate=cfg['lr'],
        l2_leaf_reg=cfg['l2'],
        subsample=cfg['sub'],
        rsm=cfg['rsm'],
        random_seed=42,
        verbose=0,
        eval_metric='AUC',
        early_stopping_rounds=100,
        use_best_model=True,
        bootstrap_type='Bernoulli',
    )
    model.fit(
        Pool(X_train, y_train, feature_names=names),
        eval_set=Pool(X_val, y_val, feature_names=names)
    )
    models.append(model)

# Ансамбль: усреднение вероятностей
ensemble_probs = np.mean(
    [m.predict_proba(X_test)[:, 1] for m in models], 
    axis=0
)
Результаты на 2000 свечах EURUSD D1:

Модель Val Acc Val AUC Test Acc Test AUC CV AUC
Full (EC + TA) 59,25% 0,5902 60,07% 0,6508 0,507 ± 0,02
TA baseline 56,51% 0,5719 60,07% 0,5992 0,536 ± 0,03
EC only 51,37% 0,5690 60,41% 0,5957 0,524 ± 0,04
Top-10 Feature Importance:
# Признак Важность Тип Описание
1 return_1 6,13% TA Дневной return
2 ma_ratio_50 4,09% TA Цена / MA(50)
3 x_slope_20 3,00% EC Тренд x-битов за 20 баров
4 x_slope_50 2,95% EC Тренд x-битов за 50 баров
5 sharpe_20 2,87% TA Коэффициент Шарпа (20 баров)
6 x_slope_5 2,50% EC Тренд x-битов за 5 баров
7 x_high 2,46% EC Старшие биты x-координаты
8 oc_x 2,23% EC x-координата Open+Close
9 ret_std_5 1,85% TA Волатильность (5 баров)
10 x_x_vol_5 1,83% EC×TA x_bits × volatility


Анализ: почему EC-признаки работают

Мы анализируем не отдельные точки, а статистику распределения точек в окне. Один хеш — это шум. Сто хешей подряд — это распределение, и у этого распределения есть структура. Разные ценовые режимы (тренд, флэт, высокая/низкая волатильность) порождают разные распределения точек на кривой. Именно эту мета-информацию и улавливает CatBoost.

Есть и второй источник сигнала — nonce. Количество попыток найти квадратичный вычет напрямую зависит от значения x³ + 7 mod p, которое детерминировано определяется ценой.

  • x_slope — скорость движения по кривой

x_slope — линейный тренд нормализованных x-координат за окно (5, 20 или 50 баров). Высокие позиции x_slope в рейтинге важности указывают, что нелинейное пространство кривой действительно добавляет полезную информацию. Трендовый рынок и флэтовый рынок порождают разные траектории на кривой, даже после хеширования. Все три масштаба — x_slope_5, x_slope_20, x_slope_50 — попали в топ-10.

  • nonce_entropy — индикатор режима рынка

Nonce детерминирован при фиксированной соли, поэтому распределение nonce в окне отражает свойства набора цен, а не случайный шум. nonce_entropy_20 — 12-е место (1,81%); особенно полезна в комбинации с ATR: периоды высокой волатильности с высокой nonce_entropy — это один режим, а высокая волатильность с низкой nonce_entropy — другой.

  • oc_x — нелинейный «отпечаток» свечи

Две свечи с одинаковым телом (Close – Open = 50 пипсов), но разными абсолютными уровнями цен, дадут совершенно разные точки oc_x. Групповая операция на эллиптической кривой — это нелинейный инженеринг признаков, встроенный в математическую структуру кривой. oc_x занимает 8-е место (2,23%) — обогнала RSI и ATR.

  • Кросс-признаки: синергия EC и TA

x_x_vol_5 (x_bits × volatility за 5 баров) — 10-е место (1,83%). EC-признаки и TA-признаки взаимно усиливают друг друга. EC-признаки — не замена классического TA, а его расширение в новое пространство.


Честная оценка

Кросс-валидация (5 фолдов) показывает: Full CV AUC = 0,507 против TA CV AUC = 0,536. В среднем по всем режимам полная модель не превосходит TA baseline. Тестовая выборка: AUC 0,6508 против 0,5992. Разрыв 5,2 пп. — существенный.

Вероятное объяснение — режим-зависимость EC-сигнала. EC-признаки сильнее в трендовых фазах и слабее во флэте. Ниже — практический сценарий переключения моделей:

  • определить текущий режим рынка (тренд/флэт) через ADX, VIX или Hidden Markov Model
  • в трендовых фазах — использовать полную модель (EC + TA)
  • во флэтовых фазах — откатиться к TA baseline
  • порог переключения подобрать на валидационной выборке
Другие кривые
  • Curve25519 (Ed25519) — кривая Монтгомери, используемая в Signal, SSH, TLS 1.3. Уравнение: y² = x³ + 486662x² + x.
  • BN254 — кривая с pairing, используемая в Ethereum (EIP-197). Поддерживает билинейные спаривания.
  • BLS12-381 — современная pairing-кривая, используемая в Ethereum 2.0, Zcash, Filecoin.

Идея мультикривого ансамбля: маппим EURUSD на secp256k1, Curve25519 и BLS12-381 одновременно, извлекаем признаки из каждой кривой, объединяем в общую матрицу.

Pairing-based признаки

На кривых с pairing (BN254, BLS12-381) можно вычислять билинейное спаривание e(P, Q). Pairing обладает билинейностью: e(aP, bQ) = e(P, Q)^(ab). Это создаёт естественный способ кодирования произведений цен. Реализация через библиотеку py_ecc для Python.

Детектор режимов
  • ADX: если ADX > 25 — тренд, используем EC+TA; если ADX < 20 — флэт, только TA.
  • Hidden Markov Model: 2–3 состояния на исторических returns, каждое — свой набор весов для EC и TA.
  • Самодетекция: nonce_entropy как встроенный детектор — если энтропия выше порога, EC-признаки информативны.

Мультиинструментный анализ

Маппить EURUSD, GBPUSD, USDJPY, XAUUSD на одну кривую и анализировать взаимное расположение точек. «Центроид» портфеля на кривой — последовательное сложение точек всех инструментов — может отражать системный риск или общее направление валютного рынка.

Онлайн-обучение

Связка MetaTrader 5 ↔ Python по WebSocket: EA получает новый бар → отправляет OHLC → Python вычисляет EC-признаки → CatBoost делает прогноз → результат возвращается в EA. Вычисление EC-признаков занимает ~2 мс на свечу, что достаточно даже для M1.

Квантовые расширения

Точки на кривой как входы для квантовых kernel-методов. Каждая точка (x, y) кодируется как состояние кубита: Ry(x/P × π) × Rz(y/P × π). На NISQ-оборудовании — ~20–30 кубитов, то есть окно из 10–15 свечей. Библиотеки Qiskit и PennyLane поддерживают квантовые kernel-методы с классическим SVM/CatBoost на выходе.


Что мы доказали

Эксперимент на 2000 свечах EURUSD D1 дал три конкретных, измеримых результата. Первый: эллиптическая кривая secp256k1, разработанная для защиты криптовалютных транзакций, содержит структуру, полезную для прогнозирования финансовых временных рядов. Это не тривиальный факт — SHA-256 с лавинным эффектом должен был уничтожить любую связь с исходной ценой. Оказалось, что статистика распределения точек за окно сохраняет информацию о ценовом режиме даже после хеширования.

Второй результат: признак x_slope — тренд нормализованных x-координат точек на кривой — занял 3-е и 4-е место по важности, опередив RSI, ATR и большинство классических индикаторов. У этого признака нет аналога в традиционном техническом анализе. Это означает, что кривая добавляет принципиально новое измерение в пространство признаков, а не просто дублирует существующие сигналы.

Третий результат: oc_x — x-координата суммы точек Open и Close на кривой — оказалась содержательнее, чем просто Close – Open. Две свечи с одинаковым телом в 50 пипсов, но на разных уровнях цены, дают разные oc_x. Групповая арифметика эллиптической кривой автоматически учитывает абсолютный уровень цены, чего не делает ни один стандартный индикатор тела свечи.

Эмпирические выводы:
  • EC-признаки заняли 60,6% суммарной важности модели — больше, чем все классические TA-признаки вместе взятые. Шесть из десяти топовых позиций принадлежат эллиптической кривой.
  • AUC на тесте = 0,6508 (+5,2 пп. над TA baseline 0,5992). Для задачи бинарной классификации направления свечи это означает, что модель в 65% случаев правильно ранжирует бычью свечу выше медвежьей.
  • Кросс-валидация выявила режимность: CV AUC ≈ 0,507 против TA CV AUC = 0,536. Сигнал полезен, но режим-зависим — раскрывается в трендовых фазах и затухает во флэте.
  • Модель перестала срабатывать по early stopping на первой итерации при увеличении данных с 500 до 2000 свечей. Лучшая конфигурация (depth=4, lr=0.02) дошла до 139 итераций — есть реальный обучаемый сигнал, раскрывающийся с объёмом данных.

Практическая рекомендация

Режим-зависимость сигнала — не недостаток, а подсказка. EC-признаки следует использовать как дополнительный слой поверх TA, который включается только при обнаружении тренда. Конкретный алгоритм:

  • Детектор режима: ADX (порог 25), или HMM на 2 состояния, или nonce_entropy как самодетектор из пространства кривой.
  • В тренде (ADX > 25): использовать полную модель EC+TA. Здесь x_slope и oc_x дают максимальный прирост.
  • Во флэте (ADX < 20): переключаться на TA baseline. EC-признаки в боковике добавляют шум, не сигнал.
  • В переходной зоне (20–25): взвешенное усреднение вероятностей обеих моделей с весом, пропорциональным ADX.

Такая адаптивная схема, по предварительным оценкам, должна дать AUC выше 0,65 стабильно — в том числе на кросс-валидации, — поскольку нейтрализует режим-зависимость EC-сигнала.

Как запустить скрипт: пошаговая инструкция

Скрипт работает на Python и загружает данные из терминала MetaTrader 5. Скачайте Python 3.10 или новее с сайта python.org — при установке обязательно поставьте галочку "Add Python to PATH".

Откройте командную строку (Win+R → cmd → Enter) и проверьте: python --version. Должно показать Python 3.10.x или выше. Если у вас ещё нет MetaTrader 5 — скачайте с сайта брокера или с mql5.com, установите, войдите в торговый счёт (подойдёт демо).

Терминал должен быть запущен во время работы скрипта.

Важно: и MetaTrader 5, и Python должны быть 64-битными, иначе библиотека не установится.

Теперь установите библиотеки. В командной строке выполните по очереди:

pip install MetaTrader5
pip install catboost
pip install numpy
pip install scikit-learn

Установка catboost может занять несколько минут — библиотека большая, это нормально. Если видите ошибку "pip не является внутренней командой" — Python не добавлен в PATH, переустановите с галочкой.

Скачайте файл ec_eurusd_secp256k1.py из приложения к статье, положите в любую папку, например C:\Scripts. Убедитесь, что MetaTrader 5 запущен и подключён к серверу (зелёный индикатор внизу терминала). Запуск:

cd C:\Scripts
python ec_eurusd_secp256k1.py

Маппинг 2000 свечей на эллиптическую кривую занимает 2–5 минут, обучение CatBoost — ещё пару минут. В конце скрипт выведет таблицу с результатами и сохранит catboost_v2_results.json в ту же папку. Если MetaTrader 5 не запущен, скрипт не упадёт — он автоматически переключится на генерируемые данные и проведёт весь эксперимент на них.

Чтобы изменить инструмент или таймфрейм, найдите в начале скрипта строки symbol = "EURUSD", timeframe = "D1", N = 2000 и замените на нужные значения. Доступные таймфреймы: M1, M5, M15, H1, H4, D1, W1, MN1.

Возможные проблемы: "No module named MetaTrader5" — повторите pip install MetaTrader5, проверьте что Python 64-битный. "MT5 initialize() failed" — терминал не запущен или не подключён. "Нет данных" — откройте график нужного символа в терминале, дождитесь загрузки истории, запустите скрипт заново. Медленная работа на слабом ноутбуке (до 10 минут) — нормально, маппинг требует SHA-256 хеширования и модулярной арифметики для каждой из 8000 цен.

Итоговая таблица файлов проекта:

Название файла Назначение файла

ec_eurusd_secp256k1.py

Осуществляет маппинг цен на эллиптическую кривую
catboost_v2_2000candles.py 
Обучает ансамбль CatBoost моделей на эллиптических признаках

Дальнейшие направления

Каждое из перечисленных ниже направлений — тема для отдельного эксперимента и отдельной статьи.

  • Мультикривые ансамбли. Параллельный маппинг на secp256k1, Curve25519 и BLS12-381. Если разные кривые улавливают разные аспекты ценовой динамики, ансамбль из трёх наборов EC-признаков будет устойчивее одиночного.
  • Pairing-based признаки. Билинейное спаривание e(Open, Close) на кривых BN254 и BLS12-381 открывает совершенно новый класс нелинейных признаков, кодирующих произведения цен — основу финансовой математики.
  • Мультиинструментный анализ. «Центроид» портфеля на кривой — последовательное сложение точек EURUSD, GBPUSD, USDJPY, XAUUSD — как индикатор системного риска и макро-режима.
  • Онлайн-обучение. Интеграция EC-признаков в реальный торговый контур MetaTrader 5 ↔ Python по WebSocket с инкрементальным дообучением CatBoost на новых барах. Вычисление EC-признаков занимает ~2 мс на свечу — достаточно даже для M1.
  • Квантовые kernel-методы. Кодирование точек кривой как состояний кубитов через Ry/Rz-вращения и вычисление квантового kernel для SVM. На NISQ-оборудовании реализуемо для окна из 10–15 свечей.

Эллиптические кривые защищают триллионы долларов в криптовалютах. Теперь они могут помочь и в трейдинге. В статье приведён минимальный набор кода и протокол валидации, чтобы любой практик смог повторить эксперимент и проверить, даёт ли маппинг на кривую прирост для его инструмента и таймфрейма. Мы взяли инструмент из мира криптографии и применили его к финансовым рынкам — и получили сигнал, которого нет в классическом техническом анализе.

Прикрепленные файлы |
Внедрение в MQL5 практических модулей из других языков (Часть 05): Модуль Logging из Python — ведите логи профессионально Внедрение в MQL5 практических модулей из других языков (Часть 05): Модуль Logging из Python — ведите логи профессионально
Интеграция модуля Logging языка Python с языком MQL5 предоставляет трейдерам систематический подход к ведению логов, упрощая процесс мониторинга, отладки и документирования торговой деятельности. В этой статье описывается процесс адаптации, предлагая трейдерам мощный инструмент для поддержания четкости и организованности в процессе разработки программного обеспечения для трейдинга.
Гипотеза случайности: поиск скрытых паттернов в ценовых рядах Гипотеза случайности: поиск скрытых паттернов в ценовых рядах
В статье описан тест гипотезы случайности для котировок на основе статистики хи-квадрат, построенной по частотам перекрывающихся s-цепочек. Показано, как формировать дискретные состояния и сравнивать наблюдаемые и ожидаемые частоты, чтобы обнаруживать марковскую память в приращениях цены. Подход помогает отделить структурные зависимости от шума и формализовать проверку торговых гипотез.
Торговые инструменты на MQL5 (Часть 17): Изучение векторных скругленных прямоугольников и треугольников Торговые инструменты на MQL5 (Часть 17): Изучение векторных скругленных прямоугольников и треугольников
В этой статье мы рассматриваем векторные методы для рисования скругленных прямоугольников и треугольников в MQL5 с использованием canvas и суперсэмплирования для сглаживания изображения. Мы реализуем заливку методом сканирования строк, геометрические предварительные вычисления для дуг и касательных, а также рисование рамок для создания плавных, настраиваемых фигур. Такой подход закладывает основу для современных элементов пользовательского интерфейса в будущих торговых инструментах, поддерживающего входные параметры для установки размеров, радиусов, рамок и прозрачности.
Нейросети в трейдинге: Унифицированное смешивание признаков для торговых решений (Основные компоненты) Нейросети в трейдинге: Унифицированное смешивание признаков для торговых решений (Основные компоненты)
В статье показана адаптация фреймворка UniMixer средствами MQL5 для анализа финансовых рынков. Модуль UniMixer сначала выполняет смешивание токенов на локальном масштабе. Затем при глобальном смешивании токены сжимаются для фильтрации шума и снижения вычислительной нагрузки. После чего восстанавливаются до исходного количества. Интеграция с PerToken SwiGLU обеспечивает доработку каждого токена, повышая точность и устойчивость модели к рыночным колебаниям.