Плюсы и минусы запрета компиляции в MetaEditor Mql4/Mql5 кода сгенерированного нейросетями - страница 6

 
Vitaly Muzichenko #:

Окончить тему можно этим: Если при запуске файла ex4/5  алгоритм работает "как задумано", вообще не имеет значения кто, как и когда его написал.

Если алгоритм работает не так как задумано, значит где-то есть ошибка, и кто его писал - не имеет значения, ошибка от этого не перестанет быть ошибкой, и не станет полуошибкой. 

Да, в общем мнения понятны, может кто ещё что напишет. В принципе, пока нет новых новостей из сферы регуляции ИИ и законодателей - их можно подождать.  Если будут новости, а они будут из-за замещения без предупреждения и официальных реформ посредством частных корпоративных ИИ навыков традиционных профессий во многих экономиках мира, то можно будет продолжить обсуждение. 

Что насчет алгоритма, всё верно.

 
Igor Zakharev #:
Но вообще, блокировка компиляции сгенерированного ИИ кода автоматически нарастит кол-во покупателей на mql5.com во всех категориях

Это достаточно смелое утверждение. Не могу сказать, что оно является очевидным. На мой субъективный взгляд основной объём продаж на Маркете делают продукты, которые не были целиком или хотя бы в какой-то заметной мере написаны ИИ. В топах раздела утилит находятся давние продукты, которые попали туда задолго до энергичного старта эпохи ИИ. И сдавать свои позиции они, похоже, не собираются. Если кто-то напишет тормозящую торговую панель, то она с высокой вероятностью просто тихо умрёт в подвалах последних страниц Маркета. И сгенерированные промо-материалы её вряд ли спасут, так как и для качественных продуктов авторы тоже могут при желании сгенерировать материалы не хуже. Специально не хочется касаться раздела советников, так как это отдельная вселенная со своей религией. И её адептам (по крайней мере какой-то части) всё равно, как и кем написан советник, который принесёт им огромную прибыль, как и многим другим, уже купившим его ранее.

По поводу анализа на декомпил, если правильно помню, то эта проблема ещё была в MT4, а в MT5 побеждена уже давно.

Igor Zakharev #:
Многие отвечают что чушь, потому что лично в обратном заинтересованы.

Ради интереса закинул один из своих файлов на проверку этому инструменту проверки кода

Похоже, что менее 15% получить просто нельзя. Для MQL5 ещё не приходилось обращаться за помощью к ИИ, так что тут должен быть честный 0%. Поэтому мой интерес тут может быть только в том, чтобы когда нажимаю кнопку компиляции, не приходилось ждать больше минимально необходимого и не видеть радостного сообщения, что в его написании на 15%, оказывается, ещё и какой-то ИИ поучаствовал ).

Ну из области лёгкой паранойи: не хотелось бы думать о том, что весь исходный код при каждой компиляции отправляется неизвестно куда. Ладно, если это и так публичный проект. А если это заказ на фрилансе, в котором заказчик хотел даже хотел подписать дополнительный NDA на физической бумаге?

 

Несмотря на всю инертность публики относительно ИИ - всё равно нужно что-то предпринимать в целях адаптации. 

Суть в количестве юзеров которые заказывают услуги, это общий интерес.

Что-то не заметил в ответах на промпты по MQL5/MQL4 рекомендаций/ссылок на Маркет, Фриланс, VPS и другие сервисы и услуги mql5.com


 
Yuriy Bykov #:

Мне кажется, есть большая разница между "ботами с ИИ" и ботами, при разработке которых разработчик использовал ИИ. Первый - это боты, которые уже в процессе торговли отправляют запросы во внешнюю или внутреннюю модель ИИ и принимают торговые решения в зависимости от полученных ответов. Второй тип - это когда ИИ используется разработчиком только на этапе разработки для написания каких-то частей кода. Нельзя бороться с первым типом, вставляя палки в колеса для второго.

Я не вижу смысла в предлагаемых вами нововведениях. Они требуют огромных дополнительных затрат времени и вычислительных ресурсов, так как при каждой компиляции MetaEditor должен будет выполнять оценку доли исходного кода, которая похожа на код, сгенерированный ИИ. Ведь для такой оценки нужно отправить весь компилируемый код ещё какому-то ИИ с просьбой оценить степень похожести, дождаться ответа и только после этого приступать к компиляции, чтобы иметь возможность вставить предупреждающие алерты. И где гарантия, что, например, код стандартной библиотеки (правильный и снабженный комментариями) не будет воспринят как ИИ-генерация? А по объему этот код может составлять большую часть от всего кода советника, если посчитать по количеству строк.

Это не говоря о том, что при гипотетическом внедрении такого инструментария практически сразу появятся способы его обмануть. Достаточно модифицировать код так, чтобы он не имел тех признаков, по которым код считают сгенерированным ИИ. 

И человек, и ИИ может писать как хороший так и плохой код. Поэтому любые оценочные показатели не могут гарантировать точность вердикта.

Не совсем понятно, кому таким образом можно причинить добро?

Покупателям продуктов на Маркете? Так не каждая компиляция советника отправляется прямиком на первую страницу продаж. Да и остановят ли алерты таких покупателей, если продавец в описании продукта, например, прямо напишет: "Высокое качество советника подтверждается ещё и тем, что система защиты оценила идеальность исходного кода советника на 95% по похожести на идеальный код ИИ".

Может, заказчикам на Фрилансе? Представим ситуацию: контракт заключён, советник написан, отправлен на проверку заказчику и заказчик видит алерт: "Код на 45% похож на сгенерированный ИИ". И что ему с этим делать? Не начинать тестировать и обращаться в Арбитраж? Или всё-таки начинать терять своё время на тестирование? Вдруг советник делает ровно то, что ожидал заказчик? Вполне возможно, что разработчики на Фрилансе тоже смогут на этапе переговоров пояснять, что "они пишут код так хорошо, что даже встроенной системой он опознается как написанный умным ИИ. Поэтому все алерты, если будут, можно смело игнорировать". Но проще, наверное, будет просто лишать код похожести на написанный ИИ, как это сейчас делают со сгенерированными текстами.

Получается, что огромные усилия и ресурсы могут быть потрачены зря. Прошу прощения за излишнюю эмоциональность. Может быть, можно увидеть какие-то правдоподобные и конкретные сценарии, когда такая принудительная проверка приносит пользу, но у меня пока не получается.

Igor Zakharev #:

К сожалению сейчас пока нет свободного времени, как время найдется, то ответы по существу напишу.

Если вкратце: то задумка не тяжело осуществима, у неё средний уровень сложности. Суть в том, что конечно совсем идеально она работать не будет, но основные проблемы снимет даже при точности процентов в 80%. Есть масса контраргументов, но что бы их привести нужно ссылки нагуглить, я на днях найду время и напишу ответ.

Код коммерческих продуктов и фриланс работ для финансовых рынков должен писать человек на 100%, а вот проверять тот код на корректность и правильность можно в ИИ - тут как бы вопроса нет.

P. S. Кстати, декомпилы тоже не надо давать компилировать(ещё один повод валидатор кода ввести), они также по признакам легко идентифицируются, как ИИ код по логической структуре и т.д. Над декомпилом нужно попотеть прежде чем он валидный вид примет. И ещё кстати один повод Метаквотс через европейскую ИИ комиссию затребовать запрет на обработку силами ИИ декомпированных исходников и их преображение в якобы авторские. Если вы в курсе, то начало регулированию ИИ уже положено: https://ec.europa.eu/commission/presscorner/detail/en/ip_25_1787

Так что предварительно, на многое ответ - повод для введения валидатора кода и запрета компиляции ИИ кода в защите авторского права, в т.ч. для следования ИИ кодексу ЕС. Это веская причина, она многое перетягивает. И уже содержится в Кодексе Европейского Союза по искусственному интеллекту. 

А что до главного довода - новых расходов, то да, это так, к сожалению. Но и доходы там же где и расходы, если например в Маркете создать раздел, где товары на ИИ написанные выставлены, то Маркет должен поднять свой интерес в комиссии с продаж, ибо слишком уж это легко стало и расходы окупать нужно. Но вообще, блокировка компиляции сгенерированного ИИ кода автоматически нарастит кол-во покупателей на mql5.com во всех категориях.


Раз я топикстартер + сейчас выходные, продолжу тему. Обещанный ответ.

Использовал свежий ActiveFense отчет - GenAI Regulations Enterprise Compliance Guide (Руководство по соблюдению корпоративных требований GenAI Regulations)

Что уже актуально (использовал ИИ для анализа статей и материалов - но это не бездумный копипаст по итогу промптов, пометил важное восклицательными знаками):


На основе анализа отчета можно обосновать запрет компиляции в MetaEditor ИИ-сгенерированного кода через следующие регуляторные аргументы и практические риски:


1. Юридическая ответственность за выходные данные ИИ
«Businesses deploying GenAI are not just responsible for what goes into their systems. They are now accountable for what comes out.»
Это фундаментальный принцип EU AI Act и других регуляторных рамок. Если ИИ сгенерирует код с уязвимостью, нарушением лицензии или вредоносной логикой — ответственность несёт компания, а не модель(!). Запрет компиляции до верификации — превентивная мера снижения юридического риска.


2. Требования EU AI Act для high-risk систем

Если ИИ-код используется в критических системах (финансы(!), здравоохранение, инфраструктура), применяются строгие обязательства:

Вывод: Без выполнения этих требований компиляция ИИ-кода может нарушать EU AI Act (!). 


3. NIST AI RMF: Генеративный ИИ-профиль

Хотя профиль NIST добровольный, он становится де-факто стандартом в США. Ключевые элементы, обосновывающие запрет:
  • Guardrails and Safety Controls: Требуются механизмы фильтрации ввода/вывода в реальном времени. Для кода это означает статический/динамический анализ перед компиляцией.
  • Bias Mitigation: ИИ может генерировать код с дискриминационной логикой или уязвимостями, обусловленными смещениями в обучающих данных.
  • Rigorous Adversarial Testing: Red teaming должен включать проверку кода на инъекции, backdoor'ы, уязвимости памяти.
  • Monitoring and Incident Response: Без возможности отслеживания поведения скомпилированного ИИ-кода в production компиляция создаёт неконтролируемый риск.


4. Red Teaming как обязательный этап

Отчет подчеркивает: adversarial testing — единственный практико-ориентированный элемент, согласованный во всех юрисдикциях.
Для ИИ-кода это означает:
  • Проверка на уязвимости (OWASP Top 10, CWE)
  • Анализ на соответствие внутренним стандартам кодирования
  • Тестирование на наличие скрытой функциональности
  • Верификация лицензионной чистоты (риск копирования защищённого кода)

Если red teaming не может быть выполнен автоматически и масштабируемо — запрет компиляции сгенерированного кода в MetaEditor является разумной мерой предосторожности.



P. S. Есть еще статья на Хабре относительно регуляции ИИ, там тоже тот отчет используется: https://habr.com/ru/companies/raft/articles/959630/


Оценка риска в последовательности сделок с одним активом
Оценка риска в последовательности сделок с одним активом
  • 2017.08.28
  • www.mql5.com
В статье описано использование методов теории вероятностей и математической статистики при анализе торговых систем.
 

Ну вот, я был прав создав эту тему, она набирает актуальность. Генезис исходного кода программ начинает волновать умы людей. Далее немного добавлю в mql5 комьюнити свои наблюдения и выводы:

Польша первая вводит регулирование ИИ взяв на себя роль первопроходца по имплементации AI Act в Европе и де-факто уже применяет европейские нормы. Закон ЕС об ИИ направлен на классификацию и регулирование приложений в зависимости от риска причинить вред пользователю, разделяя продукты на запрещённые системы, системы с высокой степенью риска и прочие. Поляки всегда были очень предусмотрительны и в этот раз это вновь подтвердилось, ибо тянуть тут нечего, всё уже ясно.

Согласно новому законопроекту в РФ - ИИ контент должен быть Маркирован. Не думаю что аналогичные законы долго заставят себя ждать во многих других странах.

Вывод: В стандартной поставке MT4 и MT5 нужен валидатор для определения ИИ сгенерированного кода(не вешаюсь на этом утверждении, это как вариант, реализовать такое можно по-разному, но как по мне - это самый лучший выбор)

Польза: Восстановит количество клиентов в экосистеме. Принесет рост безопасности. Исключит в сфере критической инфраструктуры заменяемость важных навыков, случившуюся из-за пассивности регуляторов по ошибке, имеющей место, в связи с утечкой внимания обусловленной текущими шумными геополитическими процессами (ИМХО)

Три тезиса в контексте генерации код на ИИ:

1. Качество и ответственность. Глобальный тренд — привязать ответственность к конкретному продукту, а не к технологии. Советник, сгенерированный нейросетью и выставленный на Маркете — это продукт. Кто несёт ответственность за его торговое поведение? Пользователь? Разработчик модели? MetaQuotes как площадка? ИИ Агрегатор предоставляющий доступ к нейросетям? Аналогичные вопросы актуальны на фрилансе - который по идее должен быть в manuall режиме, так как финансовые рынки относятся к критической инфраструктуре, а значит и софт на них работающий(это пока выясняется в деталях, но ясно что и институты может прибегать к mql5 программам на биржах(индикаторы/утилиты)). В общем и целом - диффузия ответственности настала полная. На фрилансе люди не хотят платить за ИИ код, это тоже факт. Он ценности для них не имеет почти никакой.

2. Безопасность и прозрачность кода. Есть опасения, что весь исходный код при каждой последующей ИИ генерации и багфиксе отправляется неизвестно куда(многие пользуются агрегаторами ИИ услуг и т.д., там за безопасностью навряд ли следят). Это реальная проблема. Регуляторы по всему миру требуют прозрачности в ИИ-системах, а непрозрачность происхождения кода этому прямо противоречит.

3. Маркировка контента. В Госдуме РФ активно обсуждались законопроекты о введении обязательной маркировки видеоматериалов и другого контента, созданных с использованием ИИ. По аналогии, советник, написанный нейросетью и продающийся на маркетплейсе без соответствующей пометки, уже сейчас находится в «серой зоне» с точки зрения нарождающегося законодательства.

Смотрите что Claude сама о своем коде отвечает, ну и о коде других ИИ - это повод задуматься:


П.С. Спросил у Claude в общем об этом всём(Claude оказывается знает эту тему и её контент), ответ:

+

Что ещё Claude (платный естественно) пишет об этой теме форума:


https://rg.ru/2026/04/02/ii-miagko-otreguliruiut.html?utm_referrer=https%3A%2F%2Fwww.google.com%2F


https://tass.ru/ekonomika/26951811


Плюсы и минусы запрета компиляции в MetaEditor Mql4/Mql5 кода сгенерированного нейросетями
Плюсы и минусы запрета компиляции в MetaEditor Mql4/Mql5 кода сгенерированного нейросетями
  • 2026.02.05
  • www.mql5.com
Есть мнение, что данная тема набирает актуальность для Маркета и Фриланса...
 

Боже мой, да откуда вы все повылезали, запретители блин! Борцуны за все хорошее против всего плохого. Не проходит и дня что бы нам что-либо не запретили. И вот этот теперь туда же... Очевидный бред, который стоит за сообщением, ясно указывает на диагноз. Я знаю, потому что у меня друг со справкой от Кащенко. Слушаешь его - вроде все логично, начинаешь разбираться в сути сказанного, понимаешь что бред. Прежде чем захочется что-либо запретить, попробуйте начать с себя: запретите себе писать бред на разных форумах например. Запретите себе что-нибудь нужное и важное, кушать например, или ходить на работу, а то вдруг чего ненароком...

Трейдер не программист. Он не обязан писать код-конфетку. Если есть инструмент способный реализовать его торговую идею, то вообще без разницы ИИ это, фриланс или надыбанный код из code base. Если он наоборот программист то все равно абсолютно не важно какими путями он достигает поставленной цели. Если ему на ушко нашептал ИИ как заработать денег - замечательно. Пусть берет бота и использует, продает или зарабатывает сам. Против чего воюете? Типа человек нечестно раздобыл торговую идею, или не оформил код по всем правилам ЕС? Вам самому не смешно от этих утверждений?

Мое мнение, как продавца с "золотым жетоном": ИИ вообще ничего не изменит. Продуктов станет больше, но еще до ИИ туже самую CodeBase и так перетащили в Маркет по принципу "с паршивой овцы шерсти клок". Вы попробуйте хоть что-то в Маркете продать, а потом судите об ИИ. Создать галимую подгонку можно и без ИИ. Для этого он не нужен. И таких продуктов море. А вот создать стоящую систему несоизмеримо сложнее. Очень едва ли ИИ вообще способен на это. Если у человека изначально низкий уровень в разработке ТС, то ИИ ему не поможет. Будет вместе с ним ходить по RSI, MACD и Стохастику, советуя разные комбинации индикаторов. На этом все. И в Маркете это быстро просекут. Продажи у таких продуктов никогда не будет. Хоть 10 штук в день клепай и размещай. ИИ это зеркало вопрошающего. Какие запросы будут такие ответы от него получишь.

 

В этой теме нет запретителей, есть набор мнений и видений. Что-то вы странное написали, да еще с таким апломбом, как миллионер инвестор, но правда с продажами на 30 000 долларов (значок 1000 продаж в Маркете(ещё не известно сколько там возвратов) умножить на 30 usd, т.к. у вас там бесплатные продукты - я average цену занизил немного), что смешит(у меня с фриланса на частичной занятости включая freelancer.com(сейчас правда там всё не доступно для граждан РФ) не менее той суммы, за срок существования аккаунта более чем в 2 раза менее вашего). Вообще что ли не вдумывались в суть темы?  

Что, реально, предлагаете в Маркет что-нибудь залить? В последний раз это случилось с Максимом Дмитревским, тогда совершенно случайно из-за провокационных дебатов сделал прогу на спор за выходные или около того и залил её в Маркет, она там и стоит по сей день. Что там пробовать продавать то? Просто сидеть и ждать у моря погоды? ))) Всё от ротации зависит. Где прога стоит так и продается. Могу еще софту туда нагрузить, только вот это всё не повод несерьезно относиться к регуляции ИИ и развитию регуляции ИИ.

А на сейчас могу сказать, что обозначение(маркировка) того что продукт является сгенерированным на ИИ(по сути состоит из ИИ контента) - уже на горизонте и в пределах видимости. И актуальны вопросы того, как это может сказаться на MetaEditor 4/5. Будут ли блокировать в связи с этим компиляцию ИИ кода под продажи/услуги в опредленных юрисдикциях и/или нечто подобное. Так что ваш опус насмешил.  Я же ссылаюсь на факты и актуальные новости из сферы законодателей. Это же не лирика/софистика.

Лучше не спешить с финальными выводами, а подождать того что случиться далее в сфере регуляции ИИ.

P. S. И ещё, если что-то было бы не так, кто-то из модераторов тему бы убрал. Пока она актуальная, так как прогресс в сфере регуляции ИИ очевиден. 

 
Igor Zakharev #:

В этой теме нет запретителей, есть набор мнений и видений. Что-то вы странное написали, да еще с таким апломбом, как миллионер инвестор, но правда с продажами на 30 000 долларов (значок 1000 продаж в Маркете(ещё не известно сколько там возвратов) умножить на 30 usd, т.к. у вас там бесплатные продукты - я average цену занизил немного), что смешит(у меня с фриланса на частичной занятости включая freelancer.com(сейчас правда там всё не доступно для граждан РФ) не менее той суммы, за срок существования аккаунта более чем в 2 раза менее вашего). Вообще что ли не вдумывались в суть темы?  

Что, реально, предлагаете в Маркет что-нибудь залить? В последний раз это случилось с Максимом Дмитревским, тогда совершенно случайно из-за провокационных дебатов сделал прогу на спор за выходные или около того и залил её в Маркет, она там и стоит по сей день. Что там пробовать продавать то? Просто сидеть и ждать у моря погоды? ))) Всё от ротации зависит. Где прога стоит так и продается. Могу еще софту туда нагрузить, только вот это всё не повод несерьезно относиться к регуляции ИИ и развитию регуляции ИИ.

А на сейчас могу сказать, что обозначение(маркировка) того что продукт является сгенерированным на ИИ(по сути состоит из ИИ контента) - уже на горизонте и в пределах видимости. И актуальны вопросы того, как это может сказаться на MetaEditor 4/5. Будут ли блокировать в связи с этим компиляцию ИИ кода под продажи/услуги в опредленных юрисдикциях и/или нечто подобное. Так что ваш опус насмешил.  Я же ссылаюсь на факты и актуальные новости из сферы законодателей. Это же не лирика/софистика.

Лучше не спешить с финальными выводами, а подождать того что случиться далее в сфере регуляции ИИ.

P. S. И ещё, если что-то было бы не так, кто-то из модераторов тему бы убрал. Пока она актуальная, так как прогресс в сфере регуляции ИИ очевиден. 

Вот смотрите, код полностью сгенерирован ИИ - Я не внёс ни одной точки, только стилизировал .

Задача изначально стояла "Утренняя звезда / Вечерняя звезда"

Было 4 дополнения: канал, закрытие, мультивалютность и время работы - он всё добавлял на 100% правильно.

Я дольше печатал текст задачи, нежели он это создавал.

Теперь укажите хотя-бы на одну строку, которая выдаёт что это написано ИИ

Скажу более: программист с опытом напишет код в разы хуже

//+------------------------------------------------------------------+
//| StarPattern_EA_MultiCurrency_with_TotalProfit.mq5               |
//+------------------------------------------------------------------+
#property copyright "TradingBot"
#property version   "1.20"
#property strict

// --- Параметры торговли
input double          InpLot              = 0.1;          // Объем лота
input int             InpMagic            = 123456;       // Магический номер
input int             InpStopOffset       = 20;           // Доп. отступ для SL в пипсах

// --- Параметры Envelopes
input int             InpEnvPeriod        = 14;
input double          InpEnvDeviation     = 0.1;
input ENUM_MA_METHOD  InpEnvMethod        = MODE_SMA;

// --- Параметры паттерна
input double          InpBodyRatio        = 2.0;          // Пропорция тел свечей

// --- Трейлинг-стоп
input bool            InpUseTrailing      = true;         // Использовать трейлинг?
input int             InpTSPoints         = 300;          // Дистанция трейлинга (пипсы)
input int             InpTSStep           = 50;           // Шаг трейлинга (пипсы)

// --- Мультивалютные настройки
input string          InpSymbols          = "EURUSD,GBPUSD,USDJPY,AUDUSD,USDCAD"; // Символы через запятую

// --- Закрытие по общему профиту/убытку
input bool            InpCloseOnTotalProfit = true;       // Закрывать все позиции при достижении общего профита
input double          InpTotalProfit      = 50.0;         // Общий профит в валюте депозита (+50.0)
input bool            InpCloseOnTotalLoss = false;        // Закрывать все позиции при достижении общего убытка
input double          InpTotalLoss        = -30.0;        // Общий убыток в валюте депозита (-30.0)

// --- Время работы (Trading Session)
input bool            InpUseTimeFilter    = true;         // Включить фильтр времени торговли
input int             InpStartHour        = 8;            // Час начала торговли (0-23)
input int             InpStartMinute      = 0;            // Минута начала
input int             InpEndHour          = 22;           // Час окончания торговли (0-23)
input int             InpEndMinute        = 0;            // Минута окончания

int                   handleEnv[];

//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
{
  string symArray[];
  int total = StringSplit(InpSymbols, ',', symArray);
  if(total == 0) {
    Print("Ошибка: не указаны символы в InpSymbols");
    return INIT_PARAMETERS_INCORRECT;
  }
  ArrayResize(handleEnv, total);
  for(int i = 0; i < total; i++) {
    string symbol = symArray[i];
    StringTrimRight(symbol);
    if(symbol == "") continue;
    if(!SymbolSelect(symbol, true)) {
      Print("Предупреждение: символ ", symbol, " не найден");
      continue;
    }
    handleEnv[i] = iEnvelopes(symbol, PERIOD_CURRENT, InpEnvPeriod, 0, InpEnvMethod, PRICE_CLOSE, InpEnvDeviation);
    if(handleEnv[i] == INVALID_HANDLE)
      Print("Не удалось создать Envelopes для ", symbol);
  }
  Print("StarPattern EA MultiCurrency + Total Profit запущен. Символов: ", total);
  return(INIT_SUCCEEDED);
}

//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
  for(int i = 0; i < ArraySize(handleEnv); i++)
    if(handleEnv[i] != INVALID_HANDLE)
      IndicatorRelease(handleEnv[i]);
}

//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
{
  if(!IsNewBar()) {
    // Проверяем закрытие по общему профиту/убытку на каждом тике
    CheckTotalProfitClose();
    if(InpUseTrailing) ApplyTrailing();
    return;
  }
  if(InpUseTimeFilter && !IsTradingTimeAllowed())
    return;
// Логика открытия новых позиций (только на новой свече)
  string symArray[];
  int total = StringSplit(InpSymbols, ',', symArray);
  for(int s = 0; s < total; s++) {
    string symbol = symArray[s];
    StringTrimRight(symbol);
    if(symbol == "") continue;
    if(!SymbolInfoInteger(symbol, SYMBOL_TRADE_MODE)) continue;
    ProcessSymbol(symbol, s);
  }
  if(InpUseTrailing) ApplyTrailing();
}

//+------------------------------------------------------------------+
//| Проверка и закрытие всех позиций по общему профиту/убытку       |
//+------------------------------------------------------------------+
void CheckTotalProfitClose()
{
  if(!InpCloseOnTotalProfit && !InpCloseOnTotalLoss) return;
  double totalProfit = 0.0;
  for(int i = PositionsTotal() - 1; i >= 0; i--) {
    ulong ticket = PositionGetTicket(i);
    if(ticket <= 0) continue;
    if(!PositionSelectByTicket(ticket)) continue;
    if(PositionGetInteger(POSITION_MAGIC) != InpMagic) continue;
    totalProfit += PositionGetDouble(POSITION_PROFIT)
                   + PositionGetDouble(POSITION_SWAP);
  }
  if(InpCloseOnTotalProfit && totalProfit >= InpTotalProfit) {
    Print("Достигнут общий профит: ", DoubleToString(totalProfit, 2), " → Закрываем все позиции");
    CloseAllPositions("Target Profit reached: " + DoubleToString(totalProfit, 2));
  }
  if(InpCloseOnTotalLoss && totalProfit <= InpTotalLoss) {
    Print("Достигнут общий убыток: ", DoubleToString(totalProfit, 2), " → Закрываем все позиции");
    CloseAllPositions("Max Loss reached: " + DoubleToString(totalProfit, 2));
  }
}

//+------------------------------------------------------------------+
//| Закрытие всех позиций с нашим Magic                             |
//+------------------------------------------------------------------+
void CloseAllPositions(string reason)
{
  for(int i = PositionsTotal() - 1; i >= 0; i--) {
    ulong ticket = PositionGetTicket(i);
    if(ticket <= 0) continue;
    if(!PositionSelectByTicket(ticket)) continue;
    if(PositionGetInteger(POSITION_MAGIC) != InpMagic) continue;
    MqlTradeRequest  req = {};
    MqlTradeResult   res = {};
    req.action   = TRADE_ACTION_DEAL;
    req.position = ticket;
    req.symbol   = PositionGetString(POSITION_SYMBOL);
    req.volume   = PositionGetDouble(POSITION_VOLUME);
    req.type     = (PositionGetInteger(POSITION_TYPE) == POSITION_TYPE_BUY) ?
                   ORDER_TYPE_SELL : ORDER_TYPE_BUY;
    req.price    = (req.type == ORDER_TYPE_SELL) ?
                   SymbolInfoDouble(req.symbol, SYMBOL_BID) :
                   SymbolInfoDouble(req.symbol, SYMBOL_ASK);
    req.deviation= 20;
    req.magic    = InpMagic;
    OrderSend(req, res);
    if(res.retcode != TRADE_RETCODE_DONE)
      Print("Ошибка закрытия позиции ", ticket, ": ", res.retcode);
  }
  Alert("Все позиции закрыты! Причина: ", reason);
}

//+------------------------------------------------------------------+
//| Остальные функции (ProcessSymbol, SendOrder, ApplyTrailing и т.д.) |
//+------------------------------------------------------------------+

//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void ProcessSymbol(string symbol, int handleIndex)
{
  MqlRates rates[];
  ArraySetAsSeries(rates, true);
  if(CopyRates(symbol, _Period, 0, 5, rates) < 5) return;
  double envUpper[], envLower[];
  ArraySetAsSeries(envUpper, true);
  ArraySetAsSeries(envLower, true);
  if(CopyBuffer(handleEnv[handleIndex], 0, 0, 5, envUpper) <= 0) return;
  if(CopyBuffer(handleEnv[handleIndex], 1, 0, 5, envLower) <= 0) return;
  double body1 = MathAbs(rates[3].open - rates[3].close);
  double body2 = MathAbs(rates[2].open - rates[2].close);
  double body3 = MathAbs(rates[1].open - rates[1].close);
// Утренняя звезда — BUY
  if(rates[3].close < rates[3].open && body1 > body2 * InpBodyRatio && body3 > body2 * InpBodyRatio &&
      rates[1].close > rates[1].open && rates[1].close > (rates[3].open + rates[3].close)/2.0 &&
      rates[2].low < envLower[2]) {
    double sl = MathMin(rates[1].low, MathMin(rates[2].low, rates[3].low)) - InpStopOffset * SymbolInfoDouble(symbol, SYMBOL_POINT);
    SendOrder(symbol, ORDER_TYPE_BUY, sl);
  }
// Вечерняя звезда — SELL
  if(rates[3].close > rates[3].open && body1 > body2 * InpBodyRatio && body3 > body2 * InpBodyRatio &&
      rates[1].close < rates[1].open && rates[1].close < (rates[3].open + rates[3].close)/2.0 &&
      rates[2].high > envUpper[2]) {
    double sl = MathMax(rates[1].high, MathMax(rates[2].high, rates[3].high)) + InpStopOffset * SymbolInfoDouble(symbol, SYMBOL_POINT);
    SendOrder(symbol, ORDER_TYPE_SELL, sl);
  }
}

//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void SendOrder(string symbol, ENUM_ORDER_TYPE type, double sl)
{
  MqlTradeRequest  request = {};
  MqlTradeResult   result  = {};
  request.action   = TRADE_ACTION_DEAL;
  request.symbol   = symbol;
  request.volume   = InpLot;
  request.type     = type;
  request.magic    = InpMagic;
  request.price    = (type == ORDER_TYPE_BUY) ? SymbolInfoDouble(symbol, SYMBOL_ASK) : SymbolInfoDouble(symbol, SYMBOL_BID);
  request.sl       = NormalizeDouble(sl, (int)SymbolInfoInteger(symbol, SYMBOL_DIGITS));
  request.deviation= 10;
  OrderSend(request, result);
  if(result.retcode != TRADE_RETCODE_DONE)
    Print("Ошибка открытия по ", symbol, ": ", result.retcode);
  else
    Print("Открыта позиция ", EnumToString(type), " по ", symbol);
}

// Трейлинг-стоп (обновлённый с правильным Point)
void ApplyTrailing()
{
  for(int i = PositionsTotal()-1; i >= 0; i--) {
    ulong ticket = PositionGetTicket(i);
    if(ticket <= 0) continue;
    if(!PositionSelectByTicket(ticket)) continue;
    if(PositionGetInteger(POSITION_MAGIC) != InpMagic) continue;
    string symbol = PositionGetString(POSITION_SYMBOL);
    double point  = SymbolInfoDouble(symbol, SYMBOL_POINT);
    double openPrice = PositionGetDouble(POSITION_PRICE_OPEN);
    double curPrice  = PositionGetDouble(POSITION_PRICE_CURRENT);
    double posSL     = PositionGetDouble(POSITION_SL);
    long   posType   = PositionGetInteger(POSITION_TYPE);
    if(posType == POSITION_TYPE_BUY) {
      if(curPrice - openPrice > InpTSPoints * point) {
        double newSL = curPrice - InpTSPoints * point;
        if(posSL < newSL - InpTSStep * point || posSL == 0)
          ModifySL(ticket, newSL);
      }
    } else {
      if(openPrice - curPrice > InpTSPoints * point) {
        double newSL = curPrice + InpTSPoints * point;
        if(posSL > newSL + InpTSStep * point || posSL == 0)
          ModifySL(ticket, newSL);
      }
    }
  }
}

//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void ModifySL(ulong ticket, double sl)
{
  MqlTradeRequest  req = {};
  MqlTradeResult   res = {};
  req.action   = TRADE_ACTION_SLTP;
  req.position = ticket;
  req.sl       = sl;
  OrderSend(req, res);
}

//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
bool IsNewBar()
{
  static datetime last_time = 0;
  datetime curr_time = iTime(_Symbol, _Period, 0);
  if(last_time != curr_time) {
    last_time = curr_time;
    return true;
  }
  return false;
}
//+------------------------------------------------------------------+
//| Проверка, разрешено ли сейчас торговать                          |
//+------------------------------------------------------------------+
bool IsTradingTimeAllowed()
{
  MqlDateTime tm;
  TimeToStruct(TimeCurrent(), tm);   // серверное время брокера
  int currentMinutes = tm.hour * 60 + tm.min;
  int startMinutes   = InpStartHour * 60 + InpStartMinute;
  int endMinutes     = InpEndHour * 60 + InpEndMinute;
  if(startMinutes < endMinutes) {
    // Обычный интервал (например 08:00 - 22:00)
    return (currentMinutes >= startMinutes && currentMinutes < endMinutes);
  } else {
    // Интервал через полночь (например 22:00 - 06:00)
    return (currentMinutes >= startMinutes || currentMinutes < endMinutes);
  }
}
//+------------------------------------------------------------------+
 

Раз только одну, с ходу быстро цитирую две связанных строки:

  MqlRates rates[];
  ArraySetAsSeries(rates, true);

Я бы так никогда не сделал если бы писал код в ручную и любой кто профессионально кодит тоже. reates[] нужно вынести в глобальные, индексацию массива тоже в  инит вынести следует. Это жрет ресурсы в теории(каждый вызов функции пересоздание массива и настройка индексации), компилятор конечно оптимизирует что-то - но мы то не знаем как.

Вся структура - очевидно ИИ. Прямо на глаз видно. ИИ видно по форматированию текста и названию переменных и по многому другому.

Время затраченное на поиск этих строк: примерно 10 секунд

Если у модераторов есть гугл аналитика или я.метрика и аналитика - то по поведенческим(запись сеанса - где вино как мышкой водишь) не дадут соврать что это так. 10/15 секунд я потратил до того как начал печатать этот пост и после того как прочитал текст и начал смотреть код. Быстрого взгляда достаточно что бы увидеть ИИ стиль.

P. S. Я не убеждаю в своей точке зрения, просто её высказываю. Не считают что ИИ стиль тяжело идентифицировать. Его заметно как говорится на уровне "Вырви глаз". При этом я тоже активно пользуюсь ИИ.

Vitaly Muzichenko #:

Скажу более: программист с опытом напишет код в разы хуже

Да 100% , если бюджет и время позволяют и ТЗ нормальное. Я о том же, что советники которые генерируют ИИ - подходят только для самого начального уровня(ну там для школы/студентов для обучения). Там возможно неопредленное поведение во многих ситуациях. ИИ об этом подумать даже не способен при генерации кода по промпту. ИИ хорош ТЗ составить и всё.

 
Igor Zakharev #:
Вся структура - очевидно ИИ. Прямо на глаз видно. ИИ видно по форматированию текста и названию переменных и по многому другому

Вполне нормальные и обычные имена переменных, и по ним определить невозможно.

Форматирование сделала "причёска" , по форматированию также не отличить.

Если-бы Я выложил этот код и в шапке был указан автор, то не было-бы и мыслей об ИИ.

--

Вы сейчас дали оценку с пессимистичной стороны, вашу оценку можно расценить ровно так, как отличить внешне лактозное молоко, от безлактозного. Пока не скажут где какое - не понять, но могут сказать и наоборот - вы в это поверите, потому что их не отличить.