Новая версия платформы MetaTrader 5 build 5370: улучшения в веб-версии - страница 11

 
Artyom Trishkin #:

Это же советник?

Так он не снимается с графика при смене периода графика. Утечка памяти происходит только тогда, когда программа прекращает работу и снимается с графика. 

Теперь понял, еще раз спасибо!
 
Vladimir Pastushak #:
Но при обычной работе эксперта, переключения таймфреймов, изменения настроек робота, ошибки нет.
А при удалении эксперта с графика тоже такого нет?
 
Sergey Gridnev #:
А при удалении эксперта с графика тоже такого нет?
Нет нету
 

Вы графики переобули или у меня крыша едет?😁

(я случайно сохранил скриншот перед обновлением 5370 -> 5395)

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

Есть ли серьезные планы по обновлению MetaEditor до уровня IDE для программирования профессионального уровня?

Renat Fatkhullin, 2025.05.29 13:11

Что мы дальше будем делать в терминале и редакторе:

  • Поменяем графический движок чартов, отказавшись от старого GDI
  • Увеличим возможности графиков, добавив совмещение дополнительных символов на главном графике
  • Расширим функционал ручного трейдинга
  • Расширим совместную работу над проектами
  • Включим новый компилятор с новым интеллисенсом
  • Расширим проекты
  • Компилятор сможет работать с Visual Studio проектами и нативно компилировать C/C++ проекты для создания MQL5 модулей/библиотек
  • Введем пакетный менеджер для легкого импорта модулей, они будут нативно компилироваться в единый итоговый EX5 файл
  • Включим нативные версии под ARM64 платформу, все остальные компоненты системы уже нативно работают под ARM64
 

Очевидно, произошли некоторые изменения, шрифт графика изменился тоже.

Obviously, some changes have taken place, the chart's font has also changed.

 

b5370  -> b5395

сломался расчет индикатора

было



стало


+ в левой части исчезают линии, голуба линия прервана, при пролистывании появляется дальше


проверил в 3 Терминалах, при обновлении, без компиляции, компиляция не исправляет

 
Vladislav Boyko #:
графики переобули

Похоже, прокрутка графика больше не тормозит при максимальном zoom out и наличии индикаторного подокна (как это было еще несколько дней назад).👍

//---

Looks like chart scrolling no longer lags when both maximum zoom out and an indicator subwindow are present (as it did just a few days ago).👍

The built-in translator probably wouldn’t get this right, so I added my own (roughly correct) English version.

 
на 2 индикаторах стали отображаться буферы с EMPTY_VALUE
 
lynxntech #:
на 2 индикаторах стали отображаться буферы с EMPTY_VALUE

Вы не приложили никаких подтверждений.

Запускаю Trix из стандартной поставки - EMPTY_VALUE в начале истории не отрисовываются.

