Автоматизация и скрининг в техническом анализе — инструменты, процесс и ловушки
Скринер должен применять одно правило ко всему записанному списку инструментов. Поэтому главный вопрос после сканирования: пустой результат означает отсутствие сетапа или данных? Глава ведёт от определения сетапа к полному псевдокоду, реестру уведомлений и тесту вне выборки подбора параметров. Мы отделяем выявление кандидата от отправки приказа. Автоматизация сокращает работу, но способна также быстро и последовательно повторять ошибку.

- Скринер отбирает кандидатов. Его ценность может быть в сокращении обзора с сохранением охвата списка. Для оценки влияния на финансовые результаты нужно также зафиксировать правила входа, выхода и издержек.
- У уведомления определённый охват. Оно не заменяет сканирование условий за пределами охвата. Сокращение времени у экрана измеримо; автоматического улучшения дисциплины или результатов мы не предполагаем.
- Бэктест — модель. Тестер может включать исторические спреды, комиссии и условное проскальзывание. Но он не воспроизводит каждую доступную цену или будущую реакцию брокера, в том числе реквоту. Соответствие модели истории не доказывает будущего преимущества.
- Уровни автоматизации — описательная условность. У уведомления, фильтра и системы исполнения приказов разные обязанности. Полное исполнение также требует обработки ошибок, дубликатов и состояния счёта; одного сигнала мало.
1. Зачем автоматизировать и что именно
Восемь валют USD, EUR, GBP, JPY, CHF, AUD, NZD и CAD образуют 8 × 7 / 2 = 28 неупорядоченных пар. Это выбранный набор, а не весь форекс или измерение «наиболее популярных» инструментов. У брокера может быть иной список. До сканирования запишите символы, направление котировки и версию списка. Мы оцениваем фильтры скользящих средних, осцилляторов и зон S/R по одному контракту данных.
Скринер применяет записанное условие ко всему списку. Результат — кандидаты и отчёт покрытия. Последующее ручное или автоматическое решение может отклонить кандидата; сохраните этот результат отдельно.
Скринер проводит повторяемый обзор без выбора любимых графиков, но лишь в рамках настроек. Список 28 пар не доказывает, что все получили актуальные данные. Отчёт должен содержать записи и для пары без сигнала, и для пары, которую оценить не удалось.
RSI ниже 30 — результат условия, не приказ купить. Если вход определяет дополнительный анализ ценового действия или контекста, записывайте и отклонения. Иначе тест скринера охватит лишь удобно отобранные сделки.
2. Спектр автоматизации: от уведомления до алгоритма
Пять уровней ниже упорядочивают функции. Это условность курса, а не рейтинг оптимального пути для большинства трейдеров. Более высокий уровень требует новых проверок, но не обязательно лучше для конкретной задачи.
| Уровень | Что делает машина | Что делает трейдер | Примеры |
|---|---|---|---|
| 1. Ценовое уведомление | Уведомляет о достижении ценой уровня | Анализирует, решает, исполняет | Уведомление при EUR/USD = 1,0700 |
| 2. Уведомление индикатора | Уведомляет о выполнении условия индикатором | Анализирует контекст, решает | RSI(14) < 30 на D1 |
| 3. Скринер | Фильтрует инструменты по критериям | Просматривает результаты, анализирует, решает | TradingView Скринер |
| 4. Полуавтоматическая система | Генерирует сигнал и предлагаемые параметры | Одобряет либо отклоняет, управляет позицией | Свой индикатор + уведомление Pine Script |
| 5. Полная автоматизация | Анализирует, открывает, управляет, закрывает | Наблюдает, вмешивается при авариях | Торговый советник (EA) в MT4/MT5 |
Готовый фильтр или уведомление не всегда требуют программирования. Но нужны настройка, источник данных и операционный тест. Полуавтоматическое и автоматическое исполнение создают отдельную проблему: правильно выявленное условие может получить иное исполнение либо никакого.
Статья сосредоточена на уровнях с 1 по 4. Полная автоматизация EA появляется главным образом в контексте ловушек: туда попадают, потянувшись за роботом слишком рано.
3. Критерии скрининга на практике
Начните с искомого наблюдения и переведите его в условия. Избирательный фильтр полезен, лишь если находит нужные случаи и сообщает, что не смог оценить. Одно число результатов не говорит о качестве.
Проверка объективности правила
До попадания в сканер условие должно перейти с языка интуиции на язык машины. Каждый явно не заданный элемент ниже сканер решит за вас, обычно не так, как вы предполагаете:
| Элемент | Контрольный вопрос |
|---|---|
| Набор инструментов | Какие инструменты сканирую — закрытый список, не «всё»? |
| Источник данных | Чей поток и какие цены — bid, ask, mid? Тот же, на котором торгую? |
| Таймфрейм и момент оценки | Какие свечи — только закрытые? Когда именно вычисляется условие? |
| Индикатор и реализация | Какие параметры и чья реализация — RSI Уайлдера ≠ RSI на SMA? |
| Оператор и порог | Пересечение порога или состояние ниже/выше него? С каким допуском? |
| Частота сканирования | Раз на закрытую свечу, ежедневно в заданный час либо непрерывно? |
| Пропуски данных | Что делает правило при пропуске свечи, разрыве, смене символа? |
| Устранение дубликатов | Сколько уведомлений при условии шесть свечей подряд — шесть или одно? |
| Условие сброса | Что отменяет сигнал и позволяет правилу сработать вновь? |
Три отдельные меры. Длительность сканирования и охват данных измеряют удобство и надёжность. Согласие с независимо размеченным эталонным паттерном измеряет обнаружение условия. Финансовые результаты требуют всей стратегии, включая отвергнутых кандидатов, цены реакции и издержки. Достижение TP само по себе не определяет «правильный» результат скринера, а отсутствие роста доли побед не отменяет экономии времени. Сравнивайте с нефильтрованным вариантом на одной заранее отложенной выборке.
Фильтры тренда
- Цена относительно EMA/SMA. Цена выше растущей EMA 200 на D1 может задавать фильтр направления. Он отвергает кандидатов, не выполняющих условие, а не все «контртрендовые» сделки по любому определению рынка. Равенство цены средней или плоский наклон требуют явного решения.
- Пересечение скользящих средних. Условие EMA 50 прежде ≤ EMA 200, а теперь > EMA 200 обнаруживает переход. Это не кросс-курс и не доказательство смены будущего направления цены. Оба значения должны быть из полных свечей одного ряда.
- ADX выше порога. Примеры условных порогов: ADX(14) > 25 трактуют как трендовый рынок, < 20 — консолидацию, помня, что ADX измеряет силу, не направление движения. Полезен прежде всего как отрицательный фильтр: ниже порога трендовое правило отвергает инструмент согласно выбранному параметру.
Фильтры импульса и осцилляторов
- RSI в крайних зонах. Примеры порогов для RSI(14) — 30 и 70. Их частота зависит от инструмента, TF, периода и инициализации. Перепроданность не самостоятельный сигнал покупки, перекупленность — продажи. Без исследования мы не приписываем экстремумам D1 больше информационной ценности, чем H1.
- Дивергенция. Нужно задать свинги, сопоставление экстремумов цены и осциллятора, момент подтверждения. Тогда можно вычислять даже сложный паттерн. Ручная оценка «многоволновой» дивергенции без правил оставляет произвольный отбор, который трудно честно воспроизвести в тесте.
- Гистограмма MACD — смена знака. Гистограмма пересекает ноль снизу: в этой реализации меняется соотношение линии MACD и сигнальной, а не доказывается смена направления цены. Легко кодируется и часто служит предварительным фильтром дальнейшего анализа.
Фильтры цены и структуры
- Близость к S/R. Определите зону и допуск в единицах цены. Уведомление у вручную отмеченной зоны может упростить обзор, но эффективность нужно тестировать: она не следует из простоты настройки.
- Пробой диапазона N свечей. Например, закрытие полной свечи > наибольшего максимума прошлых 20 полных свечей. Проверяемая свеча исключается из окна максимума; равенство в строгом варианте не пробой. Это один подход Дончиана, а не автоматическое обещание прибыли.
- Фибоначчи. Определите подтверждённые концы свинга и допуск вокруг отката. Задержка подтверждения описана в статье 5.11. Вычисление уровня не доказывает реакции цены на него.
Разберите одну свечу до чтения полного контракта
Используйте поддержку S=1,1000 и фиксированный ATR A=0,0040. Зона — [1,0992;1,1008]; отмена требует C < 1,0980; повторная готовность — C ≥ 1,1040 и L > 1,1008. При проверке сигнала считайте условия EMA выполненными.
- При недостающих или неверных данных запишите состояние и приостановите новые оповещения.
- Закрытие ниже границы отмены выводит контекст из использования.
- Если контекст не готов, проверьте повторную готовность для следующей свечи. На этой свече не оповещайте.
- Если готов, пересечение диапазона с зоной и C > S могут дать кандидата при выполнении фильтра EMA.
Трассировка ниже даёт числа. Это модельные входы, а не восстановленная история рынка. Полный контракт добавляет проверки, сохраняющие смысл при повторении данных и запросов.
Воспроизведите состояние оповещения без следующей свечи
Сохраняйте S, фиксированный A, порядок ветвей и контекст. Первые шесть решений используют опубликованную трассировку с повторным запросом. Последний пробел данных рассматривается отдельно. Сделайте выбор до раскрытия проверки; ответы доступны без заметок.
Шаг 1. Готов. L=1,1007,H=1,1015,C=1,1010.
Необязательная заметка. Сохраните копию, если хранилище браузера недоступно.
Проверить шаг и раскрыть следующий
SIGNAL. Диапазон пересекает зону, C > S, предполагаемый фильтр EMA выполнен. Снимите готовность этого контекста.
Шаг 1 — повторный запрос. Снова поступили те же ключ и хеш входа.
Необязательная заметка. Сохраните копию, если хранилище браузера недоступно.
Проверить шаг и раскрыть следующий
Верните существующий SIGNAL. Не оценивайте по теперь уже неготовому состоянию и не отправляйте новое уведомление.
Шаг 2. Не готов. L=1,1010,H=1,1042,C=1,1040.
Необязательная заметка. Сохраните копию, если хранилище браузера недоступно.
Проверить шаг и раскрыть следующий
REARM для следующей свечи. C равен разрешённому порогу, L выше 1,1008. Сейчас оповещения нет.
Шаг 3. Готов. L=1,1007,H=1,1025,C=1,1010; фильтр EMA выполнен.
Необязательная заметка. Сохраните копию, если хранилище браузера недоступно.
Проверить шаг и раскрыть следующий
SIGNAL по новому ключу свечи, затем снимите готовность.
Шаг 4. Не готов. L=1,0975,H=1,1014,C=1,0980.
Необязательная заметка. Сохраните копию, если хранилище браузера недоступно.
Проверить шаг и раскрыть следующий
DISARMED. Равенство не выполняет C < 1,0980. Повторная готовность тоже не выполнена.
Шаг 5. Не готов. L=1,0974,H=1,0982,C=1,0979.
Необязательная заметка. Сохраните копию, если хранилище браузера недоступно.
Проверить шаг и раскрыть следующий
INVALIDATED. Выведите прежний центр из использования; нужен новый подтверждённый фрактал.
Отдельный шаг: пробел данных. Вместо полной записи ошибка данных мешает оценке.
Необязательная заметка. Сохраните копию, если хранилище браузера недоступно.
Проверить шаг и раскрыть следующий
NO_DATA. Не выдумывайте NO_SIGNAL и не выводите повторную готовность или отмену внутри пробела. Приостановите оповещения до восстановления контекста.
Прочитать полную разобранную трассировку
Один уровень, последовательные состояния уведомления
Пройдём правило без смены порогов после результата. Поддержка S = 1,1000 — из фрактала, подтверждённого до первого проверяемого дня. Зафиксированный тогда ATR A = 0,0040, или 40 пипсов, задаёт зону [1,0992; 1,1008], отмену C < 1,0980 и повторную готовность при C ≥ 1,1040 и L > 1,1008. Это параметры модели, не рекомендации EUR/USD. Центр фрактала и A неизменны во всём примере.
| Шаг | L / H / C | Состояние до | Исход |
|---|---|---|---|
| 1 | 1,1007 / 1,1015 / 1,1010 | Готово (armed) | Диапазон пересекает зону, C > S: уведомить и снять готовность |
| 1 — повтор | Ключ и хеш входа как в 1 | Существующая запись SIGNAL | Вернуть прошлый исход без новой оценки, смены состояния и уведомления |
| 2 | 1,1010 / 1,1042 / 1,1040 | Не готово (disarmed) | C равен порогу повторной готовности, L выше зоны: готовность для следующего шага, без уведомления |
| 3 | 1,1007 / 1,1025 / 1,1010 | Готово (armed) | Новый тест: второе уведомление, другой конец свечи и ключ |
| 4 | 1,0975 / 1,1014 / 1,0980 | Не готово (disarmed) | Равенство не отменяет при строгом правиле; нет ни готовности, ни уведомления |
| 5 | 1,0974 / 1,0982 / 1,0979 | Не готово (disarmed) | C < 1,0980: контекст отменён |
В шагах 1 и 3 заявленный фильтр EMA выполнен: закрытие выше EMA, текущая EMA выше значения 20 свечей назад. Таблица не восстанавливает 500 свечей прогрева; эти два условия — входы логической модели, не документированные рыночные значения. Повтор шага 1 обязан вернуть тот же SIGNAL, не пересчитывать по уже снятой готовности и перезаписывать DISARMED. При ревизии отдельно восстанавливаются состояние до той свечи и последующие зависимые состояния с сохранением исходного запуска. Шаг 2 не может одновременно установить готовность и выдать уведомление: в начале оценки был disarmed. Порядок ветвей — часть определения, не техническая мелочь.
После шага 5 старый фрактал хранится в архиве как отменённый. На следующий день нельзя переименовать его в «последнюю поддержку» и создать уведомление из того же центра: нужен новый подтверждённый фрактал. Истечение через 60 свечей — отдельное состояние даже без пересечения границы отмены. При пропуске между шагами неизвестно, произошли ли готовность или отмена: сообщите о разрыве и приостановите новые уведомления до восстановления контекста.
Исправление high/low может изменить соответствие фракталу. Сохраните исходный снимок, доступный тогда исход и связанное с ним позднее исправление. «Как правило работало на окончательных данных» и «что оно реально могло отправить тогда» — разные эксперименты. Можно провести оба, но нельзя смешивать записи. Приложенный CSV состояний даёт материал для проверки реализации без размещения приказов.
От интуиции к условию — полное правило и потери перевода
Интуиция: «покупай отскоки от поддержки при восходящем тренде D1». Та же мысль в форме, исполнимой сканером:
Полная версия решает четыре задачи: получить версионный снимок; зафиксировать контекст; оценить свечу из исходного состояния; записать исход и доставить уведомление без дублей. Читайте ветви по порядку. Повтор запроса не является новой свечой, исправление — первоначальным оповещением.
Прочитать полный контракт данных, состояния и доставки
ПСЕВДОКОД: КАНДИДАТ «ТЕСТ ПОДДЕРЖКИ», НЕ ПРИКАЗ
Фиксированная конфигурация: version, 28 пар, поток BID, D1, календарь,
EMA: α=2/201, начальное значение — SMA первых 200 C; ATR(14) Уайлдера:
начальное значение = среднее первых 14 TR с предыдущим C, далее α=1/14;
прогрев не менее 500 полных свечей — выбор модели, не гарантия сходимости.
Состояние символа: уровень S, ATR A, интервал определения, armed/disarmed.
В начале t запишите неизменяемый снимок контекста по данным, известным до start_t:
он фиксирует входы t без изменения рабочего состояния armed; повтор использует этот снимок.
Состояние до t и архив центров фракталов берутся из последней ранее обработанной свечи.
Выберите последний строгий нижний фрактал с 2 свечами по каждую сторону,
подтверждённый и полученный до start_t, возрастом не более 60 свечей;
равные минимумы не образуют строгого фрактала; нет фрактала = NO_LEVEL.
Определяйте новый контекст по потоку и центру фрактала. Храните отменённые центры
в реестре; не создавайте контекст заново из того же центра.
Для нового контекста A := ATR, известный до start_t; сохраняйте его неизменным
до истечения, отмены либо нового подтверждённого центра.
Через 60 свечей от центра запишите EXPIRED; уведомление не выдавайте.
Если A ≤ 0 либо значение отсутствует: NO_VALUE, без сигнала.
Запишите зону [S − 0.2A; S + 0.2A] и отмену C < S − 0.5A.
Новый подтверждённый фрактал создаёт новый контекст в состоянии armed до проверки.
После конца t для КАЖДОГО символа полного набора:
Key := (version, feed, symbol, D1, end_UTC).
Получите полные OHLC t и known_at, а также сохранённый снимок контекста до start_t.
Хеш входа охватывает OHLC, историю индикатора, контекст, конфигурацию и версии данных.
Если ключ и хеш существуют: верните прежний исход без оценки и смены состояния.
Если ключ есть, но хеш иной: добавьте ревизию и выполните отдельное воспроизведение
из зафиксированного состояния до t; не оценивайте t по уже изменённому им состоянию.
Исправление истории до t требует воспроизведения с первого изменённого входа.
Сохраните исходный результат/known_at; пометьте новый результат как позднее исправление.
Не отправляйте исправление как новое исходное уведомление; завершите символ.
При первой оценке используйте копию состояния до t и снимок контекста;
проверьте L ≤ min(O,C) ≤ max(O,C) ≤ H.
Проверьте непрерывность сессии, поток, компонент, шаг цены и прогрев.
Ошибка данных: запишите NO_DATA; сохраните состояние; не выдавайте уведомление.
Если C_t < S − 0.5A: запишите INVALIDATED, удалите контекст; завершите символ.
Если состояние было disarmed:
если C_t ≥ S + A AND L_t > S + 0.2A: установите armed для СЛЕДУЮЩЕЙ свечи;
запишите REARM либо DISARMED; на той же свече уведомления нет.
Если состояние было armed:
trend := C_t > EMA200_t AND EMA200_t > EMA200_(t−20).
test := H_t ≥ S − 0.2A AND L_t ≤ S + 0.2A AND C_t > S.
signal := trend AND test.
Запишите SIGNAL либо NO_SIGNAL со всеми операндами.
При сигнале установите контексту disarmed; новое уведомление лишь после будущего REARM.
Каждая завершающая ветвь записывает исход, входы, состояние до и после t.
Зафиксируйте запись и состояние один раз в одной транзакции с уникальным ключом;
при конфликте повтора верните существующую запись без второй мутации.
Идентифицируйте уведомление этим ключом, включая возобновление доставки.
Обрабатывайте концы свечей хронологически; пропуск данных блокирует последующие
уведомления до восстановления контекста; его нельзя превратить в NO_SIGNAL.
После сканирования сообщите expected/evaluated/missing/candidates, в том числе при candidates = 0.
Уведомление содержит end_t, known_at, version, S, A и условия; функции исполнения нет.Перевод в условия делает выбор явным. Поддержка — подтверждённый фрактал, зона — ±0,2 × фиксированный ATR, тест требует записанных пересечения диапазона и закрытия. Контекст W1 и субъективное качество свечи вне этого правила. Повторная готовность оповещения и отмена поддержки — разные события. Другому определению нужна другая версия.
Макроконтекст и фильтры издержек — чего скринер сам не покажет
Фильтр календаря, спреда или ролловера — отдельное правило. Оптимальность окна 30 или 60 минут здесь не установлена. Запишите охватываемые события, источник дат и блокирует ли фильтр новых кандидатов, новые приказы либо также меняет работу с открытыми позициями.
- Фильтр календаря. Пример процедуры может отклонять новых кандидатов за два часа до выбранного события. Это проверяемый параметр, не универсальное требование. Сверьте дату с издателем и различайте расписание и фактическую публикацию; «High impact» — классификация поставщика календаря.
- Фильтр спреда. Порог явный, с единицей и базой сравнения. Удвоенный ранее измеренный уровень для пары и времени суток может блокировать новую инструкцию. Он не объясняет расширение спреда и не защищает открытую позицию.
- Фильтр ATR. ATR > 1,2 × среднее прошлых N значений описывает превышение выбранного порога. Значение ниже него не означает автоматически «малоликвидный рынок». Изменение SL, TP и объёма требует записанного правила, а не обязательно следует из одного ATR.
Сохраняйте последующие оценки моделей, контекста и риска отдельными правилами. Если одна меняет действие, сохраните входы и причину отказа.
Фильтры могут давать разное число результатов в разных режимах. Переключение между трендовым и диапазонным наборами задаётся до теста и использует доступные тогда данные. Ретроспективный выбор лучшего фильтра для каждого участка — ещё одна оптимизация. Пустая неделя при полных данных — допустимый результат, а не повод на ходу ослабить пороги.
node reproduce-real-examples.cjs в этой папке. Прочитайте инструкции или изучите ожидаемые значения. Программа проверяет 50 утверждений и записывает проверки в ./reproduced. Все зависимости включены; связанные примеры H1/H4 и трёх символов используют общую программу.Реальное сканирование H1: отклонённая тень и новый кандидат
Отдельный упрощённый эксперимент охватывает EURUSD, GBPUSD и USDJPY из того же экспорта ICMarketsSC-Demo. Каждая полная H1 оценивается после конца по Bid. Часы — исходное время MT5 без проверенного смещения. R — High последней строгой точки с двумя меньшими High слева и двумя справа; равенство точки не создаёт. Центр i известен лишь после закрытия i+2 и используется со следующей свечи. Допуск нулевой.
Кандидат требует обоих условий: Ct > R и Ct−1 ≤ R. Каждая точка даёт не более одного кандидата, ключ включает версию правила, поток, символ, H1 и начало оцениваемой свечи. Повтор запроса возвращает записанный исход. Через 24 последующие свечи от центра уровень истекает; любое нарушение часовой непрерывности сбрасывает контекст и требует новой непрерывной точки. Причину разрыва не выводим. Это фильтр кандидатов, а не стратегия входа и выхода.
EUR/USD: точка 13 октября 21:00 имеет High = 1,12037. Две её H1 справа заканчиваются 14 октября в 00:00, поэтому раньше R неизвестен. H1 [03:00, 04:00) имеет H = 1,12044, но C = 1,12034: пересечение одной тенью отклоняется без выдуманного рассказа о «ловушке». Лишь H1 [04:00, 05:00) закрывается на 1,12064, при прежнем C ≤ R. Кандидат появляется после получения закрытия, не раньше 05:00.
| Символ | R | C | Исход сканирования |
|---|---|---|---|
| EURUSD | 1,12037 | 1,12064 | Новый кандидат |
| GBPUSD | 1,32593 | 1,32669 | Эта точка уже сообщена — без повтора |
| USDJPY | 158,466 | 158,392 | Отклонён: C ≤ R |
Оценены все 3 из 3 символов; один новый кандидат не равен сделке. Отсев и все прежние исходы с 1 октября тоже записаны. Выбран первый кандидат EURUSD после этой даты с прежним отклонённым пересечением того же R за предыдущие 12 H1, а не по будущей прибыли. Экспорт не содержит времени фактического получения, Ask, исполнений или полной истории пересмотров. Показываем причинный порядок на фиксированных данных, а не реально отправленные тогда уведомления.
Для проверки: исходные H1 графика, последовательные состояния примера, а также полный регистр трёх символов, метаданные и SHA-256, и скрипт воспроизведения. Проверки начальных фрагментов сравнивают исход по истории до данного момента с той же частью полного воспроизведения. Добавление будущих свечей не должно менять прежний исход.
4. TradingView — скринер, уведомления, Pine Script
Встроенный скринер
TradingView даёт валютные фильтры и уведомления, но точный охват зависит от текущего инструмента и тарифа. Проверьте колонки, TF и источник. «Volume» в спот-FX — не центральный реестр сделок: это может быть число обновлений потока. Источники могут давать разные результаты; сравнение возможно при определённых данных и методе.
Для первой реализации выберите одну задачу: находить перепроданных кандидатов внутри этого фильтра нисходящего D1. Оценивайте полные доступные свечи записанной совокупности и потока. Правило: C < EMA(200) AND RSI(14) < 35 AND ADX(14) > 20. Равенство не проходит строгое сравнение. Реализации и инициализация индикаторов следуют объявленному контракту данных. Получаются кандидаты для проверки, а не указание купить или продать.
| Строка модели | Close / EMA200 | RSI14 / ADX14 | Исход |
|---|---|---|---|
| A | 1,0900 / 1,1000 | 32 / 24 | Кандидат: три сравнения выполнены |
| B | 1,1100 / 1,1000 | 32 / 24 | Отклонён: Close не ниже EMA |
| C | 1,0900 / 1,1000 | 68 / 24 | Отклонён: RSI не ниже 35 |
Входы проверяют логику без восстановления истории индикатора. Доходность за пять сессий была бы отдельным условием: 100 × (C_t / C_(t−5) − 1) имеет знак; абсолютное значение — нет. Перед добавлением задайте знак, порог и ряд. Сообщайте ожидаемые, оценённые, недостающие записи и кандидатов вместо обещания типичного дневного числа.
Уведомления TradingView
Уведомление сообщает об условии с требованием закрытия либо реакции внутри свечи. В обоих случаях запишите время данных, обнаружения и получения сообщения. Мы не предполагаем, что все остальные алгоритмы уже проторговали или у всех уведомлений одинаковая задержка.
Лимиты оповещений зависят от текущего тарифа TradingView, типа и длительности оповещения. Проверьте до выбора совокупности. Лимит активных оповещений и числа проверенных символов — разные ограничения.
Pine Script — свои индикаторы и стратегии
Pine Script поддерживает индикаторы, оповещения и моделируемые стратегии. Начните с небольшого условия для ручной проверки, затем проверьте поведение на полных и формирующихся свечах. Официальная документация определяет модель выполнения.
- Пользовательский индикатор может объединить RSI, подтверждённую зону Фибоначчи и соотношение EMA. Каждому входу нужны расчёт, источник и время доступности; нарисованная стрелка их не даёт.
- Уведомление по своему индикатору — при совпадении условий скрипт автоматически выдаёт уведомление. Вы получаете сообщение на телефон и открываете готовый к анализу график.
- Бэктест стратегии — у Pine Script встроен модуль
strategy()для теста логики на истории. Результаты во вкладке «Strategy Tester»: кривая капитала счёта, просадка, доля побед, профит-фактор.
Pine Script рассчитывает индикаторы, уведомления и имитируемые приказы в эмуляторе TradingView. Штатная интеграция брокера не означает, что стратегический скрипт отправляет ему свои сделки. Автоматическое исполнение после webhook требует отдельного правильно настроенного слоя с выявлением дубликатов, подтверждений и ошибок. Среда зависит от данных и требований; без измерения ни одна платформа не объявляется гарантией меньшего проскальзывания.
Событие RSI в псевдокоде. Это описание логики, не готовый к вставке код или система отправки приказов. Реализация сохраняет контракт полноты и времени и правило инициализации из статьи 5.8.
ПСЕВДОКОД — ТОЛЬКО УВЕДОМЛЕНИЕ, БЕЗ ПРИКАЗОВ
Конфигурация: версия правила, набор инструментов, поток BID, таймфрейм D1,
границы дня, реализации RSI(14) и EMA(200), не менее 500 исторических свечей.
После каждого ожидаемого конца D1 для КАЖДОГО символа:
Проверьте полноту, OHLC, непрерывность календаря и время доступности.
При пропуске данных: запишите NO_DATA; сохраните состояние порога; завершите символ.
Рассчитайте RSI и EMA тем же заявленным методом на двух последовательных полных D1.
Если результат не определён: запишите NO_VALUE; завершите символ.
Event := предыдущий RSI ≥ 30 AND новый RSI < 30 AND новый C < новая EMA.
Key := (version, feed, symbol, D1, end_UTC).
Запишите исход даже при event = FALSE, со временем и хешем данных.
Если event и key ещё не отправлен: запишите уведомление, отправьте сообщение.
Повтор с тем же ключом не отправляет нового уведомления.
Исправление истории: добавьте версию исправления, не заменяйте исходное решение.
При пропуске между свечами не изображайте непрерывное пересечение.
Следующее событие требует новой пары последовательных полных свечей.
RSI = 30 на прошлой свече допускает переход, равенство на текущей — нет. Это явный выбор операторов. Ещё одна свеча ниже 30 не новый переход. Отдельно устраняются идентичные результаты повтора сканирования. Пропуск не позволяет выдумать недостающий RSI или принять ненаблюдавшееся пересечение.
Обнаружение и реакция. Close доступно после завершения и получения свечи. Затем следуют уведомление, решение и возможная попытка исполнения. Стандартный эмулятор TradingView исполняет новый приказ не ранее следующего тика, но имеет и моделирование исполнения по закрытию. Это не доказывает достижимости цены после получения уведомления. Будущее закрытие HTF до конца интервала — заглядывание вперёд независимо от названия настройки. Временная шкала приведена в статье 5.11.
5. MT4/MT5 — сканеры, индикаторы, советники EA
MetaTrader поддерживает локальные индикаторы и советники на MQL4/MQL5. Советник может отправлять заявки и управлять ими, если разрешают платформа, счёт и поставщик. Скринер, лишь сообщающий условия, имеет более узкую ответственность.
Свои индикаторы и сканеры
Панель может показывать тренд, RSI и расстояние от средней для символов обзора рынка. Проверьте правило, версию, покрытие и работу с данными. Название продукта или отзыв этого не решают.
Локальному скринеру MT4/MT5 нужен работающий процесс платформы на компьютере или VPS. Оповещения TradingView используют серверы сервиса. В обеих средах проверяйте свежесть данных, ошибки и получение сообщений; уведомление отдельно от обнаружения.
Советники EA — полная автоматизация
EA — программы, способные торговать самостоятельно. Возможности огромны: от «покупай при пересечении EMA 50 вверх через EMA 200» до сложных систем динамического управления позицией, трейлинг-стопов и мульти-TF.
Оценка готового EA требует документированных правил, истории изменений, данных, издержек и результатов со слабыми периодами. Гладкая кривая не доказывает ни мошенничества, ни подгонки, но без этих сведений не исключает их. Остальная глава показывает проверки.
MT5 и MT4
У MT5 мультисимвольный тестер, стандартный MT4 работает с выбранным символом. Это важно портфельным стратегиям, но не определяет качество данных или модели исполнения. Проверьте поддерживаемые инструменты, режимы теста и условия брокера: название платформы не оценка исполнения.
6. Процесс: от сканирования к списку наблюдения
Процесс ниже разделяет сканирование, проверку и реакцию. Это организационный пример для свинг-трейдинга, а не результаты исследования эффективности. Каждый этап оставляет запись, включая отказ.
- W1 после завершения недели. Просмотрите контекст и ранее подтверждённые зоны S/R. При формальном определении оценка может быть ручной или автоматической. Запишите время определения и границы зон, не сдвигайте их позднее под результат.
- Сканирование D1 после заданного закрытия. Оцените каждый символ по фиксированному правилу. Проверьте кандидатов по записанному недельному контексту; сохраняйте ручной отсев и отсутствие данных.
- Список наблюдения и экспозиция. Число пар зависит от способности их просматривать, не от «идеальных» 2–5. Лонги EUR/USD, GBP/USD и шорт USD/CHF имеют общую короткую часть USD, но разные прочие валюты; это не одна идентичная позиция. Измеряйте корреляцию согласованных доходностей с указанием периода и окна. DXY частично повторяет эти курсы, COT имеет отдельные даты позиций и публикации. Расчёт размера позиции относится лишь к торговому плану.
- Уведомления и ожидание. Для пар списка ставите уведомления по цене — достижение зоны, индикатору — вход RSI в крайнюю зону, либо рисунку — касание трендовой линии. Вы не сидите у графика, а ждёте сообщения.
- Оповещение → проверка → решение. Изучите записанного кандидата и отдельные условия активации, риска и исполнения. Уведомление само по себе не разрешает заявку. Запишите причину отсутствия действия.
Запишите фактическое время и охват обзора. Уведомление не гарантирует верной оценки контекста или полноты списка. Смена данных после интервенции или объявления может изменить исход правила; проверка требует новой записи, а не замены прошлого прочтения.
Число кандидатов должно отвечать возможностям обзора. Пустой результат считайте отсутствием сетапов лишь после проверки охвата набора и свежести данных. Сбой, неполная свеча и короткая история имеют разные состояния. «Не сегодня» — интерпретация, не диагностическое сообщение.
7. Утро понедельника — как выглядит скрининг 28 пар
Пример понедельника: источник использует дни с концом в 17:00 America/New_York и пять полных D1 в обычной неделе. Оценка по последней полученной полной D1. В UTC к понедельнику уже может быть короткая воскресная свеча; универсального отсутствия новой D1 за выходные не предполагаем.
8:15. В скринере TradingView фильтры D1 по закрытию пятницы: RSI(14) < 35, цена ниже EMA 200, ADX(14) > 20. Цель — перепроданные пары в нисходящем тренде.
Модельный фильтр возвращает четыре пары при полных данных всех 28. Обзор использует одинаковые источник, конец D1 и инициализацию индикаторов:
- AUD/USD. Условный RSI 28 и цена ниже EMA 200 выполняют фильтр. С заранее записанной зоной W1 кандидат идёт на дальнейший анализ; одна близость поддержки не приказ купить.
- NZD/USD. Фильтр выполнен, но дополнительное правило требует близости зоны W1, которой здесь нет. Запись: отказ при проверке, не «ложный сигнал» после убытка.
- EUR/GBP. В модели сканер показывает ADX 21, другой поток — 18 при пороге > 20. Это не единое согласованное измерение. Запишите источники и приостановите сравнение до проверки OHLC, границ дня и инициализации. Без пересчёта не приписывайте всю разницу ADX в три пункта лишь потоку.
- GBP/CHF. Условные RSI 31 и ADX 27 выполняют фильтр. Близость отката 61,8% требует заранее известного свинга и допуска; ценовое уведомление и RSI остаются отдельными условиями.
Модель: фильтр проходят 4/28 = 14,2857% инструментов, в списке остаются 2/28 = 7,1429%. Время работы не измерено. При двух пропусках верный отчёт: «4 кандидата из 26 оценённых, охват 26/28 = 92,8571%», а не «4 из 28»; исходы недостающих двух неизвестны.
8. Уведомления — как не пропустить без наблюдения
Уведомление отделяет ожидание условия от просмотра графика. Его влияние на время работы можно вычислить. Это не гарантия меньшего числа импульсивных сделок: сообщение всё равно требует следования плану.
Рыночный и лимитный приказ — краткое правило
Рыночный приказ не гарантирует ни цены, ни исполнения при любых условиях. Лимит ограничивает цену по правилам продукта, но может не исполниться. Без данных мы не предполагаем, что лимит «обычно выигрывает» на D1. Выбор типа и активация по bid/ask описаны в статье 2.7.
Виды уведомлений
- Цена. «Сообщи, когда EUR/USD достигнет 1,0700». Их ставят на уровнях S/R, откатах Фибоначчи и интересующих зонах. Без программирования.
- Индикатор. «RSI(14) < 30 на D1» либо «гистограмма MACD сменила знак». В TradingView: щелчок по индикатору → Create Alert. В MT4/MT5 — свой индикатор с уведомлением. Важно: MT4 работает локально и требует открытой платформы либо VPS.
- Объект рисования. TradingView ставит уведомления на нарисованных трендовых линиях и зонах: цена касается недельной линии — на телефон приходит push. Это сочетает ручную разметку и автоматическое сообщение.
- Составное условие. Многокомпонентное уведомление: «цена ниже EMA 200 И RSI < 35 И ADX > 25». Нужны Pine Script или MQL, но настройка однократная.
Как сочетать уведомления на практике
По зоне + по индикатору. На выходных рисуете зоны W1/D1 и ценовые уведомления, параллельно — RSI < 30 на парах списка. Близкое по времени срабатывание делает условие более избирательным, но не обязательно независимо подтверждённым: оба критерия вычислены по одной цене. Зональный подход сочетается с анализом поддержки и сопротивления, индикаторный — со стратегиями осцилляторов.
Сокращайте ненужные повторы и истёкшие условия. Число активных уведомлений зависит от процесса обзора: можно сканировать весь набор и отправлять лишь новые события без дубликатов. Для сокращения сообщений не нужно исключать инструменты.
Состояние RSI < 30 может сохраняться несколько свечей. Предыдущий RSI ≥ 30 и текущий RSI < 30 — событие перехода. Оценивайте выбранное условие один раз на заданную полную свечу, затем убирайте дубли её обработки. Это отдельные проверки.
Перед сравнением скринеров согласуйте источник, сторону цены, дневные границы и инициализацию. Разные OHLC меняют прохождение порогов. Серверные метки сами не устанавливают размер или направление различия. Урок 5.11 разбирает временное сопоставление.
В условной модели зону W1 [1,0680; 1,0720] задали до теста. Отдельно определён переход RSI(14) ниже 30 по полной D1. Их сочетание требует заданного окна, например обоих событий в один день, а не произвольного «близкого времени» задним числом. После выполнения полная H4 проверяется по правилу паттерна. Это более избирательный фильтр, но сигналы происходят из цены и не становятся автоматически независимыми.
9. Бэктест — что проверять и как толковать результат
Бэктест применяет модель к историческим входам. Он выявляет несогласованные правила и оценивает исходы по заданным допущениям, но не устанавливает точные цены после решения в реальном времени и не гарантирует новых результатов.
Что стоит тестировать
Исторический тест требует воспроизводимых правил и доступных в каждый момент данных. Даже простое неравенство неполно без источника, TF, инициализации и цены реакции.
- Условия индикатора. RSI(14) < 30 воспроизводим лишь после фиксации источника, границ, расчёта и времени оценки.
- Правила выхода и SL/TP. Фиксированный SL 50 пипсов, TP 100 пипсов либо трейлинг-стоп 2× ATR. Измеримо и сравнимо.
- Сравнение вариантов. Измерьте ту же процедуру с иным порогом или стопом. Запишите все изученные варианты и сохраните данные, не использованные для выбора.
Хуже тестируется всё, что требует человеческого суждения:
- Ценовое действие. Геометрию свечи, зону и время подтверждения можно определить численно. Произвольное «выглядит убедительно» требует отдельного записанного протокола оценки; доказанного преимущества глаза над правилом мы не предполагаем.
- Структурный контекст. Ручная разметка волны 2 требует правил, версии и времени создания. Поздняя перемаркировка не может улучшить прежний результат теста.
- Дискреционные решения. Отказы кандидатам можно записывать заранее. Без записи неизвестно, улучшило ли суждение результат или отобраны лишь удачные случаи. Нет оснований считать, что прибыльность объясняется одним невидимым алгоритму контекстом.
Качество данных — редкая тема
Бэктест надёжен лишь настолько, насколько данные. Для форекса это серьёзно: рынок децентрализован, данные брокеров могут различаться спредами и небольшими отличиями OHLC. OHLC теряет внутрисвечную траекторию; при близких SL и TP невозможно узнать, какое касание было первым.
Режим MT5 «Every tick based on real ticks» — «Все тики на основе реальных тиков» — использует доступные тики, но не гарантирует их наличия везде. MetaQuotes описывает генерацию тиков при пропусках и отбрасывание не согласующихся с минутными данными. Проверьте отчёт данных. Исторический спред отделён от задержки исполнения. Фиксированный «текущий» спред другого режима — сценарий, не всегда нижняя оценка: относительно истории он может быть высоким или низким.
Bid/ask, mid и цены поставщика. Не выводите тип цены из бесплатности API. Метаданные указывают bid, ask, mid, сделку либо иной ряд. В модели лонга относительно mid издержка спреда в пипсах — (спред входа + спред выхода)/2. При обоих спредах 1 пипс и 200 полных оборотах разница 200 пипсов до прочих издержек. С фактическими ask входа и bid выхода она уже в ценах. Dukascopy и TrueFX — примеры источников для проверки; название не отменяет проверки колонок, охвата и пропусков.
Закрытие свечи и внутрисвечное событие — разные правила. Касание может появиться и исчезнуть до конца свечи. Событие по закрытию ждёт завершения и получения. OHLC не восстанавливают весь порядок движения внутри интервала и не обосновывают заявленного процентного преимущества любого правила.
У финансирования есть знак и единица. Своп бывает отрицательным или положительным по продукту и стороне; знак для шорта USD/MXN или лонга USD/TRY не выводится из названий валют. Тест требует исторических спецификаций и дневных множителей, не одной текущей таблицы. Например, ценовой результат +80 USD, комиссии −7 USD и финансирование −18 USD дают +55 USD; при финансировании +18 USD результат +91 USD. Спред внутри фактических цен повторно не начисляется. Единицы и пересчёты описаны в статье 2.8.
Одна свеча, два возможных исхода
Модель лонга уже открыта по исполнению 1,1000. Следующая свеча по bid имеет OHLC: O = 1,1000, H = 1,1030, L = 1,0980, C = 1,1010. TP = 1,1020, обычный SL = 1,0990; предполагаются исполнение без разрыва ровно на уровне и отсутствие прочих издержек. Путь O→H→L→C первым достигает TP: +20 пипсов. Путь O→L→H→C — сначала SL: −10 пипсов. OHLC у них одинаковы.
При номинале 10 000 EUR результаты +20 либо −10 USD. Это не два исхода одной фактической сделки, а две траектории, согласующиеся с неполными данными. Исполнения входа и выхода уже учитывают сторону рынка, спред повторно не добавляется. Тестер, выбирающий порядок по OHLC, принимает условность и раскрывает её в отчёте. Младший TF или тики разрешают больше случаев, но пропуски остаются пропусками.
Mid и исполнение — два расчёта одного оборота
Модель EUR/USD: mid входа 1,1000, спред 2 пипса, значит ask 1,1001; исполнение покупки 1,1002. Mid выхода 1,1020, спред 4 пипса, значит bid 1,1018; исполнение продажи 1,1017. Номинал 10 000 EUR. Прибыль mid — 20 USD. Половины спредов стоят 1 + 2 = 3 USD; проскальзывание относительно ask/bid — 1 + 1 = 2 USD. Результат исполнений (1,1017 − 1,1002) × 10 000 = 15 USD согласуется с 20 − 3 − 2.
Комиссия оборота 2 USD и финансирование со знаком −1 USD дают чистые 12 USD. При общем условном курсе 4,00 PLN/USD это 48 PLN; реальный реестр использует курсы и моменты проводок отдельных сумм. Мы не считаем 15 − 3 − 2 повторно. CSV отделяет ориентир от фактических цен.
Как толковать результаты
Основные метрики бэктеста:
| Метрика | Что сообщает | На что смотреть |
|---|---|---|
| Профит-фактор (PF) | Сумма положительных ЧИСТЫХ результатов / модуль суммы отрицательных | Ноль не входит ни в одну сумму. Без убытков отношение не определено, а не доказывает бесконечное преимущество. PF 1,5 не универсальный порог. |
| Максимальная просадка | Наибольшее падение капитала счёта от прошлого пика | В валюте либо процентах от пика; зависит от частоты наблюдений. Одни закрытые сделки могут упустить риск открытых позиций. |
| Доля прибыльных исходов | Доля положительных исходов заданной выборки | 30% исходов по +3R и 70% по −1R дают +0,2R брутто за сделку. Издержка 0,25R за оборот меняет ожидание на −0,05R. Одни R:R и доля побед не доказывают будущей прибыльности. |
| Число сделок | Число наблюдений и реальное разнообразие | 100 сделок в одном движении USD ≠ 100 независимых наблюдений. Проверяйте кластеры, режимы и неопределённость: волшебного минимума нет. |
| Коэффициент Шарпа | Средняя избыточная доходность над ориентиром / стандартное отклонение доходности | Важны частота, ориентир, годовой пересчёт и временная зависимость. > 1 либо > 2 — ни тест качества, ни доказательство переобучения. |
Пример: плохой бэктест и его исправление
Модель оптимизации: порог RSI от 10 до 30 с шагом 1, SL от 30 до 80 пипсов с шагом 1, TP от 80 до 200 с шагом 1. Сетка содержит 21 × 51 × 121 = 129 591 сочетание, а не несколько дюжин. Считайте и брошенные попытки, и ручные правки правила. Лучший условный PF 2,8 на 2020–2025 — результат отбора в том наборе, не доказательство преимущества выбранных RSI 22 / SL 43 / TP 167.
Резкий пик вокруг одного сочетания — повод проверить чувствительность. Он не доказывает подгонки сам по себе: могут влиять издержки, малая выборка, смена режима. Отчитывайтесь о всей сетке и правиле выбора, не одной лучшей точке.
После подбора на всём 2020–2025 нельзя назвать 2024–2025 отложенной выборкой. Нужны новые будущие наблюдения либо иной заранее заданный план. У обучения, валидации и теста разные функции; после использования теста не оптимизируйте на нём вновь.
Различия теста и работы возникают из модели издержек, данных, исполнения или смены условий. Не всякий слабый реальный запуск доказывает подгонку и не всякий бэктест по определению оптимистичен. Сравнивать нужно одни правила с журналом сигналов, приказов и фактических исполнений.
Форвард-тест проверяет работу на новых наблюдениях. Срок не определяет представительность: несколько месяцев могут охватить мало событий одного режима. Демо проверяет логику и доступность, но исполнение может не соответствовать реальному счёту. Разложите худший результат на различия данных, исполнения, издержек и распределения самих событий.
Перемешивание закрытых исходов, например 1 000 перестановок 150 сделок, показывает условные траектории капитала той же выборки при фиксированных правилах размера. Оно не создаёт новых шоков или смены распределения и может удалить временную зависимость. При процентном риске или одновременных позициях сохраняйте их структуру. 95-й процентиль симуляции не гарантирует предела будущей просадки. Инструмент упражнения — симулятор Монте-Карло.
10. Python в скрининге и бэктестах
Python поддерживает свой реестр данных и тесты. Цена и сложность зависят от источников, охвата и сопровождения. Своему сканеру нужны обработка ошибок, версии зависимостей и мониторинг; статья даёт логический контракт, а не производственный код или обещание дешёвой готовой системы.
Собственная среда даёт контроль над несколькими частями процесса:
- Объединение источников. API брокеров и библиотеки данных дают разные инструменты и метаданные. До объединения рядов проверьте доступ, покрытие и пересмотры.
- Статистический анализ. Библиотеки рассчитывают тесты и распределения. Вопрос, опорное распределение, допущения зависимости и семейство попыток всё ещё нужно выбрать правильно.
- Гибкость бэктестов. Библиотеки backtrader и vectorbt тестируют портфельные стратегии многих пар, динамического распределения капитала и корреляций инструментов. У Pine Script и MQL здесь ограничения.
- Связанный процесс. Получение, отбор и уведомления могут иметь общий регистр. Исполнение требует отдельного слоя инструкций и подтверждений со своей обработкой повторов.
- Анализ настроений. Некоторые трейдеры пробуют автоматический анализ настроений новостей и отчётов как вход скрининга. Инструменты есть — от скриптов до API языковых моделей, но в розничной практике это ещё скорее эксперимент, чем готовое решение.
Цепочка в псевдокоде — данные, сканирование и архив. В нём нет токенов API или функций исполнения приказов. Та же логика реализуема в любой среде.
ПСЕВДОКОД ЦЕПОЧКИ — БЕЗ ФУНКЦИИ ОТПРАВКИ ПРИКАЗОВ
Загрузите фиксированную конфигурацию и полный версионируемый список символов.
Определите ожидаемые концы свечей по календарю источника, не часам компьютера.
Для каждого символа получите данные с component, start, end, complete,
received_at, revision и идентификатором источника.
Сохраните неизменяемый снимок данных и контрольную сумму.
Проверьте OHLC, единицу цены, непрерывность сессии и прогрев индикатора.
При ошибке запишите NO_DATA с причиной; не создавайте NO_SIGNAL.
По корректному снимку рассчитайте полное правило критериев.
Запишите исход каждого символа, в том числе не выполнившего условие.
Дедуплицируйте уведомления по version, feed, symbol, timeframe и end_UTC.
При исправлении добавьте запись, связанную с предыдущим снимком.
Сводка: expected, evaluated, missing, candidates и длительность сканирования.
Архивируйте ручное решение и время отдельно, не перезаписывая исход фильтра.
Сообщите о сбое процесса и недостающих символах, даже если кандидатов ноль.
До выбора источника проверьте лицензию, инструменты, сторону цены, время, полноту, ревизии и bid/ask. Мы не даём одной оценки всем данным Yahoo или бесплатным API. Библиотека чтения не улучшает данные автоматически и не предоставляет цен исполнения.
Повтор запроса данных и повтор отправки приказа — разные операции. Сканирование безопасно восстанавливает ключ и возвращает прежний исход. Слою исполнения нужны отдельный идентификатор инструкции и проверка статуса перед повтором; он вне показанного скринера.
11. Ловушки автоматизации
Автоматизация повторяет заданный процесс. Измерьте экономию времени проверки, сохранение покрытия или изменение операционных ошибок. Она может последовательно повторять ошибку; следующие проверки упрощают её выявление.
| Ловушка | Механизм | Как ограничить |
|---|---|---|
| Модель mid | Для двух исполнений разница — половина спреда входа плюс половина спреда выхода | Проверьте тип цены; не прибавляйте спред к фактическим ask/bid повторно |
| Фиксированный спред | Условный сценарий, который может быть слишком низким или высоким | История bid/ask и отчёт пропусков; одни «реальные тики» не гарантируют полноты |
| Пропущенные проскальзывание и комиссия | Чистый результат ниже валового, особенно на младших TF | Моделируйте проскальзывание консервативно, учитывайте комиссию в R |
| Заглядывание вперёд | Сигнал использует недоступные в момент решения данные: закрытие формирующейся свечи, будущий свинг | Доступные при решении входы с задержками подтверждения и доставки; реакция по более поздней доступной котировке |
| Переобучение | Параметры подогнаны к шуму одной истории | Мало параметров; вневыборочный тест; walk-forward |
| Множество попыток | Отбор лучшего варианта повышает риск ложного открытия | Регистрируйте все попытки, используйте подходящую поправку и неиспользованный тест |
| Ошибка выжившего | Видны лишь выжившие системы | Оценивайте процесс, не отобранные результаты |
| Перерисовка | Индикатор перерисовывает закрытую историю | Проверяйте индикатор вперёд; избегайте в правилах инструментов вроде ZigZag |
| Пропущенный своп | Издержки удержания съедают результат свинга | Учтите своп-пункты; тестируйте на данных с учтёнными издержками |
Переобучение — подгонка к прошлому
Переобучение — подгонка выбора к свойствам конкретной выборки, не сохраняющимся за её пределами. Это не синоним любого убытка первого дня. Оценить проблему помогают чувствительность параметров, число попыток и новые наблюдения.
Признаки возможной подгонки:[5]
- У стратегии много свободных параметров относительно числа сделок и доступной истории.
- Небольшая правка параметра — RSI 14 → RSI 15 — резко меняет результаты: хрупкость.
- Тест одного периода даёт отличный результат, другого — убыток.
- Высокие PF и Шарп требуют оценки неопределённости, числа проверенных вариантов и зависимости исходов. Ни меньше 100, ни больше 500 сделок сами по себе не определяют наличие преимущества. Проверьте также длину наблюдения, редкие крупные убытки и показатели на данных, не использованных для выбора правила.
Вневыборочный тест осмыслен, лишь если выборка не участвовала в выборе правила. В walk-forward после подгонки раннего окна оценивается следующее; пороги, обновления и объединение результатов записаны заранее. Положительный результат каждого окна не универсальное статистическое требование.
Перебор данных — data snooping
Для 50 независимых тестов истинных нулевых гипотез на уровне 5% вероятность хотя бы одного ложного отклонения — 1 − 0,95^50 = 92,3055%, ожидаемое число — 2,5. Это высокий риск, а не неизбежный исход. Варианты одних данных обычно зависимы, поэтому расчёт независимости не измеряет их вероятность.
Запишите семейство попыток до выбора победителя. При 50 тестах и семейном уровне 5% Бонферрони даёт порог 0,05/50 = 0,001 для каждого корректного p-значения. Он контролирует риск хотя бы одного ложного отклонения без требования независимости. FDR отвечает на другой вопрос, различие показано ниже. Никакая поправка p-значений не устанавливает прибыльности стратегии.
Бонферрони, FDR и предел вывода
Модель пяти корректных тестов одного заранее заданного семейства: упорядоченные p-значения 0,0004; 0,008; 0,019; 0,021; 0,070. Бонферрони при α = 0,05 даёт 0,01 и отвергает первые два. Бенджамини–Хохберг при q = 0,05 сравнивает с i × q / 5: 0,01; 0,02; 0,03; 0,04; 0,05. Последний удовлетворяющий индекс — 4, поэтому отвергаются первые четыре.
FWER контролирует вероятность хотя бы одного ложного отклонения, FDR — ожидаемую долю ложных среди всех отклонений, равную нулю при их отсутствии. Классический BH требует подходящей зависимости, например независимости либо заданной положительной зависимости. Мы не применяем его без проверки к произвольно коррелирующим FX-вариантам. q = 5% не означает 95% шанса работы каждой выбранной стратегии. Статья авторов (1995) и документация методов описывают охват процедур. Корректный тест требует заранее заданных вопроса, данных, эталонного распределения и статистики; здесь p-значения — условные входы.
Разбиение выборки учитывает время метки
В условном плане, фиксированном до анализа, обучение — 2018–2022, валидация — 2023, нетронутый тест — 2024–2025. При горизонте метки до пяти сессий наблюдение конца декабря 2022 с исходом в январе 2023 не относится к обучению до 31 декабря. Удалите пересекающие границу метки либо сдвиньте раздел по фактическому концу. Одного разделения дат входа мало.
Исторические цены до границы могут прогреть индикатор в начале теста, если были известны тогда. Масштабирование, пороги и выбор инструментов не подгоняют по будущему сегменту. Валидация служит отбору, тест — однократной оценке; изменение правила по тесту уже расходует его. Walk-forward требует тех же принципов каждого окна и заранее записанного обновления. Калибровке вероятностей тоже нужен отдельный сегмент: восемь событий из десяти прогнозов 0,8 в малой группе не доказывают ни общей калибровки, ни прибыльности.
Точность, полнота и издержки пропуска
Модель 100 независимо размеченных случаев: эталонный паттерн положителен в 20, отрицателен в 80. Скринер даёт 15 уведомлений: 12 совпадают с эталоном, 3 ложные; пропущены 8 положительных. Точность = 12/15 = 80%, полнота = 12/20 = 60%, специфичность = 77/80 = 96,25%. Финансовый результат из этих трёх мер не следует. Эталон независим от фильтра; мы не метим положительным всякий вручную выбранный поздний выигрыш.
Если эталон использует будущий исход, метка доступна лишь в конце горизонта. Она не влияет на прошлый сигнал и не попадает преждевременно в обучение. Скачайте пересчитанные модели; все числа блока условны.
Ошибка выжившего в готовых EA
Обзор лишь продаваемых и опубликованных систем пропускает снятые попытки. Сравнению нужны известная совокупность и реестр неудачных версий. Число «тысяч» снятых EA и примеры результатов инфлюенсеров неизвестны; их не используют как доказательство.
Иллюзия контроля
Автоматизации нужен мониторинг процесса, свежести данных и необработанных ошибок. Одна ночная работа не определяет ни проскальзывания, ни числа убытков. Тревоги сообщают и о пропусках или остановке сканирования, не только о сетапе.
Чёрный ящик
Без документации трудно определить, чем вызвана смена результатов: данными, правилом или исполнением. Система может перестать отвечать ожиданиям; нужны условие остановки и процедура оценки. «До сих пор работала» мало.
Перерисовывающие индикаторы
Отличайте изменение открытой свечи, позднее подтверждение свинга, исправление данных и переписывание прошлого сигнала. Храните снимок значения со временем оценки и сравнивайте с поздней историей. Одно название ZigZag не определяет использование; проблема — точка до подтверждения или скрытые изменения.
Проп-фирмы и автоматизация
Правила проп-фирм договорные, различаются по программам и этапам. Мы не заявляем, что многие фирмы запрещают всю автоматизацию. Например, FTMO описывает разрешение алгоритмов и EA с ограничениями программы. Проверьте текущие правила, природу счёта, включая симулируемые, лимиты и запреты; принятие скринера не означает любого способа исполнения.
12. Что не стоит автоматизировать в начале
До автоматизации исполнения опишите действия за пределами сигнала. Список выделяет задачи отдельного правила и теста; ручное исполнение не объявляется всегда эффективнее.
- Управление позицией. Задайте размер позиции, изменения стопа и частичные закрытия до автоматизации. Практика выявляет неясные решения, но ручное исполнение не доказывает превосходства правила.
- Макрокалендарь. Скринер учитывает NFP при корректном расписании и блокирующем правиле. Он не предсказывает спред или содержание ещё не вышедшего объявления. Отсутствие календаря — явное ограничение, не свойство всех автоматических систем.
- Выбор набора инструментов. Задайте и версионируйте список до теста. Исключение слабых пар после результата — ещё одна попытка отбора. Измеряйте свойства пар на заданных данных, не приписывая постоянные черты.
- Выходные и перерывы. Фильтр спреда может остановить новые приказы, но не ограничивает убыток разрыва открытой позиции. Сокращение номинала снижает чувствительность к цене; обычный стоп цены не гарантирует. Опционный хедж требует отдельного договора и счёта, не одного обозначения «хедж». Риск перерывов — в статье 4.4.
- Состояние счёта. Проверьте продукт, режим хеджирования/неттинга, маржу новой инструкции и закрытие при недостаточном обеспечении. Очерёдность ликвидации зависит от поставщика; наибольший убыток не объявляется универсальным первым закрытием. Маржа и защита клиента отдельно описаны в статье 2.6. Возможность принять приказ сейчас не гарантирует последующего удержания позиции.
Автоматизируйте чёткие повторяемые действия и храните след. Сканирование, уведомления, решения и исполнение — этапы с разными ошибками и границами. Быстрое повторение не улучшает правило, а позволяет последовательно применять и тестировать.
13. Сравнение инструментов
| Инструмент | Язык скриптов | Скрининг | Уведомления | Бэктест | Автоисполнение | Издержки (ориентир) |
|---|---|---|---|---|---|---|
| TradingView — базовый тариф | Pine Script | Фильтры платформы | По текущему тарифу | Эмулятор стратегии | Сам скрипт стратегии не отправляет приказы брокеру через встроенную интеграцию | Проверьте тариф и данные |
| TradingView — платные тарифы | Pine Script | Охват зависит от инструмента | По текущему тарифу | Эмулятор стратегии | Webhook требует отдельного слоя исполнения; интеграция не превращает скрипт в EA автоматически | Текущие цены |
| MT4 | MQL4 | Свои индикаторы | Да: окно, push, почта | Strategy Tester (1 символ) | Советники EA | 0 USD от брокера |
| MT5 | MQL5 | Свои индикаторы | Да: окно, push, почта | Strategy Tester (мультивалютный) | Советники EA | 0 USD от брокера |
| cTrader | C# / инструменты платформы | По настройке | По настройке | Тесты cBot | cBot — отдельная логика исполнения | Условия платформы и поставщика |
| Своя среда | Например, Python | Правило автора | Своя инфраструктура | Модель автора / библиотеки | Отдельный слой API | Данные, сопровождение и инфраструктура |
Таблица описывает функции, не рейтинг качества. Лицензия, данные, VPS и транзакционные издержки — отдельные статьи. Лимиты и цены сверяйте с текущей документацией.
- Основной таймфрейм: D1 — здесь сканируете и анализируете. Контекст — с W1.
- Список наблюдения: выберите версионную совокупность, которую можете проверять и наблюдать. Число попавших в активный список — выход правила, а не принудительная цель.
- Два фильтра. Например, EMA 200 и RSI 14 как явно заданные преобразования цены. Пороги — условности для оценки, не доказанное удаление большей части шума.
- Для начала 1 тип уведомления: ценовые у зон S/R недельного графика. Индикаторные добавите позже.
- Начните с проверяемого процесса. Скринер и одно правило оповещения — посильное первое упражнение. Добавляйте исполнение после определения состояния счёта и обработки ошибок.
- Практика процесса и форвард-тест. Два-три месяца демо могут быть условным сроком практики работы, регистрации и соблюдения правила, но не достаточным минимумом валидации. Число и период наблюдений зависят от частоты событий, зависимости и изменчивости исходов. Демо не воспроизводит реальное исполнение автоматически, а истечение срока не гарантирует ни представительности, ни прибыли.
Размер позиции — за рамками статьи
Выбор сетапа без верного размера позиции — половина дела, но формулы, издержки в бюджете риска и числовые примеры относятся к разделу 9. Интерактивный калькулятор размера позиции и симулятор Монте-Карло находятся в разделе инструментов.
Фиксированное правило на реальных данных: закрытие за диапазоном или только тень?
Свеча может пересечь прежний максимум и закончиться выше него либо вернуться внутрь. Описывает ли разница разные дальнейшие изменения в этих записях? Мы зафиксировали сравнение до расчёта сводки. Это ретроспективное описание истории одного поставщика. Некоторые периоды уже были в учебных примерах; ни дата плана, ни временное разделение не создают невиданной контрольной выборки.
Вход — по 6000 неизменённых записей Bid H1 EUR/USD, GBP/USD и USD/JPY ICMarketsSC-Demo / MT5. В датах кандидатов регистр содержит 17995 записей и 3140 односторонних кандидатов. Период пропуска выбирает 1086; у 1039 есть непрерывный исход из шести записей, 47 пересекают будущий разрыв времени. Эти 47 сохраняются в подсчёте, а не исчезают.
| Направление · категория | Доступно / выбрано | Среднее | Медиана | Доля > 0 |
|---|---|---|---|---|
| ВВЕРХ · закрытие | 271 / 280 | -0,0689 | -0,1433 | 0,4613 |
| ВВЕРХ · тень | 258 / 273 | 0,2077 | 0,0577 | 0,5078 |
| ВНИЗ · закрытие | 226 / 236 | 0,0934 | -0,1256 | 0,4823 |
| ВНИЗ · тень | 284 / 297 | -0,0152 | -0,2569 | 0,4472 |
Положительное изменение со знаком следует направлению нарушения, отрицательное идёт против него. Среднее, медиана и доля выше нуля отвечают на разные вопросы. Для «ВНИЗ · закрытие» среднее положительно, медиана отрицательна, а положительных наблюдений меньше половины. Это не доли прибыльных сделок после издержек.
Точное правило и ограничения сравнения
Для кандидата t зафиксируйте самый высокий High и самый низкий Low предыдущих 20 полных H1. Требуйте часовую непрерывность от t−21 до t; самая старая запись даёт прежний Close для True Range. Сначала исключите нарушение обеих границ. Иначе классифицируйте Close строго снаружи как CLOSE, пересечение High/Low с Close внутри, включая равенство, — как WICK. Одно равенство экстремума не является нарушением.
Возьмите первого кандидата символа, затем пропустите следующие шесть индексов независимо от доступности будущего исхода. Лишь после отбора проверьте следующие шесть записей на точный часовой шаг. Измерьте направление × (C на t+6 − C на t) в пипсах и единицах среднего арифметического TR предыдущих 20 записей. Кандидат не входит ни в опорный диапазон, ни в знаменатель.
График объединяет события, поэтому символы с большим числом доступных событий весят больше. Окна исходов одного символа не пересекаются, но 808 соседних пар событий имеют общую прежнюю историю, а доступные окна разных пар пересекаются по времени 950 раз. Июльские группы используют дату кандидата; один исход пересекает границу. Зависимости и структурированные по времени разрывы не допускают независимой или причинной интерпретации. Здесь нет исполнений, допущений спреда, доходности счёта или заявлений о статистическом преимуществе.
Все 48 строк сводки (CSV) · Полный регистр классификаций (CSV) · Выбранные события и недостающие исходы (CSV) · Метод и инструкции воспроизведения · Источники, фиксированный план, код и результаты (ZIP).
Итоговый практикум: отделите решение от следующих шести свечей
Это первый выбранный EUR/USD UP_CLOSE с 1 сентября 2026 года с доступным исходом: H1 с открытием 3 сентября 19:00. Более ранние UP_CLOSE 2 сентября 16:00 и 3 сентября 15:00 исключены существующим периодом пропуска. Случай выбран по хронологии и доступности, а не знаку или размеру будущего движения. Обозначим подходящую H1 буквой P.
При решении диапазон предыдущих 20 записей — 1,15826–1,16302, их средний True Range — 9,325 пипса. P закрывается на 1,16368 выше фиксированного верха. Последняя подходящая H4 открывается в 16:00 и заканчивается в 20:00 вместе с закрытием H1 P. Это более широкий вид той же истории Bid, а не независимый подтверждающий голос. Обе окончательные записи ещё должны поступить после конца интервалов.
До раскрытия следующей свечи: запишите соответствие, самое раннее время оценки и неизвестное. В упражнении прекратите наблюдение на первом следующем H1 Close не выше 1,16302. Сохраняйте границу. Это аналитическое условие прекращения, без ордера, исполнения стопа или размера позиции.
Кадр 0: до H1 с открытием 2026-09-03 19:00
P соответствует UP_CLOSE лишь после поступления окончательной записи, не раньше 20:00. Продолжение скрыто. Одно соответствие не даёт исполнимой Ask или издержек.
EUR/USD Bid H1/H4. Исходное время MT5; виден лишь этот начальный фрагмент. Контекст H4 фиксирован. Раскрыть запись 1 из 6
Кадр 1: до H1 с открытием 2026-09-03 20:00
Раскрытый Close — 1,16328, выше 1,16302. Условие прекращения наблюдения не наступило; это не прогноз следующего Close.
EUR/USD Bid H1/H4. Исходное время MT5; виден лишь этот начальный фрагмент. Контекст H4 фиксирован. Раскрыть запись 2 из 6
Кадр 2: до H1 с открытием 2026-09-03 21:00
Раскрытый Close — 1,16346, выше 1,16302. Условие прекращения наблюдения не наступило; это не прогноз следующего Close.
EUR/USD Bid H1/H4. Исходное время MT5; виден лишь этот начальный фрагмент. Контекст H4 фиксирован. Раскрыть запись 3 из 6
Кадр 3: до H1 с открытием 2026-09-03 22:00
Close 1,16286 не выше 1,16302. Наблюдение заканчивается после закрытия этой свечи 22:00, не раньше 23:00. Прежняя классификация UP_CLOSE остаётся верной.
EUR/USD Bid H1/H4. Исходное время MT5; виден лишь этот начальный фрагмент. Контекст H4 фиксирован. Раскрыть запись 4 из 6
Кадр 4: до H1 с открытием 2026-09-03 23:00
Теперь Close — 1,16257. Наблюдение уже завершилось на свече 22:00; новая запись не меняет момента, когда условие стало известно.
EUR/USD Bid H1/H4. Исходное время MT5; виден лишь этот начальный фрагмент. Контекст H4 фиксирован. Раскрыть запись 5 из 6
Кадр 5: до H1 с открытием 2026-09-04 00:00
Теперь Close — 1,16229. Наблюдение уже завершилось на свече 22:00; новая запись не меняет момента, когда условие стало известно.
EUR/USD Bid H1/H4. Исходное время MT5; виден лишь этот начальный фрагмент. Контекст H4 фиксирован. Раскрыть запись 6 из 6
Кадр 6: до H1 с открытием 2026-09-04 01:00
Шестой Close — 1,16232: −13,6 пипса от P, или −544/373 (около −1,4584) единицы прежнего среднего TR20. Это наблюдённое изменение Bid, а не восстановленный убыток сделки.
EUR/USD Bid H1/H4. Исходное время MT5; виден лишь этот начальный фрагмент. Контекст H4 фиксирован.
Каждый кадр масштабируется по собственным видимым ценам; будущий экстремум не задаёт начальные оси. H4 остаётся фиксированной на решении. Сохраняются исходные метки открытия MT5, смещение брокера не проверено, фактические времена получения не измерялись. Для моделирования исполнимой реакции всё ещё нужна более поздняя котировка.
Данные практикума и временные пояснения · Все 28 записей H1 с раскрытым продолжением (CSV). Полный регистр и ZIP выше сохраняют исключения и ход расчётов.
Вопросы и ответы — автоматизация и скрининг в ТА
Нужно ли программировать для скрининга?
Нет. Встроенные скринеры TradingView и панели MT4/MT5 работают по принципу «выбери фильтры, пороги, получи список». Pine Script и MQL добавляют свои условия и составные уведомления, но базовый скрининг не требует кода.
Стоит ли покупать готового советника EA?
Оценке нужны документированные правила, полная история попыток и изменений, модель издержек и новые наблюдения. Даже проверенная история счёта не гарантирует представительности или будущего результата. Красивый тест либо отзыв не заменяют проверки.
Сколько уведомлений ставить одновременно?
Универсального числа нет. Запишите возможности обзора, истечение условий и уберите дубликаты. Можно сканировать весь набор без сообщения после каждой свечи в том же состоянии.
Насколько надёжен бэктест форекса?
Зависит от данных, правил и модели исполнения. OHLC не устанавливает порядка SL/TP одной свечи. Режим реальных тиков может заполнить пропуски сгенерированными данными. Бэктест не прогнозирует результат; форвард-тест проверяет новые наблюдения с ограничениями длины и разнообразия.
TradingView или MT4/MT5 для скрининга?
Сравните источник и границы свечей, фильтры, уведомления и охват тестера. TradingView уведомляет с сервера; локальный MT требует работающей платформы либо VPS. Один стратегический скрипт TradingView не является встроенной системой торговли у брокера.
Python лучше Pine Script для бэктестов?
Своя среда даёт контроль данных и модели, но переносит на автора ответственность за верность. У тестера платформы заданные условности и ограничения. Выбор не устраняет заглядывания вперёд, ошибок единиц или пропущенных издержек.
Нужно ли запускать скринер ежедневно?
Если правило оценивает каждое закрытие D1, сканирование охватывает каждое. Просмотр лишь по понедельникам и четвергам пропускает условия других дней, если их не регистрирует автоматика. Разделяйте частоту ручного обзора и полного сканирования.
Источники
Первичные источники
- Роберт Пардо, Оценка и оптимизация торговых стратегий, 2-е изд., Wiley, 2008 — методика бэктестов, walk-forward, распознавание подгонки; ключевая работа о проверке автоматических стратегий.
- Эрнест П. Чан, Количественный трейдинг: как создать собственный алгоритмический торговый бизнес, 2-е изд., Wiley, 2021 — практическое руководство построения количественных стратегий от скрининга до алгоритмического исполнения.
- Перри Дж. Кауфман, Торговые системы и методы, 6-е изд., Wiley, 2020 — энциклопедический обзор торговых систем: фильтры тренда, скрининг, тесты, оптимизация.
- Андреас Ф. Кленоу, Следуя за трендом, Wiley, 2013 — систематическая трендовая торговля: отбор инструментов, портфельный бэктест, управление позицией; практика автоматизации.
Дополнительная литература
- Дэвид Аронсон, Технический анализ на основе доказательств, Wiley, 2007 — статистическая проверка ТА: искажение перебора данных, значимость, множественные сравнения (data snooping); важная литература для тестирующих стратегии.
- Маркос Лопес де Прадо, Достижения финансового машинного обучения, Wiley, 2018 — дополнительная литература; непрочитанные главы не приводятся в подтверждение правил.
- Александр Элдер, The New Trading for a Living («Новый трейдинг ради жизни»), Wiley, 2014 — дополнительная литература; непрочитанные главы не приводятся в подтверждение правил.
- Кэти Лин, Внутридневная и свинг-торговля на валютном рынке, 3-е изд., Wiley, 2016 — дополнительная литература; непрочитанные главы не приводятся в подтверждение правил.
- Лукас Мэнкхофф, Марк П. Тейлор, «Упорная страсть профессионалов валютного рынка: технический анализ», Journal of Economic Literature, том 45, № 4, 2007 — обзор применения ТА в форексе; контекст обсуждения автоматизации у профессиональных валютных трейдеров.
- Эндрю У. Ло, Адаптивные рынки: финансовая эволюция со скоростью мысли, Princeton University Press, 2017 — гипотеза адаптивных рынков: почему прежние стратегии перестают работать; выводы для автоматизации и бэктестов.
Источники учреждений и документация
- Швейцарский национальный банк (2015), «Швейцарский национальный банк отменяет минимальный курс и снижает ставку до −0,75%», пресс-релиз, 15 января 2015.
- FCA (2015), «Информация для клиентов Alpari (UK) Limited» — переход Alpari (UK) под специальное управление.
- Комитет BIS по рынкам (2017), «Внезапное событие в стерлинге 7 октября 2016», январь 2017 — анализ события: низкая ликвидность, приказы, алгоритмические реакции и расхождения платформ.
- TradingView, Документация Pine Script — официальная документация языка: скрипт на текущей и закрытой свече (barstate), уведомления, strategy().
- MetaQuotes, Справочник MQL5 — официальная документация MQL5: индикаторы, советники EA, Strategy Tester.
- ESMA (2018), «ESMA согласилась запретить бинарные опционы и ограничить CFD для защиты розничных инвесторов», 27 марта 2018 — пакет вмешательства в продукты: лимиты плеча, защита отрицательного баланса, предупреждения; надзорные исследования указывали убытки 74–89% розничных счетов CFD.