Ошибки, баги, вопросы - страница 2825

 

Иногда в юникоде в первых 2 байтах есть метка о кодировке.

Есть ещё ВинАПИ IsTextUnicode вот такая  https://docs.microsoft.com/en-us/windows/win32/api/winbase/nf-winbase-istextunicode

IsTextUnicode function (winbase.h) - Win32 apps
IsTextUnicode function (winbase.h) - Win32 apps
  • 2018.12.05
  • lastnameholiu
  • docs.microsoft.com
Determines if a buffer is likely to contain a form of Unicode text.
 
Сделал так.
  bool IsUnicode( const uchar &Bytes[] )
  {
    return((::ArraySize(Bytes) > 1) && (Bytes[0] == 0xFF) && (Bytes[1] == 0xFE));
  }

  void Unicode2ANSI( uchar &Bytes[] )
  {
    if (IsUnicode(Bytes))
    {
      const int Size = (::ArraySize(Bytes) >> 1) - 1;
      
      for (int i = 0; i < Size; i++)
        Bytes[i] = Bytes[(i << 1) + 2];
        
      ::ArrayResize(Bytes, Size);
    }
  }
Но не знаю, всегда ли такое условие верное.
 
fxsaber:
Сделал так. Но не знаю, всегда ли такое условие верное.

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

 
Andrei Trukhanovich:

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

Такой обходной вариант рассматривал, спасибо. Похоже, только так и надо.

 

Здравствуйте. Надеюсь правильно выбрал ветку.

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

Индикатор появляется и отрисовывается только если раскоментить Sleep(1) в инициализаторе советника.

В чём может быть проблема?

Sleep() мне не подходит, т.к. ChartWindowFind(0, short_name) кастомного индикатора перестает работать в левой части графика.

Вот простой пример с которым проблемы:

int MACDHandle=INVALID_HANDLE;
double macd_value[];

//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
   MACDHandle=iMACD(_Symbol,0,12,26,9,PRICE_CLOSE);
//Sleep(1);
   ArraySetAsSeries(macd_value, true);
//--- Нужно проверить, не были ли возвращены значения Invalid Handle
   if(MACDHandle<0)
     {
      Alert("Ошибка при создании индикатора MACD - номер ошибки: ",GetLastError(),"!!");
      return(-1);
     }
   else
     {
      Print("MACD инициализирован, handle: ", MACDHandle);
      return(INIT_SUCCEEDED);
     }
  }

//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//--- Освобождаем хэндлы индикаторов
   IndicatorRelease(MACDHandle);
  }

//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void OnTick()
  {
   CopyBuffer(MACDHandle, 0, 0, 1, macd_value);
   Print("macd_value: ", macd_value[0]);
  }
//+------------------------------------------------------------------+
mt5 build 2572
 
fxsaber:

Такой обходной вариант рассматривал, спасибо. Похоже, только так и надо.

Не знаю, изменилось ли что, но на момент написания статьи работал универсальным образом такой код:

FileOpen(filename, FILE_READ | FILE_TXT | FILE_ANSI, 0, CP_UTF8);
Синтаксический анализ MQL средствами MQL
Синтаксический анализ MQL средствами MQL
  • www.mql5.com
Суть программирования заключается в формализации и автоматизации неких процессов с помощью языков общего или специального назначения. Торговая платформа MetaTrader позволяет применять программирование для решения самых разных задач трейдера, благодаря встроенному языку MQL. И обычно процесс программирования строится на анализе и обработке...
 
Подскажите способ узнать номер ядра в тестируемом советнике. В MQL API такого нет, но вроде кто-то делал парсинг пути агента - там не понятно, насколько папки в Tester унифицированы.
 
Stanislav Korotky:
Подскажите способ узнать номер ядра в тестируемом советнике. В MQL API такого нет, но вроде кто-то делал парсинг пути агента - там не понятно, насколько папки в Tester унифицированы.

https://www.mql5.com/ru/forum/1111/page2660#comment_15183572

 

Спасибо, попробую. Правда номер порта может быть и пятизначным (а чисто технически и меньше 4 знаков, хотя они считаются зарезервированными за стандартными сервисами), так что способ экстракции для себя поправлю.

 

Доброго дня!

Допустим, при разработке советника я запускаю его в режиме отладки. Значение по-умолчанию одной из input переменных было только что изменено в коде. Ее run-time значение, тем не менее, подставляется из предыдущего input набора тестера стратегий.

Вопрос: "какого лешего это происходит?". Черт с ним, что синхронизации нет, но почему приоритет в режиме отладки у набора, а не у кода? 

Как в MetaTrader 5 быстро разработать и отладить торговую стратегию
Как в MetaTrader 5 быстро разработать и отладить торговую стратегию
  • www.mql5.com
Скальперские автоматические системы по праву считаются вершиной алгоритмического трейдинга, но при этом они же являются и самыми сложными для написания кода. В этой статье мы покажем, как с помощью встроенных средств отладки и визуального тестирования строить стратегии, основанные на анализе поступающих тиков. Для выработки правил входа и...