Недавно нам написал 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.
Звучит банально, но именно на этом ломается огромное количество торгового софта. Люди спорят о коде, хотя сначала надо договориться о другом:
Когда именно считается, что сигнал возник? Кто владеет состоянием позиции?
Что происходит после restart? Что считается успешным close — намерение программы или ответ брокера?
Что должна сделать система, когда действие категорически не должно происходить?
У Arnold на StratCoreAlpha весь подход построен примерно вокруг этого: сначала сформулировать поведение и failure cases, потом уже писать или чинить код. Причём доказательства он старается оставлять публичными: test harnesses, MQL5 utilities, Pine diagnostics, cTrader preflight, логи и acceptance cases.
Мы его не нанимали для разработки и не покупали у него готовый EA. Наш опыт был интереснее: дали внешнему инженеру рассуждать о реальной системе, часть его гипотез оказалась верной как направление проверки, часть — нет, потому что он не видел серверную часть. Когда выяснялось, что предположение неверное, менялась гипотеза, а не факты. По-моему, это и есть нормальная инженерия. Не тот хорош, кто заранее знает ответ. Хорош тот, кто умеет поставить тест так, чтобы системе пришлось ответить самой.
А практически к Arnold можно прийти не только за аудитом чужого кода. StratCoreAlpha занимается исправлением воспроизводимых ошибок в MQL4/MQL5, разработкой MT5 Expert Advisors по уже определённым торговым правилам, переносом и сверкой поведения между Pine Script, MT4/MT5 и другими платформами, а также проектированием автоматизации для cTrader. Общая идея везде одна: сначала точно договориться, что программа должна и не должна делать, потом написать код и оставить клиенту исходник вместе с проверяемыми тестами. Если кому-то нужен именно такой, а не шаманский подход к торговым роботам: https://stratcorealpha.com
Еще по теме:
Подпишитесь на нашу рассылку, чтобы получать уведомления о новых обновлениях, информации, скидках и т. д.