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

 
Alexey Viktorov #:
Так-что вывод: Если работаете с кириллицей, то интерфейс МЕ ставьте русский.
Значит Виндовс вычеркиваю из подозреваемых :)
 

Есть ситуации, когда нужно использовать CustomRatesUpdate очень часто, примерно раз в секунду.

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

пример 186 минутных баров

занимают на диске  64 мегабайта.

Это слишком много, хотелось бы, чтоб размер файла с пользовательским символом был поменьше.

Написал утрированный код, который воспроизводит проблему.

//+------------------------------------------------------------------+
input int var = 1;  //1-используем CustomRatesUpdate, иначе CustomRatesReplace
string symbolName = "";
MqlRates rates1[1], rates2[1];
//+------------------------------------------------------------------+
int OnInit()
  {
   symbolName = _Symbol + "_Custom_" + (string)var;
   //CustomRatesDelete(symbolName, 0, LONG_MAX);

   ResetLastError();
   bool  is_custom;

   if(!SymbolExist(symbolName, is_custom))
      if(!CustomSymbolCreate(symbolName, "Custom", _Symbol))
        {
         Print("CustomSymbolCreate Error ", GetLastError());
         return INIT_FAILED;
        }

   if(!SymbolSelect(symbolName, true))
     {
      Print("SymbolSelect Error ", GetLastError());
      return INIT_FAILED;
     }

   if(ChartOpen(symbolName, PERIOD_CURRENT) == 0)
     {
      Print("ChartOpen Error ", GetLastError());
      return INIT_FAILED;
     }

   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
void OnTick()
  {
   if(CopyRates(_Symbol, PERIOD_CURRENT, 0, 1, rates1) > 0)
     {
      bool update = false;
      if(rates2[0].open != rates1[0].open ||
         rates2[0].high != rates1[0].high ||
         rates2[0].low != rates1[0].low ||
         rates2[0].close != rates1[0].close ||
         rates2[0].real_volume != rates1[0].real_volume ||
         rates2[0].spread != rates1[0].spread ||
         rates2[0].tick_volume != rates1[0].tick_volume)
         update = true;

      if(update)
         if(var == 1)
            CustomRatesUpdate(symbolName, rates1);
         else
            CustomRatesReplace(symbolName, rates1[0].time, rates1[0].time, rates1);

      rates2[0] = rates1[0];
     }
  }
//+------------------------------------------------------------------+

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

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


ЗЫ. CustomTicksAdd записывает в оперативную память и чтоб она скинула на жёсткий диск нужно перезагрузить терминал.

 
Nikolay Kuznetsov #:

Нда, всё таки это похоже бага, но уж не знаю МТ5/МЕ или Виндовс.

У меня Win11Pro Eng 25H2 с установленным пакетом русского языка, но английским интерфейсом. Поиск без учёта регистра не работает. Поставил русский интерфейс - поиск работает. Вернул английский интерфейс - поиск не работает. Видимо в функциях ToUpper/ToLower используется зависимость от системной локали как параметр, а не UTF8/Unicode...

Все рабочие файлы рекомендуется перевести в UTF8. Теперь это дефолтная кодировка.

Если оставлять в локальной кодировке (1251 русской, например), то в зависимости от языка интерфейса и режима "кодировка для несистемного языка", режим перекодировки будет ошибаться.

 
Renat Fatkhullin #:

Все рабочие файлы рекомендуется перевести в UTF8. Теперь это дефолтная кодировка.

Если оставлять в локальной кодировке (1251 русской, например), то в зависимости от языка интерфейса и режима "кодировка для несистемного языка", режим перекодировки будет ошибаться.


Я пробовал установить другой цвет для функции "Comment", но после каждого перезапуска он снова возвращается к цвету по умолчанию. Другие цвета для остальных функций я пока не проверял.

 
Renat Fatkhullin #:
Если оставлять в локальной кодировке (1251 русской, например), то в зависимости от языка интерфейса и режима "кодировка для несистемного языка", режим перекодировки будет ошибаться.
может это и влияет, но не в моём случае, в моём только от языка интерфейса ME.
 
Luu Tuan Trung # :


Я пробовал установить другой цвет для функции "Comment", но после каждого перезапуска он снова возвращается к цвету по умолчанию. Другие цвета для остальных функций я пока не проверял.

Не воспроизводится. Протестировано с последней бета-версией сборки 6033.
 
Aleksandr Slavskii # :

Есть ситуации, когда нужно использовать CustomRatesUpdate очень часто, примерно раз в секунду.

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

пример 186 минутных баров

занимают на диске  64 мегабайта.

Это слишком много, хотелось бы, чтоб размер файла с пользовательским символом был поменьше.

Написал утрированный код, который воспроизводит проблему.

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

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


ЗЫ.  CustomTicksAdd  записывает в оперативную память и чтоб она скинула на жёсткий диск нужно перезагрузить терминал.

Подтверждено и доведено до сведения MQ. Это старая ошибка, которая каким-то образом снова оживает. Спасибо.

 
Vitaly Muzichenko #:

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

Для большинства форекс счетов достаточно вот такой вот 

//+------------------------------------------------------------------+
double              Commission(string symb, double vol = 1)
  {
   MqlCommission commissions[];
   if(SymbolInfoCommissions(symb, commissions) < 0)
      return 0;
   return(MathCeil(commissions[0].tiers[0].value * vol * 100) / 100);
  }
//+------------------------------------------------------------------+
 
Aleksandr Slavskii #:

Для большинства форекс счетов достаточно вот такой вот 

Я показал с одного счёта, какие есть виды комиссий. Да, для форекс-символов - просто, но кроме них есть у меня ещё 3 вида расчёта, и это полагаю что не все.

Опять-же, нужно учитывать: комиссия начисляется за круг, или в каждую сторону.

На скринах видно


Это перечисления


Полный перечень

https://www.mql5.com/ru/docs/marketinformation/symbolinfocommissions

Документация по MQL5: SymbolInfoCommissions / Получение рыночной информации
Документация по MQL5: SymbolInfoCommissions / Получение рыночной информации
  • www.mql5.com
Возвращает правила начисления комиссии для указанного торгового инструмента. Параметры name [in]  Имя символа. Если параметр равен NULL ...
 
Vitaly Muzichenko # :

Я показал с одного счёта, какие есть виды комиссий. Да, для форекс-символов - просто, но кроме них есть у меня ещё 3 вида расчёта, и это полагаю что не все.

Опять-же, нужно учитывать: комиссия начисляется за круг, или в каждую сторону.

На скринах видно


Это перечисления


Полный перечень

https://www.mql5.com/ru/docs/marketinformation/symbolinfocommissions

Извините, но то, о чём вы сообщаете, мне непонятно. Возможно, в новой функции есть ошибка или чего-то не хватает?