Недавно нам написал Arnold Holm из StratCoreAlpha. Предложил проверить несколько пограничных сценариев в нашем MT5 EA: reconnect, restart, Profit Lock, состояние позиции. Сам аудит нам был не особенно нужен, но письмо оказалось достаточно конкретным, чтобы вместо обычного «спасибо, неинтересно» начать разбирать его предположения.
И тут случилась полезная вещь.
Глядя только на EA, довольно легко предположить, что после reconnect старая команда может прийти ещё раз и потребуется механизм duplicate suppression. В нашей архитектуре такого сценария вообще нет: TradingView отправляет alert, получает HTTP 201 примерно за 35 мс, дальше команда живёт уже внутри нашей очереди. Старый alert после reconnect не воспроизводится из памяти.
Мы это объяснили Arnold. И вот тут проявилось то, что я считаю главным признаком нормального технического специалиста: он не стал защищать красивую гипотезу только потому, что уже её сформулировал. Он поменял модель тестирования и разделил то, что можно проверить внутри EA, и то, что требует наблюдения за всей цепочкой TradingView >>> WebSocket server >>> EA >>> broker.
Трендовая линия — самый субъективный инструмент технического анализа. Дайте одному графику десять трейдеров — получите десять разных линий. Кто-то ведёт по теням, кто-то по телам, кто-то «на глаз подгоняет» так, чтобы линия подтверждала уже открытую позицию. Это не анализ, это гадание с линейкой.
А раз линию рисует человек — её нельзя ни протестировать, ни автоматизировать. Каждый раз получается новая.
Интересная инженерная задача — формализовать «настоящую» трендовую линию в строгую геометрию: набор чётких математических условий, по которым машина строит линию объективно, одинаково и, главное, честно — не заглядывая в будущее. Никаких индикаторов, только цена, экстремумы и ATR.
В этой статье разберём детектор, который это делает. Он находит трендовые поддержки и сопротивления по фрактальным пивотам, отсеивает всё, что «уровнем» на самом деле не является, ловит пробой телом с фильтрами качества — и присылает сигнал в Telegram с нарисованным скрином: линия, якоря, свеча-пробой, уровни входа, стопа и тейка.


Ничего конкретного, так, локальный поток мыслей.
Немножко стриггерено соседними постами про AI, убивающий алго, или трейдинг в целом, или рынок, не помню уже.
Буду стараться, говоря про AI оперировать понятием LLM, это намного предметней.
Исчезнет ли возможность зарабатывать на рынке в течение 10 лет — думаю, нет. Исчезнет ли рынок в течение 10 лет – думаю нет. Станет ли зарабатывать сложнее (в другой формулировке: станет ли рынок эффективней) – думаю, да, это общий тренд, он и до LLM был. Другое дело, что, возможно, не корректно оценивать просто эффективность рынка в вакууме. Корректно оценивать эффективность в контексте имеющихся технологий и знаний, с этой точки зрения эта некая «относительная эффективность» вероятна колеблется в районе константы. Другими словами, ты просто используешь другие технологии, подходы, концепции, вычислительные мощности для извлечения эджа, это делает твои действия в абсолютном значении намного более эффективными, но в относительном ты, по сути, стоишь на месте.

Продолжите выполнение сценария. Следующая строка устанавливает стоп-лосс:
Stop = 4*ATR(100);
Stop — это предопределенная переменная. Zorro уже «знает» его, поэтому его не нужно определять с помощью var. Он определяет стоп-лосс, т.е. максимально допустимый убыток. Позиция автоматически продается, если она теряет больше указанной суммы. Здесь этот предел задан 4*ATR(100). Функция ATR является традиционным индикатором — Average True Range.

function run()
{
vars Price = series(price());
vars Trend = series(LowPass(Price,500));
Stop = 4*ATR(100);
if(valley(Trend))
enterLong();
else if(peak(Trend))
enterShort();
}
Это уже целая система. Мы видим, что главная функция теперь называется «run» вместо «main».