//+------------------------------------------------------------------+
//|                                                         TRIX.mq5 |
//|                             Copyright 2000-2025, MetaQuotes Ltd. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright   "Copyright 2000-2025, MetaQuotes Ltd."
#property link        "https://www.mql5.com"
#property description "Triple Exponential Average"
#include <MovingAverages.mqh>
//--- indicator settings
#property indicator_separate_window
#property indicator_buffers 4
#property indicator_plots   1
#property indicator_type1   DRAW_LINE
#property indicator_color1  clrRed
#property indicator_width1  1
#property indicator_label1  "TRIX"
#property indicator_applied_price PRICE_CLOSE
//--- input parameters
input int InpPeriodEMA=14;               // EMA period
//--- indicator buffers
double    TRIX_Buffer[];
double    EMA[];
double    SecondEMA[];
double    ThirdEMA[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
void OnInit()
  {
//--- indicator buffers mapping
   SetIndexBuffer(0,TRIX_Buffer,INDICATOR_DATA);
   SetIndexBuffer(1,EMA,INDICATOR_CALCULATIONS);
   SetIndexBuffer(2,SecondEMA,INDICATOR_CALCULATIONS);
   SetIndexBuffer(3,ThirdEMA,INDICATOR_CALCULATIONS);
//--- sets first bar from what index will be drawn
   PlotIndexSetInteger(0,PLOT_DRAW_BEGIN,3*InpPeriodEMA-3);
//--- name for index label
   string short_name=StringFormat("TRIX(%d)",InpPeriodEMA);
   IndicatorSetString(INDICATOR_SHORTNAME,short_name);
   PlotIndexSetString(0,PLOT_LABEL,short_name);
//--- indicator digits
   IndicatorSetInteger(INDICATOR_DIGITS,5);
  }
//+------------------------------------------------------------------+
//| Triple Exponential Average                                       |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
                const int prev_calculated,
                const int begin,
                const double &price[])
  {
   if(rates_total<3*InpPeriodEMA-3)
      return(0);
//---
   int start;
   if(prev_calculated==0)
     {
      start=3*(InpPeriodEMA-1);
      for(int i=0; i<start; i++)
         TRIX_Buffer[i]=EMPTY_VALUE;
     }



 
#define RESET 0
#property description "iLevels"
#property indicator_chart_window
#property indicator_buffers 1
#property indicator_plots   1
//--- plot Label1
#property indicator_label1  "Level_upper"
#property indicator_type1   DRAW_LINE
#property indicator_color1  clrMediumPurple
#property indicator_style1  STYLE_SOLID
#property indicator_width1  3


//--- indicator buffers
double Buffer1[];

//---- Объявление целых переменных начала отсчёта данных
int min_rates_total;
//---- Получение таймфрейма в виде строки
string GetStringTimeframe(ENUM_TIMEFRAMES timeframe)
  {return(StringSubstr(EnumToString(timeframe),7,-1));}
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- Инициализация переменных начала отсчёта данных (сколько нужно минимум баров для начального расчета индикатора)
   min_rates_total=24;
//--- indicator buffers mapping
   SetIndexBuffer(0,Buffer1,INDICATOR_DATA);
//---
   PlotIndexSetInteger(0,PLOT_SHIFT,1); // с форума предложили
   IndicatorSetInteger(INDICATOR_DIGITS,_Digits);
   IndicatorSetString(INDICATOR_SHORTNAME,"Levels 60/60");
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
  {
//--- проверим минимальный расчет баров
   if(rates_total<min_rates_total)
      return(RESET);
//--- проверка на новый бар
   if(prev_calculated==rates_total)
      return(rates_total);
//---- объявления локальных переменных
   int start,bar,indexD1;
   double openDay;
//---- проверим прошлый расчет для пересчёта баров (смена графика, периода или компиляция)
   if(prev_calculated>rates_total || prev_calculated<=0) // проверка на первый старт расчёта индикатора
     {
      //--- с какого бара делать первый расчет индикатора
      start=min_rates_total; // для работы, почти с начала графика, т.е. от 0
      //--- расчет будет новый, очистим буферы
      ArrayInitialize(Buffer1,EMPTY_VALUE);

     }
   else
      start=prev_calculated; // расчет только новых баров
//+------------------------------------------------------------------+
//| основной цикл расчёта индикатора                                 |
//+------------------------------------------------------------------+
   for(bar=start; bar<rates_total && !IsStopped(); bar++)
     {
      indexD1=iBarShift(Symbol(),PERIOD_D1,time[bar],true);
      if(indexD1<0)
         return(RESET);
      openDay=iOpen(Symbol(),PERIOD_D1,indexD1);
      //----
      //----
      Buffer1[bar]=openDay;
      //--- удалим значения с прошлого бара, чтобы исключить переход линий
      if(Buffer1[bar]!=Buffer1[bar-1]
        
        )
        {
         Buffer1[bar-1]=EMPTY_VALUE;
        
        }
     }
//---
   return(rates_total);
  }
//+------------------------------------------------------------------+