Нелинейные признаки OHLC из эллиптических кривых
Вы строите модель направления следующей дневной свечи 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 slopePoint 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 |
| # | Признак | Важность | Тип | Описание |
|---|---|---|---|---|
| 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 цен.
Итоговая таблица файлов проекта:
| Название файла | Назначение файла |
|---|---|
| Осуществляет маппинг цен на эллиптическую кривую | |
| 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 свечей.
Эллиптические кривые защищают триллионы долларов в криптовалютах. Теперь они могут помочь и в трейдинге. В статье приведён минимальный набор кода и протокол валидации, чтобы любой практик смог повторить эксперимент и проверить, даёт ли маппинг на кривую прирост для его инструмента и таймфрейма. Мы взяли инструмент из мира криптографии и применили его к финансовым рынкам — и получили сигнал, которого нет в классическом техническом анализе.
Предупреждение: все права на данные материалы принадлежат MetaQuotes Ltd. Полная или частичная перепечатка запрещена.
Данная статья написана пользователем сайта и отражает его личную точку зрения. Компания MetaQuotes Ltd не несет ответственности за достоверность представленной информации, а также за возможные последствия использования описанных решений, стратегий или рекомендаций.
Внедрение в MQL5 практических модулей из других языков (Часть 05): Модуль Logging из Python — ведите логи профессионально
Гипотеза случайности: поиск скрытых паттернов в ценовых рядах
Торговые инструменты на MQL5 (Часть 17): Изучение векторных скругленных прямоугольников и треугольников
Нейросети в трейдинге: Унифицированное смешивание признаков для торговых решений (Основные компоненты)
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования