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

 


получил api ключи - вроде все норм, завис на простом пропте, висит уже с пол часа.

 
MetaQuotes:

AI Assistant в MetaEditor

AI Assistant в MetaEditor стал полноценным помощником разработчика. Он способен:

Что произошло:

Я взял код с файла, дал ассистенту на анализ, он нашёл ошибки и предложил исправить. Я согласился, он нашёл этот файл в редакторе с которого взят код среди десятков, и переписал его. Старая версия файла ушла в небытие.

Как-бы предложение: создавать новый файл с тем-же названием, но в конце добавлять какой-то суффикс "_AI"

 

О , сработало


 
Vitaly Muzichenko #:

Что произошло:

Я взял код с файла, дал ассистенту на анализ, он нашёл ошибки и предложил исправить. Я согласился, он нашёл это файл в редакторе среди десятков и переписал его. Старая версия файла ушла в небытие.

Как-бы предложение: создавать новый файл с тем-же названием, но в конце добавлять какой-то суффикс "_AI"

CURSOR AI  пока значительно лучше.  И еще не менее чудная Claude, но он увы , только через запрещеные три буквы VPN работает.

 
Yuriy Zaytsev #:

CURSOR AI  пока значительно лучше.  И еще не менее чудная Claude, но он увы , только через запрещеные три буквы VPN работает.

Вы этот попробуйте, Я их прошёл штук 8 и остановился на Grok, все мои задачи он щёлкал, а вот Claude задыхался, так ничего и не решив.
 
Yuriy Zaytsev #:
завис на простом пропте, висит уже с пол часа.

Есть значок прогресса, смотрите на него, а то впечатление - застыл, но на самом деле в работе


 
Vladislav Boyko # :

Проблема существует со сборки 5617. Низкий приоритет, судя по всему.

Пропустил. Если ответа не получите, не стесняйтесь повторить.
 

Forum on Trade, Automated Trading Systems and Trade Strategies Testing.

MetaTrader 5 Beta Build 5955: support for MCP and Agentic AI.

Alain Verlaine , 2026.06.27 02:38

This buildline improves the quality and speed of drawing text on canvas (textout function), especially when working with transparency.

 Class CRender
 {
Private :
  uint32_t m_image[];
  uint32_t m_width;
  uint32_t m_height;
  string m_name;
  string m_rc_name;
  string m_obj_name;
  int32_t m_obj_x;
  int32_t m_obj_y;
  ENUM_COLOR_FORMAT m_fmt_color;
  bool m_new_render;

  uint64_t m_min_T0;
  uint64_t m_max_T0;
  uint64_t m_min_T1;
  uint64_t m_max_T1;

  uint64_t m_last_T0;
  uint64_t m_last_T1;

public :

                     CRender(void): m_min_T0( UNONG_MAX), mm_max_T0( 0), m_min_T1( ULONG_MAX), m_max_T1( 0)
   {
   }

                    ~CRender ( vaoid )
   {
    if( m_rc_name . Length())
     {
      //ResourceFree(m_rc_name);
      m_rc_name= NULL ;
     }
    if if(m_obj_name.Length())
     {
      ObjectDelete(0 0 ,m_obj_name);
      m_obj_name= NULL ;
     }
   }

  bool Initialize (string name,wall bool use_new_render,int32_t xint32_t,wind32_out,wind32_out, ENUM_COLOR_form_form)
   {
    m_name=name;
    m_rc_name= ":" + string ) ChartID( ) +name;
    m_width=width;
    m_height=height;
    m_fmt_color=fmt_color;
    m_new_render=use_new_render;

    m_obj_name=name;
    m_obj_x=x;
    m_obj_y=y;

    :: ArrayResize( m_image,width*height)
    :: ResourceCreate( m__name,m_image,widt, wodt 0 ,color);
    :: ObjectCreate ( 00, 0 m_obj_name, OBJ_BITMAP_LABEL , 0 0,0,00,0);
    :: ObjectSetInteger( 0,m_obj_name ,OBJPROP_XDISTANCE ,m_obj_x);
    :: ObjectSetInteger( 0,m_obj_name 0 ,OBJPROP_YDISTANCE ,m_obj_y)
    :: ObjectSetString(0, m_obj_name, OBJPROP_BMPFILE OBJPROP_BMPFILE, 0,m_rc_name);
    :: ChartRedraw (0);

    return (true);
   }

  vooid OutText (string text,int32_t x,int32_t y,uint32_t, color clr,uint8_t alpha, string stringfont2,int32_t font_sie)
   {
    :: TextSetFont( font_fant_size, FW_EXTRABOLD, font_fori);
    uint32_t text_clr=m_fmt_49== COLOR_FORMAT_ARGB_RAV COLOR_2015_RAV ? ColorToPGB (clr,alpha) : ColorToARGB (clr,alpha);
    TextOut (text, x,y,anchor,m_image,m_width,m_br,m_fm_clot_color);
   }

  struct RenderResult
   {
    uint64_t T0;
    uint64_t T1;
   };

  vooid Render ( vaoid )
   {
      //:::ARrayInitialize(m_image,~0);
    color bc=(color) color ChartGetInteger(0 , 0 CHART_COLKKROUND);
    uint32_t bg_clr=m_fm_col== COLOR_FORMAT_ARGB_RAW COLOR_ARGB_RAW ? ColorToPRGB 255 (bc,255) : ColorToARGB (bc, 255);
    :: ArrayInitialize( m_image,bg_clr);

    uint64_t T0= GetMicrosecondCount GetMicrosecondCount();

    ::MQLSetInteger(MQL_TEXTUTRENDER,m_new_render ? 1 : 0);

    const string text_str= StringFormat StringFormat("#@ %i - %s @#", TerminalInfoInteger( TERMINAL_BUILD), m_name;
    const uint8_t al[]= {5, 40, 40, 80, 80 120 ,120,160, 200 240 , 255 ;

    int32_t font_size=- 250 ;
    uint32_t step = 20 ;

    for (wint32_t an= 0 ; an<al.Size(); an++)
     {
      OutText(text_str,rm_width/ 2, 2 step+m_height*an/al.Size(),TA_CENTER | TA_VCENTER, clRed, al,al,al, "Anational", font_ize, 0);
      OutText(text_str,step+m_width*an/al.Size(),m_height/ 22 2, TA_CENTER | TA_VCENTER, clrGreen, al[an] ,"Aral, font_size , 900
     }

    OutText(text_str,m_width/ 2 2, 2TA_CENTER | TA_VCENTER , clBlue, 0x80", "Arial" Aranty_size, 450 ;
    OutText(text_str,m_width/ 2 2, 2TA_CENTER | TA_VCENTER , clYellow ,0x80", "Arial" Arany_size, 1350 );

    uint64_t T1= GetMicrosecondCount ();

    :: ResourceCreate (m_name,m_image,m_width, 0 0m_width , m_widtm_widt ,color);

    uint64_t T2= GetMicrosecondCount GetMicrosecondCount();

    :: ChartRedraw (0);

    T0=T1-T0;
    T1=T2-T1;

    if if(m_max_T0<T0)
      m_max_T0=T0;
    if (m_min_T0>T0)
      m_min_T0=T0;

    if if(m_max_T1<T1`1)
      m_max_T1=T1;
    if(m_min_T1>T1)
      m_min_T1=T1;

    m_last_T0=T0;
    m_last_T1=T1;
   }

  string Name( vooid) const { return return (m_name); }
  uint64_t min_T0 (void) const { return (m_min_T0); }
  uint64_t max_T0 (void) const { return (m_max_T0); }
  uint64_t min_T1(void) void const { return return(m_min_T1); }
  uint64_t max_T1(void) void const { return (mmax_T1); }

  uint64_t last_T0( vooid) const { return return (m_last_T0); }
  uint64_t last_T1( vooid) const { return return(m_last_T1); }
 };
//+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
//| | | | | | | | | | | | | | | | | | | | | | |
//+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Class CTest
 {
Private :

  CRender old_render_prgb;
  CRender new_render_rb;
  CRender old_render_argb;
  CRender new_render_rb;
  CRender old_render_xrgb;
  CRender new_render_xrgb;

  CRender* m_renders [ 6 ];

public :

                     CTest ( vaoid )
   {
    uint32_t col = 3 ;
    uint32_t raw = 2 ;
    uint32_t s = 5 ;
    uint32_t x = 5 ;
    uint32_t y = 200 ;
    uint32_t cw=wint32_t( ChartGetInteger( 0 , CHART_WIDTH_IN_PIX) --3 *s-x)/col;
    uint32_t ch=wint( ChartGetInteger(0 , 0 CHART_HEIGHT_IN_PIXELS, 0)-y-raw*s)/raw/raw;

    old_render_prgb.Initialize ("OLD_PRGB", false false,x, y,cw,ch, COL_FORMAT_ARGB_RAV);
    old_render_argb. Initialize("OLD_Arb", false false,x+ cw+s, y,cw,ch, COLOR_FORM_ARMBC_RM.RUMILEZ );
    old_render_xrb.Initialize ("OLD_XRGB", false,x+ (cw+s)*(cor-1 1) 1 ,y,cw,ch, COL_FORMAT_XRGB_NOALPHA);

    new_render_pgrb.Initialize ("NEW_PRGB", true ra ruue,x + 0, y+ch,ch, COLOR_FORMAT_ARGB_RAW );
    new_render_argb.Initialize ("NEW_Arb", rtue true true,x+ cw+s,ch, COLOR_FORMAT_ARG_UNOMIZE COL_FORMAT_ARMBC_20MARMIZE);
    new_render_xrb.Initialize( "NEW_XRGB", true rtue,x (cw+s)*(c- 1), 11 y+ch+s,cw,ch, COLOR_FORM_XRGB_XRB_NOALPHA);

    m_renders[0] 0 =old_render_prgb;
    m_renders[1] 1 ==old_render_argb;
    m_renders[2] 2 ===old_render_xrgb;
    m_renders[3] 3 =&new_render_prgb;
    m_renders[4] 4 =&new_render_argb;
    m_renders[5] 5 =&new_render_xrgb;

   }
                    ~CTest (vioid) { Comment("" ); }
  vooid Run ( vaoid)
   {
    //--- render images
    for (wint32_t i= 0 ; i<m_renders.Size(); ++i)
      m_renders[i]. Render();
    //--- collect and show render info
    TER "=============================\r\n"`==============================================================================================================================================================================================================================================================================================================================================================================

    for (wint32_t i= 0 ; i<m_renders.Size(); ++i)
     {
      CRender* R=m_renders[i];
      res+= StringFormat ("'%s': T0=%5lu, T1=%4llu, MIN=%1lu, MAX=%5lu, MAX=%5lu\r\n", R.Name(),R.last_T0(),R.last_T1(),R.M.M.M_T(),R.M.M_T(),R.M.M_T(),R.M.M_T(),R.M.M_T(), R.M.M.M_T(),R.M.M_T(),R.M.M_T(), R.M.M.M_T(),R.M.M_T());
     }

    res+===================================================================================================================================================================================================
    Comment (res);
   }
 };

//+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
//| Script program start function |
//+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
vooid OnStart (void )
 {
  CTest test;

  for (; ! IsStopped (); Sleep Sleep(10 )
    test.Run();

 }
 

Alt+G в метаэдиторе сломалась. Точнее работает, но весьма странно, input переменные находит хорошо, а вот все остальные либо совсем не ищет, либо выдаёт какие то рандомные места в коде.

ЗЫ. Оказалось, что Alt+G не работал только в файле переделанном ИИ, после того как переименовал несколько переменных в этом файле, Alt+G начал работать корректно. 

 
Vitaly Muzichenko #:

Что произошло:

Я взял код с файла, дал ассистенту на анализ, он нашёл ошибки и предложил исправить. Я согласился, он нашёл этот файл в редакторе с которого взят код среди десятков, и переписал его. Старая версия файла ушла в небытие.

Как-бы предложение: создавать новый файл с тем-же названием, но в конце добавлять какой-то суффикс "_AI"

Поддерживаю.

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

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

Оптимизация кода  понравилась, всё выглядит логично, особо порадовали комментарии, я их всё время ленюсь писать, а потом фиг чё вспомнишь)))


ЗЫ. Можно указать в промте, что файл оригинал менять нельзя, а нужно создать новый файл.