Пользовательские символы. Ошибки, баги, вопросы, предложения. - страница 44

 
fxsaber #:

Значит, сломали.

Ну пока починят можно использовать префикс USDUSD и не будет проблем автоматического изменения валют кастомного символа после перезагрузки Терминала.


 

Тестер не работает с кастомным символом, у которого отрицательные значения.

Шаги воспроизведения:
Через графический интерфейс, создать любой кастомный символ,  чтоб получились отрицательные значения на шкале цен. Например EURUSD-GBPUSD.
В настройках разрешить отрицательные цены.
Запустить тест любого эксперта или индикатора, только по ценам открытия.

Журнал тестера.

2023.07.27 14:40:28.023 EURUSD-GBPUSD 2023.06.29 23:56:00: corrupted history detected (s:0, o:-17452, h:+0, l:-16, c:-16 -- tv:68, rv:0)
2023.07.27 14:40:28.023 EURUSD-GBPUSD 2023.06.29 23:57:00: corrupted history detected (s:0, o:-17466, h:+3, l:-6, c:-6 -- tv:85, rv:0)
2023.07.27 14:40:28.023 EURUSD-GBPUSD 2023.06.29 23:58:00: corrupted history detected (s:0, o:-17472, h:+0, l:-11, c:-11 -- tv:120, rv:0)
2023.07.27 14:40:28.023 EURUSD-GBPUSD 2023.06.29 23:59:00: corrupted history detected (s:0, o:-17482, h:+0, l:-21, c:-21 -- tv:214, rv:0)

В истории

cs

 

@Renat Fatkhullin

Вопрос по скорости создания кастомных символов.

Пытаюсь создать в цикле около 150к символов.
Просто CustomSymbolCreate() для теста, пока без заполнений свойств символа.
Первые 5к-10к символов создаются относительно не долго.
Но потом с увеличением созданных символов начинается жуткий тормоз.
Причем, чем больше символов создаётся, тем медленнее создаются следующие.
Время идёт на десятки минут!

int cnt=0;
      
for(int i=0; i<150000 && !_StopFlag; i++)
{
   if(!CustomSymbolCreate("Symb_"+(string)i, "\\TEST"))
      break;   
      
   cnt++;   
      
   if((i%5000) == 0)   
      Print(i);     
} 
   
Print("Создано символов: ", (string)cnt);
II      0       17:19:14.342    Test2 (EURUSD,M1)       0
RO      0       17:19:21.058    Test2 (EURUSD,M1)       5000                            //Количество созданных символов
JS      0       17:19:42.110    Test2 (EURUSD,M1)       10000
II      0       17:20:21.995    Test2 (EURUSD,M1)       15000
CL      0       17:21:42.469    Test2 (EURUSD,M1)       20000
GS      0       17:23:38.663    Test2 (EURUSD,M1)       25000                                        
II      0       17:25:55.174    Test2 (EURUSD,M1)       30000
IR      0       17:28:28.893    Test2 (EURUSD,M1)       35000
RI      0       17:31:27.062    Test2 (EURUSD,M1)       40000
KO      0       17:35:01.668    Test2 (EURUSD,M1)       45000
JL      0       17:35:50.510    Test2 (EURUSD,M1)       Создано символов: 46173         //Тут принудительно прервал выполнение

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

Это нормально? Как то можно ускорить процесс создания кастомных символов в большом объёме?

Добавлено.
Записал видео.
https://drive.google.com/file/d/1HF9mP5iN7EVlgGZNeHP-8UGNVW1xzcCD/view?usp=drive_link

 
Roman #:

@Renat Fatkhullin

Вопрос по скорости создания кастомных символов.

Пытаюсь создать в цикле около 150к символов.
Просто CustomSymbolCreate() для теста, пока без заполнений свойств символа.
Первые 5к-10к символов создаются относительно не долго.
Но потом с увеличением созданных символов начинается жуткий тормоз.
Причем, чем больше символов создаётся, тем медленнее создаются следующие.
Время идёт на десятки минут!

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

Это нормально? Как то можно ускорить процесс создания кастомных символов в большом объёме?

Как я понимаю, это процесс чтения, разжатия, преобразования, сжатия данных.

По идее процесс разжатия можно было бы кэшировать. Всё остальное - видимо зависит от скорости процессора и накопителя, ну чутка памяти.

 

Пожалуйста, помогите мне с этой темой: https://www.mql5.com/ru/forum/456519

Я столкнулся с пользовательским символом и получаю тики с помощью функции CopyTicks(). Когда я перезапускаю МТ5, все работает нормально. В противном случае я получаю цены, разделенные на 100.

Пожалуйста, помогите.

CopyTicks() не возвращает правильное значение для пользовательского символа. - У меня возникла проблема с использованием пользовательского символа, который раньше у меня не был.
CopyTicks() не возвращает правильное значение для пользовательского символа. - У меня возникла проблема с использованием пользовательского символа, который раньше у меня не был.
  • 2023.10.28
  • www.mql5.com
