Новая версия платформы MetaTrader 5 build 6180: больше ИИ-функций - страница 11

 

Удалось поймать одну из причин периодического MCP transport error в AI Assistant непосредственно в момент сбоя.

Симптом:

AI Assistant сообщал, что одновременно недоступны оба MCP:

  • MetaEditor — 127.0.0.1:22345

  • MetaTrader — 127.0.0.1:22346

get_workspace_info и остальные MCP-вызовы завершались transport error .

Ожидание и повторные попытки не помогали. Ранее проблему временно решал перезапуск MetaEditor/Terminal.

При этом проверка непосредственно ВО ВРЕМЯ ошибки показала, что сами MCP-серверы исправны.

Test-NetConnection 127.0.0.1 -Port 22345 TcpTestSucceeded : True Test-NetConnection 127.0.0.1 -Port 22346 TcpTestSucceeded : True

HTTP endpoint обоих MCP также нормально отвечал:

curl http://127.0.0.1:22345/mcp

HTTP/1.1 401 Unauthorized
Server: MetaTrader5-MCP
MCP-Protocol-Version: 2025-06-18

То же самое на 22346 .

То есть listener, HTTP-сервер и сам MCP endpoint были живы. 401 ожидаем, так как curl выполнялся без Bearer API key.

goose.exe , MetaEditor64 и terminal64 также были запущены.

Дальше обнаружилось интересное.

На компьютере использовался Happ/Xray с включённым Windows System Proxy:

ProxyEnable : 1 ProxyServer : 127.0.0.1:10809

Причём ProxyOverride уже содержал:

localhost;127.*;...

Однако TCP-соединения показали следующую цепочку:

goose.exe 127.0.0.1:61980 -> 127.0.0.1:10809 ESTABLISHED xray.exe 127.0.0.1:61983 -> 127.0.0.1:22346 ESTABLISHED

То есть локальный MCP-трафик AI Assistant фактически шёл:

goose.exe
   ↓
System HTTP Proxy :10809
   ↓
xray.exe
   ↓
MCP :22345 / :22346

вместо прямого соединения goose с localhost MCP.

После полного отключения Happ/System Proxy:

ProxyEnable : 0

и перезапуска MetaEditor/Terminal соединения сразу стали прямыми:

goose -> 127.0.0.1:22345 ESTABLISHED
goose -> 127.0.0.1:22346 ESTABLISHED

Причём по несколько активных соединений к обоим MCP.

AI Assistant после этого снова нормально получил доступ к обоим MCP и продолжил работу.

Получается, по крайней мере в моём случае, сами MCP-серверы при transport error не падали. Проблема возникала в цепочке goose → System Proxy/Xray → localhost MCP.

Особенно интересно, что Windows ProxyOverride уже содержал localhost и 127.* , но goose всё равно отправлял соединение к MCP через системный HTTP proxy.

Возможно, стоит проверить обработку Windows System Proxy / ProxyOverride в goose (или HTTP-клиенте, который используется для подключения к MCP).

Это также может объяснять случаи, когда:

  • goose.exe продолжает работать;

  • MCP на 22345/22346 продолжает слушать;

  • перезапуск временно помогает;

  • AI Assistant при этом сообщает, что MCP недоступен.

 
"ты научился получать данные экономического календаря из терминала МТ5?

Нет, честно — прямого доступа к экономическому календарю из терминала МТ5 у меня нет.

🔍 Почему

Набор моих MCP-инструментов для MetaTrader 5 не включает функцию «экономический календарь». Вот полный список того, что у меня есть:

Что могу Календарь
Котировки, история, тики
Позиции, ордера, сделки
Журналы терминала/советников ❌ (но там есть события совпадения)
Файлы на диске ❌ (но CSV содержит события)
Web-запросы ( send_web_request ) ⚠️ только внешние сайты

Инструмента CalendarGetItem , CalendarValueHistory или аналога в MCP — нет."


Можно узнать, когда планируется сделать доступ ИИ ассистента к экономическому календарю?

 
Vitaliy Davydov #:
"ты научился получать данные экономического календаря из терминала МТ5?

Нет, честно — прямого доступа к экономическому календарю из терминала МТ5 у меня нет.

🔍 Почему

Набор моих MCP-инструментов для MetaTrader 5 не включает функцию «экономический календарь». Вот полный список того, что у меня есть:

Что могу Календарь
Котировки, история, тики
Позиции, ордера, сделки
Журналы терминала/советников ❌ (но там есть события совпадения)
Файлы на диске ❌ (но CSV содержит события)
Web-запросы ( send_web_request ) ⚠️ только внешние сайты

Инструмента CalendarGetItem , CalendarValueHistory или аналога в MCP — нет."


Можно узнать, когда планируется сделать доступ ИИ ассистента к экономическому календарю?


Доступно с 6204:

Доступные инструменты экономического календаря

Инструмент Назначение
economic_calendar_list_countries Список стран/регионов календаря (23 записи: US, EU, GB, JP, DE и др.)
economic_calendar_list_events_by_country Справочник событий по стране (например, для США — 248 событий)
economic_calendar_list_events_by_currency События по валюте (EUR, USD и т.д.)
economic_calendar_list_values / list_values_last Значения событий (факт / прогноз / предыдущее) за период
economic_calendar_get_event_by_id Описание события по ID
economic_calendar_get_value_by_id Значение события по ID
 

b6204, ошибка задания размера депозита Тестера через буфер обмена.

В Тестере жму CTRL+C. В буфере обмена получаю такие настройки (CTRL+V в notepad).

[Tester]
Expert=Examples\Moving Average\Moving Average.ex5
Symbol=EURUSD
Period=M1
Optimization=0
Model=4
FromDate=2025.01.01
ToDate=2026.06.01
ForwardMode=0
Deposit=10000
Currency=USD
ProfitInPips=1
Leverage=500
ExecutionMode=0
OptimizationCriterion=6
Visual=0
[TesterInputs]


После этого в notepad меняю Deposit на значение 10. Копирую все настройки в буфер и делаю CTRL+V в Тестере.


Депозит не меняется на 10, а остается 10000. Если же депозит в тексте поменять, например, на 11, то в Тестере будет 11.


Причина - на первые две цифры 10 уже было ранее заданное число в Тестере: 10000. А на 11 - не было.


Просьба исправить эту ошибку. Спасибо.

Строка для поискаOshibka 171.

 
fxsaber # :
b6204, ошибка задания размера депозита Тестера через буфер обмена.
Подтверждено и передано в MetaQuotes.
 
fxsaber #:

b6204, ошибка задания размера депозита Тестера через буфер обмена.

В Тестере жму CTRL+C. В буфере обмена получаю такие настройки (CTRL+V в notepad).


После этого в notepad меняю Deposit на значение 10. Копирую все настройки в буфер и делаю CTRL+V в Тестере.


Депозит не меняется на 10, а остается 10000. Если же депозит в тексте поменять, например, на 11, то в Тестере будет 11.


Причина - на первые две цифры 10 уже было ранее заданное число в Тестере: 10000. А на 11 - не было.


Просьба исправить эту ошибку. Спасибо.

Строка для поискаOshibka 171.

Добрый вечер!
Свою аналогичную проблему гарантированной установки желаемого значения в поле тестера "Начальный депозит" вылечил с помощью Claude, который разработал мне функции:
string Depo = "17000";           // Депозит оптимизации

FinalizeDeposit();

//+------------------------------------------------------------------+
//| Депозит для тестера: ровно значение Depo (без пробелов по краям) |
//+------------------------------------------------------------------+
string DepoForTester()
  {
   string d = Depo;
   StringTrimLeft(d);
   StringTrimRight(d);
   return d;
  }
//+------------------------------------------------------------------+
//| Однократная запись депозита в конце работы скрипта               |
//+------------------------------------------------------------------+
void FinalizeDeposit()
  {
   while(_CS(!MTTESTER::IsReady())) // дождаться, пока тестер освободится
      Sleep(PAUSE);
   if(!ApplyDeposit(DepoForTester()))
      Print("Не удалось установить Начальный депозит ", Depo, " в тестере");
  }
//+------------------------------------------------------------------+
//| Записывает депозит в тестер и проверяет, что он принят           |
//+------------------------------------------------------------------+
bool ApplyDeposit(const string dep)
  {
   string vars[];
   ArrayResize(vars, 3);
   int n = 0;
   vars[n++] = dep;
   vars[n++] = dep + " ";
   if(StringFind(dep, ".") < 0)
      vars[n++] = dep + ".00";
   for(int i = 0; i < n && _CS(true); i++)
     {
      string val = vars[i];
      string cur;
      bool okSet = MTTESTER::SetSettings2("[Tester]\r\nDeposit=" + val);
      Sleep(500); // дать интерфейсу время обновиться
      bool okGet = MTTESTER::GetSettings(cur);
      string got = okGet ? (string)MTTESTER::GetValue(cur, "Deposit") : "<нет>";
      Print("ApplyDeposit попытка ", i + 1, ": записано=[", val, "] set=", okSet, " get=", okGet, " прочитано=[", got, "]");
      if(okSet && okGet && StringToDouble(got) == StringToDouble(dep))
        {
         if(val != dep)
            Print("ApplyDeposit: значение принято в виде [", val, "], а не [", dep, "]");
         return true;
        }
     }
   return false;
  }
 
klycko #:
Свою аналогичную проблему гарантированной установки желаемого значения в поле тестера "Начальный депозит" вылечил с помощью Claude, который разработал мне функции:
Не проверял, но вот это, по-моему, всегда будет давать false.
Print(ApplyDeposit("10)); // false

Пока MQ не исправят баг.