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

 
Vitaly Muzichenko #:

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

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

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

--

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

Если по кодобазе смотреть, по той которая до ИИ была, то часто определить можно. Стиль отличается от человеческого. От автора к автору код в разном стиле, нейминг переменных разный, каждый ИИ же всегда в одном стиле генерирует.

Только что скролил кодобазу для интереса с конца, разница видна. ИИ код сильно сжимает. Посмотрите сами по кодобазе, посмотрите разных авторов код.

 
Igor Zakharev #:

Если по кодобазе смотреть, по той которая до ИИ была, то часто определить можно. Стиль отличается от человеческого. От автора к автору код в разном стиле, нейминг переменных разный, каждый ИИ же всегда в одном стиле генерирует.

Только что скролил кодобазу для интереса с конца, разница видна. ИИ код сильно сжимает. Посмотрите сами по кодобазе, посмотрите разных авторов код.

Ну вот-же, чем отличаются имена?

Я повторю: "Если-бы Я не сказал что это ИИ, при этом в шапке кода был указан автор - по коду вообще не было-бы понятно, кто его написал".

И опять-же: Я в код не добавил ни единой точки, вообще к нему не касался и он работает на 100% ПРАВИЛЬНО. Ваши доводы - скептицизм.

P.S. Обычный индикатор МАКД, Я попросил разукрасить гистограмму, времени от запроса до рабочего кода в терминале = 2 минуты.

Сколько вам понадобится времени на добавление буферов и создание условий, тоже 2 минуты?

Ещё полгода назад ИИ не умели этого делать, но сегодня это прекрасный инструмент

 
Igor Zakharev #:

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

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

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

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

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

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

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

Идея и доказательства, имхо, фиговые. ИИ учится на исходниках людей и использует именно те имена переменных, которые встречал в MQL-файлах (как и в данном примере). И фрагменты решения конкретных подзадач - тоже выдернуты из кодов людей. Можно сказать, к сожалению, потому что 100% никто корпус документов обучающих не рефакторил и не проверял перед обучением ИИ, и в результате сетка лепит те же ошибки, что и в человеческих исходниках. Кроме того, форматирование и именование переменных можно у ИИ заказать любое.

По поводу определения массива внутри функции - подход логичный в том плане, что неправильно было бы выносить используемый локально объект на глобальный уровень, как предлагаете Вы. Я бы посоветовал ИИ добавить слово static перед локальным массивом, и всё.

В общем, не вижу смысла запрещать/помечать ИИ в кодах и продуктах.

Вот мне ИИ сгенерил рабочий код (выкладывал на форуме в другой ветке). Единственное, что я добавил - обход пары багов МQL5.

matrix CopyMultipleSymbolRates(const string &symbols[], 
                               const ENUM_TIMEFRAMES period, 
                               const datetime start_time, 
                               const datetime stop_time, 
                               const ulong flags = COPY_RATES_OHLC)
{
   int sym_count = ArraySize(symbols);
   bool transpose_result = ((flags & COPY_RATES_VERTICAL) == 0);
   ulong vertical_flags = flags | COPY_RATES_VERTICAL;

   struct SymbolData 
   {
      matrix m;
      datetime times[];
      int rows;
      int cols;
      vector initial_row;
   };

   SymbolData data[];
   ArrayResize(data, sym_count);
   
   // 1. Collect all timestamps in the single array
   datetime global_timeline[];
   int total_cols = 0;

   for(int i = 0; i < sym_count; i++) 
   {
      if(data[i].m.CopyRates(symbols[i], period, vertical_flags, start_time, stop_time)) 
      {
         // bug workaround
         if(data[i].m.Rows() < data[i].m.Cols())
            data[i].m = data[i].m.Transpose();
         CopyTime(symbols[i], period, start_time, stop_time, data[i].times);
         data[i].rows = (int)data[i].m.Rows();
         data[i].cols = (int)data[i].m.Cols();
         total_cols += data[i].cols;

         // Add all timestamps into the single array
         int prev_size = ArraySize(global_timeline);
         ArrayResize(global_timeline, prev_size + data[i].rows);
         ArrayCopy(global_timeline, data[i].times, prev_size);
      }
   }

   if(total_cols == 0) return matrix::Zeros(0, 0);

   // 2. Prepare the ordered array of unique timestamps
   ArraySort(global_timeline);
   int unique_count = 0;
   if(ArraySize(global_timeline) > 0) 
   {
      unique_count = 1;
      for(int i = 1; i < ArraySize(global_timeline); i++) 
      {
         if(global_timeline[i] != global_timeline[i - 1]) 
            global_timeline[unique_count++] = global_timeline[i];
      }
      ArrayResize(global_timeline, unique_count);
   }

   // 3. Fill the marix (single pass by rows)
   matrix res_matrix;
   res_matrix.Init(unique_count, total_cols);

   int col_offset = 0;
   for(int i = 0; i < sym_count; i++) 
   {
      if(data[i].rows > 0 && data[i].times[0] > global_timeline[0])
      {
         // Additional request for 1 bar right before start_time
         matrix prev;
         if(prev.CopyRates(symbols[i], period, vertical_flags, start_time, 1))
         {
            data[i].initial_row = prev.Row(0); 
         }
         if(prev.Row(0).Size() == 0) // bug workaround (fixed in latest builds)
         {
            res_matrix.Resize(0, 0);
            return res_matrix;
         }
      }

      int current_cursor = 0;
      for(int r = 0; r < unique_count; r++) 
      {
         datetime current_tick = global_timeline[r];
         
         // Move symbol's cursor, if its time is less then current global position
         while(current_cursor < data[i].rows && data[i].times[current_cursor] < current_tick)
            current_cursor++;

         int target_row = -1;
         if(current_cursor < data[i].rows && data[i].times[current_cursor] == current_tick) 
         {
            target_row = current_cursor;
         }
         else if(current_cursor > 0) 
         {
            target_row = current_cursor - 1; // Forward Fill
         }

         // Fill the data in columns for this symbol
         for(int c = 0; c < data[i].cols; c++) 
         {
            res_matrix[r][col_offset + c] = (target_row != -1) 
                                           ? data[i].m[target_row][c] 
                                           : data[i].initial_row[c];
         }
      }
      col_offset += data[i].cols;
   }
   
   return transpose_result ? res_matrix.Transpose() : res_matrix;
}

/*
#define DAYLONG (60 * 60 * 24)

void OnStart()
{
   string symbols[] = {"EURUSD.c", "UK100", "XAUUSD.c"};
   matrix x = CopyMultipleSymbolRates(symbols, _Period, TimeCurrent() / DAYLONG * DAYLONG - 1 * DAYLONG, TimeCurrent(), COPY_RATES_TIME | COPY_RATES_OHLC | COPY_RATES_VOLUME_TICK);
   Print(x);
}
*/
 
Vitaly Muzichenko #:

Ну вот-же, чем отличаются имена?

Я повторю: "Если-бы Я не сказал что это ИИ, при этом в шапке кода был указан автор - по коду вообще не было-бы понятно, кто его написал".

И опять-же: Я в код не добавил ни единой точки, вообще к нему не касался и он работает на 100% ПРАВИЛЬНО. Ваши доводы - скептицизм.

P.S. Обычный индикатор МАКД, Я попросил разукрасить гистограмму, времени от запроса до рабочего кода в терминале = 2 минуты.

Сколько вам понадобится времени на добавление буферов и создание условий, тоже 2 минуты?

Ещё полгода назад ИИ не умели этого делать, но сегодня это прекрасный инструмент

Тут относительно временных затрат выяснять думаю нечего, я согласен, что ИИ как хэлпер это удобно и быстро. Человек руками конечно всё дольше будет делать.

Не пропагандирую полный отказ от ИИ в стиле луддитов :) , интересны лишь видения будущего в контексте приближающейся регуляции ИИ.

Stanislav Korotky #:

Идея и доказательства, имхо, фиговые.ИИ учится на исходниках людей и использует именно те имена переменных, которые встречал в MQL-файлах (как и в данном примере). И фрагменты решения конкретных подзадач - тоже выдернуты из кодов людей. Можно сказать, к сожалению, потому что 100% никто корпус документов обучающих не рефакторил и не проверял перед обучением ИИ, и в результате сетка лепит те же ошибки, что и в человеческих исходниках. Кроме того, форматирование и именование переменных можно у ИИ заказать любое.

По поводу определения массива внутри функции - подход логичный в том плане, что неправильно было бы выносить используемый локально объект на глобальный уровень, как предлагаете Вы. Я бы посоветовал ИИ добавить слово static перед локальным массивом, и всё.

В общем, не вижу смысла запрещать/помечать ИИ в кодах и продуктах.

Вот мне ИИ сгенерил рабочий код (выкладывал на форуме в другой ветке). Единственное, что я добавил - обход пары багов МQL5.

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

Что касается удобства и ускорения работы - споров нет. Что насчет static - на вкус и цвет как говорится. 

 
Igor Zakharev #:

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

Что касается удобства и ускорения работы - споров нет. Что насчет static - на вкус и цвет как говорится. 

Код от людей не менее сомнителен - например, я иногда заглядываю в публикации в кодобазе и там по большей части полный шлак (решает ли он по факту указанные задачи?). Законы часто инициируются и пишутся людьми, далекими от проблем, регулируемыми этими законами, увы, так что я б не рассматривал регуляцию плюсом. ИИ - это лишь инструмент, и качество продукта определяется человеком, использующим его, а не самим фактом использования ИИ. Тем более, что степень использования качественного ИИ - хрен проверишь.

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

 
Stanislav Korotky #:


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

Немного не понял о чем вы пишете. Я знаю что такое code smell. Static и вправду отличный вариант, но по стилю мне не нравится. Я же говорю - на вкус и цвет.

Igor Zakharev #:

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


Написал же про две строки кода в том ответе который вы обсуждаете, это не случайно. Они взаимосвязанны. Как можно ArraySetAsSeries(rates, true); исполнить в OnInit() если массив не глобальный - никак. Мы же обсуждали стиль ИИ, но в большинстве официальных примеров кода которые я видел - ArraySetAsSeries выносится в OnInit(). И тогда тут нет дурного тона, это вопрос стиля, который упрощает быстрое понимание. При отсутствии static вызов ArraySetAsSeries каждый раз при вызове функции ProcessSymbol потребляет ресурсы.

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

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

Igor Zakharev #:

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

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

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

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

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

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

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

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

 

"Разбор полетов" начался вот с этой фразы:

Igor Zakharev #:

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

Я бы так никогда не сделал если бы писал код в ручную и любой кто профессионально кодит тоже...

Заявления о том, что ваши субъективные предпочтения являются основой для доказательства происхождения исходников от ИИ или не-ИИ - не выдерживают никакой критики. По поводу профессиональности кодинга - тоже.
 
Stanislav Korotky #:

"Разбор полетов" начался вот с этой фразы:

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

Не понимаю о чём вы пишите вновь, какая критика? Ваша что ли? Тогда прошу её изложить если в ней что-то важное, что я упустил. Мои субъективные предпочтения основаны на официальной документации. Стиль(то-есть мои субъективные предпочтения) я перенял оттуда. Другими словами: мои субъективные предпочтения по стилю совпадают с официальной документацией по языку MQL5.

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

P. S. Дальнейшие подобные споры  - оффтопик, необходимо вернуться к сути темы. Что толку о вкусах спорить как на застолье :)

https://www.mql5.com/en/docs/array/arraysetasseries

+


Documentation on MQL5: ArraySetAsSeries / Array Functions
Documentation on MQL5: ArraySetAsSeries / Array Functions
  • www.mql5.com
The function sets the AS_SERIES flag to a selected object of a dynamic array , and elements will be indexed like in timeseries . Parameters array[]...
 