у меня возникла проблема с использованием пользовательского символа , которой раньше у меня не было. используя функцию копирования тиков Значение почти делится на 100. Также возникает та же проблема с функцией CopyTicksRange
 
Подскажите, как после закрытия чарта символа убрать его из обзора рынка (без Sleep)?
void OnStart()
{
  MathSrand((int)TimeLocal());
  const string Symb = "TEST" + (string)MathRand();
  
  MqlTick Tick[1];
    
  if (CustomSymbolCreate(Symb, NULL, _Symbol) && SymbolSelect(Symb, true) && SymbolInfoTick(_Symbol, Tick[0]))
  {
    Print(ChartClose(ChartOpen(Symb, _Period))); // true
    
//    Sleep(3000);
    
    Print(SymbolSelect(Symb, false)); // false
    Print(_LastError); // 4305
  }
}
 
b4050, разное поведение CustomTicksAdd.
void OnStart()
{
  MqlTick Tick[1];    
  SymbolInfoTick(_Symbol, Tick[0]);
  
  MathSrand((int)TimeLocal());
  string Symb = "TEST" + (string)MathRand();
  
  CustomSymbolCreate(Symb, NULL, _Symbol);
  CustomSymbolSetInteger(Symb, SYMBOL_DIGITS, SymbolInfoInteger(_Symbol, SYMBOL_DIGITS));
  Print(CustomTicksAdd(Symb, Tick)); // false
  Print(_LastError); // 4302
    
  CustomSymbolCreate(Symb += "1");
  CustomSymbolSetInteger(Symb, SYMBOL_DIGITS, SymbolInfoInteger(_Symbol, SYMBOL_DIGITS));
  Print(CustomTicksAdd(Symb, Tick)); // true
}
Строка для поискаOshibka 077.
 
b4050, CustomTicksAdd некорректно формирует историю тиков.
void OnStart()
{
  MathSrand((int)TimeLocal());
  const string Symb = "TEST" + (string)MathRand();
  
  CustomSymbolCreate(Symb);
  CustomTicksDelete(Symb, 0, LONG_MAX);
  
  MqlTick TickOriginal[1];
    
  if (SymbolSelect(Symb, true) && SymbolInfoTick(_Symbol, TickOriginal[0]))
  {
    CustomSymbolSetInteger(Symb, SYMBOL_DIGITS, SymbolInfoInteger(_Symbol, SYMBOL_DIGITS));
//    CustomSymbolSetDouble(Symb, SYMBOL_POINT, SymbolInfoDouble(_Symbol, SYMBOL_POINT));
    
    CustomTicksAdd(Symb, TickOriginal);    
        
    MqlTick TickCustom1[];        
    CopyTicks(Symb, TickCustom1);
    
    MqlTick TickCustom2[1];    
    SymbolInfoTick(Symb, TickCustom2[0]);
    
    ArrayPrint(TickOriginal);        
    ArrayPrint(TickCustom1);
    ArrayPrint(TickCustom2);
  }
}


Результат.

Test5-3 (EURUSD,M1)                      [time]   [bid]   [ask] [last] [volume]    [time_msc] [flags] [volume_real]
Test5-3 (EURUSD,M1)     [0] 2023.11.01 23:14:00 1.05708 1.05714 0.0000        0 1698880440483       6       0.00000
Test5-3 (EURUSD,M1)                      [time]    [bid]    [ask] [last] [volume]    [time_msc] [flags] [volume_real]
Test5-3 (EURUSD,M1)     [0] 2023.11.01 23:14:00 10.57080 10.57140 0.0000        0 1698880440483       6       0.00000
Test5-3 (EURUSD,M1)                      [time]   [bid]   [ask] [last] [volume]    [time_msc] [flags] [volume_real]
Test5-3 (EURUSD,M1)     [0] 2023.11.01 23:14:00 1.05708 1.05714 0.0000        0 1698880440483       6       0.00000

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

 
fxsaber #:
Подскажите, как после закрытия чарта символа убрать его из обзора рынка (без Sleep)?

Полагаю, что эта вещь работает асинхронно, поэтому либо повторять SymbolSelect(false) в цикле, пока не сработает (это аналог Sleep, но с большей гарантией, потому что задержка в Sleep взята с потолка), либо вызвать что-то вроде ChartRedraw(id), что предположительно прокачает очередь команд, но я не уверен, какой id передавать - текущего графика или закрытого.

 
Stanislav Korotky #:

Полагаю, что эта вещь работает асинхронно, поэтому либо повторять SymbolSelect(false) в цикле, пока не сработает (это аналог Sleep, но с большей гарантией, потому что задержка в Sleep взята с потолка), либо вызвать что-то вроде ChartRedraw(id), что предположительно прокачает очередь команд, но я не уверен, какой id передавать - текущего графика или закрытого.

Костыль с задержкой понятен. Ищу подтягивание очереди.

Причина обращения: