Новая версия платформы MetaTrader 5 build 6060: Интеграция с ИИ, Passkey и удобная работа с кодом в MetaEditor - страница 18

 
Если это за месяц, то средняя производительность ~40K token/sec. Это такие же токены, как здесь, например?
DeepSeek V4 Flash: 284B model, up to 32 tok/s on AMD Ryzen AI MAX+ 395
DeepSeek V4 Flash: 284B model, up to 32 tok/s on AMD Ryzen AI MAX+ 395
  • www.lucebox.com
DeepSeek V4 Flash: 284B model, up to 32 tok/s on AMD Ryzen AI MAX+ 395 AMD-Powered Lucebox runs the full DeepSeek V4 Flash target locally on AMD Ryzen AI MAX+ 395 with 128 GB unified memory: up to 32.0 tok/s decode and roughly 250 tok/s with indexed sparse prefill. The code used for both paths is on Lucebox . DeepSeek V4 Flash is a 284B...
 
Это оригинальный китайский сервис Deepseek без всяких дисцилляций.
 

Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий

Бета-версия MetaTrader 5 build 5955: поддержка MCP и агентного ИИ

Renat Fatkhullin, 2026.07.11 20:45

Я сегодня очередные базовые проверки запустил на GPT-5.6-Sol после 5.5 и сразу получил новый класс ошибок, что сильно порадовало.

Что имеется в виду?
 
Renat Fatkhullin #:
Это оригинальный китайский сервис Deepseek без всяких дисцилляций.
Думал, локально развернули у себя.
 
fxsaber # :
Что имеется в виду?
Я думаю, это означает, что новая модель (GPT 5.6 Sol) способна выявлять больше ошибок в коде, чем предыдущие модели.
 
Vitaliy Davydov # :

Так же в версии 6067 у меня в Метаедиторе при нажатии ПКМ на имени функции, не работают опции из выпадающего списка:

"Перейти к определению", "Перейти к объявлению". Перехода нет.

Не воспроизводится.
 
Pavel Verveyko #:
А можно как-то временно отключать ИИ (напрмиер кнопкой), что-бы знать, что он ни где и ничего у меня не изучает.
Можете напрямую запретить.
 

Pavel Verveyko #:

А можно как-то временно отключать ИИ (напрмиер кнопкой), что-бы знать, что он ни где и ничего у меня не изучает.
Я бы хотел разделять взаимодействие с ИИ и без.


Можно удалять Ключ API в настройках

 

Простой промпт

Напиши скрипт, который создаст таблицу в csv всех сделок в таком формате, как на примере:
"
Время Символ Сделка Ордер Позиция Тип Направление Объём Цена Стоимость S/L T/P Комиссия Своп Прибыль Изменение
2026.06.06 05:19:18 56632773141 balance 100000.00
2026.06.12 19:39:41 EURUSD 56735736424 57070034984 57070034984 buy in 0.01 1.15731 1157.31
2026.06.17 14:12:32 EURUSD 56786190579 57121607505 57121607505 buy in 0.01 1.15920 1159.20
2026.06.18 02:08:59 EURUSD 56800487149 57136201076 57136201076 buy in 0.01 1.15070 1150.70
2026.07.03 12:50:13 EURUSD 57047411737 57392430246 57392430246 sell in 0.02 1.14457 -2289.14
2026.07.03 12:50:47 EURUSD 57047418055 57392436821 57392430246 buy out 0.01 1.14451 1144.51 0.06 0.01%
2026.07.03 12:56:20 EURUSD 57047492932 57392515579 57392430246 buy out 0.01 1.14422 1144.22 0.35 0.03%
2026.07.03 15:27:47 EURUSD 57049577820 57394659612 57394659612 buy in 0.02 1.14475 2289.50
2026.07.03 15:28:23 EURUSD 57049585462 57394667539 57394667539 sell in 0.04 1.14476 -4579.04
2026.07.03 15:47:01 EURUSD 57049884188 57394975006 57394667539 buy out 0.04 1.14489 4579.56 -0.52 -0.01%
2026.07.10 07:57:17 EURUSD 557134115331 57481982995 57481982995 buy in 0.04 1.14410 4576.40
2026.07.16 13:21:45 GBPUSD 57208924887 57558702060 57558702060 sell in 0.04 1.35083 -5403.32
2026.07.17 18:39:39 GBPUSD 57234197960 57584361584 57558702060 buy out 0.04 1.34484 5379.36 -0.09 23.96 0.45%
2026.07.17 18:39:42 EURUSD 57234198748 57584362396 57584362396 buy in 0.04 1.14406 4576.24
2026.07.17 20:53:15 EURUSD 57236217987 57586415113 57586415113 buy in 0.04 1.14346 4573.84
2026.07.23 14:40:21 EURUSD 57301324255 57654079845 57654079845 buy in 0.04 1.13862 4554.48

"