Немного по теме регуляции ИИ, добавлю из новостей цитатой. Сходится с тем как предполагалось.

>>  Замглавы Минцифры Александр Шойтов заявил, что ИИ нельзя рассматривать как «нейтральный инструмент» — это полноценный канал распространения контента, а значит должен подвергаться цензуре. Цензура, по мнению Шойтова, должна касаться как запросов пользователей (ввод данных), так и ответов самих алгоритмов. Любой ответ нейросети должен соответствовать законодательству РФ;


Также есть интересная статья о развитии общегосударственных подходов в регулировании ИИ, что со временем естественно спроецируется в локальные нормы.

Статья представляет собой обзор подходов к регулированию ИИ в четырех юрисдикциях: https://law.asia/asia-ai-governance-framework/

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

  • 🇯🇵 Япония: Принят рамочный закон о продвижении ИИ (2025). Сочетает «мягкое» регулирование (добровольные руководства) с «жесткими» нормами существующих законов (о данных, авторском праве и т.д.).

  • 🇰🇷 Южная Корея: Вступил в силу «Базовый закон об ИИ» (2026). Регулирует «высокорисковый» ИИ, но делает акцент на добровольных мерах бизнеса и содержит много исключений.

  • 🇵🇭 Филиппины: Принят закон об электронном управлении (E-Governance Act) и внедряются руководства по использованию ИИ в образовании


Также недавно опубликован подход Украины, они пока подготавливают почву, но время пройдёт быстро:

https://www.ibanet.org/Regulation-of-AI-Ukraine-current-approach

>> На ближайшие пару лет регулирование ИИ в Украине не создает препятствий для компиляции ИИ-кода в MetaEditor. Напротив, оно закладывает правовую основу для его использования, определяя, кому принадлежат права на результат. Технических ограничений в самом редакторе нет, а национальное законодательство не запрещает, а упорядочивает использование генеративных технологий.


Что касается происходящего в США, можно привести пример по ссылке далее: https://sanjosespotlight.com/san-jose-lawmaker-at-center-of-ai-regulation-fight/

Если кратко объяснить: Идут споры о том кто будет регулировать, федералы или на уровне законов штатов, так как Конгресс в вопросе регуляции ИИ отстает от скорости развития ИИ.

Сам Когрессмен Ликкардо про которого идет речь в статье, признаёт, что Конгресс не успевает за развитием frontier-моделей — отсюда и идея делегировать регуляцию экспертному органу. Это общемировая проблема: классические законодательные циклы (3–5 лет) несовместимы с темпом развития ИИ (3–6 месяцев на новое поколение моделей).


Вывод: То что ранее писал в данной теме о том, что регуляторы "проспали" ситуацию с ИИ из-за утечки внимания (в этом посте) - оказался правдой, даже на уровне Конгресса США от которого в принципе зависит будущее ИИ , и это подтвердили только что в той статье от вчера (18 Апреля).

Ждем новостей далее, пока все ок, активно юзаем.

Regulation of artificial intelligence: Ukraine’s current approach
Regulation of artificial intelligence: Ukraine’s current approach
  • www.ibanet.org
This article examines the developing legal framework for artificial intelligence in Ukraine, which is aimed at harmonisation with EU legislation. It outlines the regulatory strategy guided by the Ministry of Digital Transformation’s White Paper, advancing a bottom-up alignment model through the transition from soft law instruments to prospective mandatory statutory regulation
 
Реальность такова, многим кажется что ИИ даёт им навыки программирования и даже мозги, другим быстрое время выполнения. Частично это так. Это имеет и побочные эффекты и далеко идущие последствия.
Скорее всего в будущем популярность спадёт, когда появится больше личного критического опыта. А когда тестовый период пройдёт, ИИ станет частично платным.
Развитие ИИ остановить не получится. Все так носятся с ИИ как буд-то им платят за его продвижение)) Такой алгоритм не вчера появился, новая кажется только реклама и общая доступность)