Результат:
//+------------------------------------------------------------------+
//|                                                  ExportDeals.mq5 |
//|                                        MetaTrader Assistant      |
//+------------------------------------------------------------------+
#property copyright "MetaTrader Assistant"
#property version   "1.00"
#property script_show_inputs

input string InpFileName = "deals_export.csv"; // Имя CSV-файла
input bool   InpIncludeBalance = true;         // Включать балансовые операции

//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
{
//--- Получаем путь к папке Files терминала
   string terminal_path = TerminalInfoString(TERMINAL_DATA_PATH);
   string file_path = terminal_path + "\\MQL5\\Files\\" + InpFileName;

//--- Проверяем наличие сделок в истории
   int total_deals = HistoryDealsTotal();
   if(total_deals == 0)
     {
      Print("Нет сделок в истории торговли");
      return;
     }

   Print("Всего сделок в истории: ", total_deals);

//--- Собираем тикеты всех сделок
   ulong deal_tickets[];
   ArrayResize(deal_tickets, total_deals);
   for(int i = 0; i < total_deals; i++)
      deal_tickets[i] = HistoryDealGetTicket(i);

//--- Сортируем по времени (тикеты в MT5 идут по возрастанию времени)
   ArraySort(deal_tickets);

//--- Открываем файл на запись
   int file_handle = FileOpen(file_path, FILE_WRITE|FILE_CSV|FILE_ANSI, '\t');
   if(file_handle == INVALID_HANDLE)
     {
      Print("Ошибка открытия файла: ", file_path, ", код ошибки: ", GetLastError());
      return;
     }

   Print("Файл открыт: ", file_path);

//--- Записываем заголовок (точно как в примере)
   FileWrite(file_handle,
             "Время",
             "Символ",
             "Сделка",
             "Ордер",
             "Позиция",
             "Тип",
             "Направление",
             "Объём",
             "Цена",
             "Стоимость",
             "S/L",
             "T/P",
             "Комиссия",
             "Своп",
             "Прибыль",
             "Изменение");

//--- Обрабатываем каждую сделку
   for(int i = 0; i < total_deals; i++)
     {
      ulong ticket = deal_tickets[i];
      if(!HistoryDealSelect(ticket))
         continue;

      //--- Определяем тип сделки
      ENUM_DEAL_TYPE deal_type = (ENUM_DEAL_TYPE)HistoryDealGetInteger(ticket, DEAL_TYPE);
      ENUM_DEAL_ENTRY entry = (ENUM_DEAL_ENTRY)HistoryDealGetInteger(ticket, DEAL_ENTRY);

      //--- Балансовые и прочие финансовые операции
      if(deal_type == DEAL_TYPE_BALANCE ||
         deal_type == DEAL_TYPE_CREDIT ||
         deal_type == DEAL_TYPE_CHARGE ||
         deal_type == DEAL_TYPE_BONUS ||
         deal_type == DEAL_TYPE_COMMISSION)
        {
         if(!InpIncludeBalance)
            continue;

         WriteBalanceDeal(file_handle, ticket, deal_type);
         continue;
        }

      //--- Пропускаем не торговые сделки
      if(deal_type != DEAL_TYPE_BUY && deal_type != DEAL_TYPE_SELL)
         continue;

      //--- Пропускаем IN_OUT (одновременный вход/выход) - редкость
      if(entry != DEAL_ENTRY_IN && entry != DEAL_ENTRY_OUT && entry != DEAL_ENTRY_OUT_BY)
         continue;

      //--- Записываем торговую сделку
      WriteTradeDeal(file_handle, ticket, deal_type, entry);
     }

   FileClose(file_handle);
   Print("Экспорт завершен. Файл: ", file_path);
   Print("Всего обработано: ", total_deals, " сделок");
}

//+------------------------------------------------------------------+
//| Запись балансовой операции                                       |
//+------------------------------------------------------------------+
void WriteBalanceDeal(int handle, ulong ticket, ENUM_DEAL_TYPE deal_type)
{
   string deal_type_str;
   switch(deal_type)
     {
      case DEAL_TYPE_BALANCE:    deal_type_str = "balance";    break;
      case DEAL_TYPE_CREDIT:     deal_type_str = "credit";     break;
      case DEAL_TYPE_CHARGE:     deal_type_str = "charge";     break;
      case DEAL_TYPE_BONUS:      deal_type_str = "bonus";      break;
      case DEAL_TYPE_COMMISSION: deal_type_str = "commission"; break;
      default:                   return;
     }

   datetime deal_time = (datetime)HistoryDealGetInteger(ticket, DEAL_TIME);
   double   profit    = HistoryDealGetDouble(ticket, DEAL_PROFIT);

   string time_str = TimeToString(deal_time, TIME_DATE | TIME_MINUTES | TIME_SECONDS);

   FileWrite(handle,
             time_str,          // Время
             "",                // Символ
             (string)ticket,    // Сделка (deal ticket)
             "",                // Ордер
             "",                // Позиция
             deal_type_str,     // Тип
             "",                // Направление
             "",                // Объём
             "",                // Цена
             "",                // Стоимость
             "",                // S/L
             "",                // T/P
             "",                // Комиссия
             "",                // Своп
             DoubleToString(profit, 2), // Прибыль
             ""                 // Изменение
            );
}

//+------------------------------------------------------------------+
//| Запись торговой сделки (buy/sell in/out)                         |
//+------------------------------------------------------------------+
void WriteTradeDeal(int handle, ulong ticket, ENUM_DEAL_TYPE deal_type, ENUM_DEAL_ENTRY entry)
{
   datetime deal_time = (datetime)HistoryDealGetInteger(ticket, DEAL_TIME);
   string   symbol   = HistoryDealGetString(ticket, DEAL_SYMBOL);
   ulong    order    = HistoryDealGetInteger(ticket, DEAL_ORDER);
   ulong    position_id = HistoryDealGetInteger(ticket, DEAL_POSITION_ID);

   string type_str   = (deal_type == DEAL_TYPE_BUY) ? "buy" : "sell";
   string entry_str;
   if(entry == DEAL_ENTRY_IN)
      entry_str = "in";
   else if(entry == DEAL_ENTRY_OUT || entry == DEAL_ENTRY_OUT_BY)
      entry_str = "out";
   else
      entry_str = "";

   double volume       = HistoryDealGetDouble(ticket, DEAL_VOLUME);
   double price        = HistoryDealGetDouble(ticket, DEAL_PRICE);
   double contract_size = SymbolInfoDouble(symbol, SYMBOL_TRADE_CONTRACT_SIZE);

   //--- Стоимость: для buy положительная, для sell отрицательная
   int direction_sign = (deal_type == DEAL_TYPE_BUY) ? 1 : -1;
   double cost = volume * price * contract_size * direction_sign;

   double sl = HistoryDealGetDouble(ticket, DEAL_SL);
   double tp = HistoryDealGetDouble(ticket, DEAL_TP);
   double commission = HistoryDealGetDouble(ticket, DEAL_COMMISSION);
   double swap       = HistoryDealGetDouble(ticket, DEAL_SWAP);
   double profit     = HistoryDealGetDouble(ticket, DEAL_PROFIT);

   string time_str    = TimeToString(deal_time, TIME_DATE | TIME_MINUTES | TIME_SECONDS);
   string volume_str  = DoubleToString(volume, 2);

   //--- Форматирование цены: количество знаков после запятой из спецификации символа
   int digits = (int)SymbolInfoInteger(symbol, SYMBOL_DIGITS);
   string price_str   = DoubleToString(price, digits);

   string cost_str    = DoubleToString(cost, 2);
   string sl_str      = (sl != 0) ? DoubleToString(sl, digits) : "";
   string tp_str      = (tp != 0) ? DoubleToString(tp, digits) : "";
   string comm_str    = (commission != 0) ? DoubleToString(commission, 2) : "";
   string swap_str    = (swap != 0) ? DoubleToString(swap, 2) : "";
   string profit_str  = (profit != 0) ? DoubleToString(profit, 2) : "";

   //--- Изменение (процент) — только для out-сделок
   string change_str = "";
   if(entry == DEAL_ENTRY_OUT || entry == DEAL_ENTRY_OUT_BY)
     {
      //--- Изменение = Прибыль / |Стоимость выхода| * 100
      if(cost != 0.0)
        {
         double change = profit / MathAbs(cost) * 100.0;
         change_str = DoubleToString(change, 2) + "%";
        }
     }

   FileWrite(handle,
             time_str,
             symbol,
             (string)ticket,
             (string)order,
             (string)position_id,
             type_str,
             entry_str,
             volume_str,
             price_str,
             cost_str,
             sl_str,
             tp_str,
             comm_str,
             swap_str,
             profit_str,
             change_str
            );
}
//+------------------------------------------------------------------+

Понятно, что ничего не создалось.

Я пишу:

Пробуй запускать сам этот скрипт, пока не появится файл со сделками.

Он начал искать все терминалы на компьютере, потом открыл терминал в отдельном окне, который уже открыт (как?), поныкался и сообщил:

Похоже, Python завис при вызове mt5.initialize() или history_deals_get(). Возможно, терминал не готов или MetaTrader5 библиотека ждет терминал.

Попробуем другой подход - убить все процессы и запустить заново.


Отлично, модуль установлен. Напишу Python-скрипт для экспорта сделок через API терминала:


В общем, "убил" все окна с терминалом и самоликвидировался, закрыв ME.
 
Забавно, но понятие "Стоимость" (Рыночная стоимость) у нас не ищется в хэлпе, и как считается - официально, получается - тайна. Или я не так ищу?
И почему нельзя получить исторически это значение для сделки, ведь оно отображается в истории сделок в самом терминале.