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

 
Aleksey Vyazmikin #:
Работа с большими файлами стала глючить. Сначала заметил, что проблемы с чтением - недожидаясь окончания чтения программа продолжала работу - помог Sleep(3000), теперь вот смотрю в директорию с файлами и вижу, что мелкий файл появился раньше большого, хотя по коду он должен быть последним - работа скрипта идёт очень долго. Складывается ощущение,что программа не дожидается окончания записи и какие то там внутри сбои происходят... на старых билдах вроде работало верно. Большие файлы - это от гигабайта.

Дополню - вот на скрине видно, что процессорное время тикает, а вот объём памяти не меняется - один скрипт должен записать файл, а другой прочесть иной файл. В итоге один сутки уже висит, а другой два часа почти. Раньше (на прошлой неделе) всё ещё корректно работало. Чего там намудрили? Файлы csv.

Память, вроде как, есть ещё.


 
Aleksey Vyazmikin #:
Работа с большими файлами стала глючить. Сначала заметил, что проблемы с чтением - недожидаясь окончания чтения программа продолжала работу - помог Sleep(3000), теперь вот смотрю в директорию с файлами и вижу, что мелкий файл появился раньше большого, хотя по коду он должен быть последним - работа скрипта идёт очень долго. Складывается ощущение,что программа не дожидается окончания записи и какие то там внутри сбои происходят... на старых билдах вроде работало верно. Большие файлы - это от гигабайта.

Возможно, это поможет.

 

Подскажите в чём может быть причина такого поведения тестера.

Мне нужно,что бы советник начал тестирование при наличии истории больше 2000 дневных баров. Тестер на старте закачивает, точно не помню, но вроде 350 баров, поэтому до 2000 просто проматываю.

//+------------------------------------------------------------------+
void OnTick()
  {
   if(iBars(_Symbol, PERIOD_D1) < 2000)
      return;
   else
      Print("!!! Bars ", iBars(_Symbol, PERIOD_D1), " Time ", TimeCurrent());
   TesterStop();
  }
//+------------------------------------------------------------------+

Тестирование на дневках, OHLC на М1.


Запускаю с даты 31.12.2016, две тысячи баров набегают к 13.04.2023

Запускаю с даты 01.01.2017, две тысячи баров набегают к 07.03.2024

Старт тестирования отличается в один день, две тысячи баров набираются с разницей в 11 месяцев.  Почему так?


Проверил на сбере, картинка такая же. Разница в те же 11 месяцев.

(SBER,D1)

31.12.2016

!!! Bars 2000 Time 2023.01.03 10:00:00

01.01.2017

!!! Bars 2000 Time 2023.12.26 10:00:00


Почему старт тестирования меняю на один день, а две тысячи свечей набираются с разницей в 11 месяцев?

 

Я вообще сломался.

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

//+------------------------------------------------------------------+
void OnTick()
  {
   static bool start = true;
   if(start)
     {
      Print("start ", iTime(_Symbol, PERIOD_D1, 0));
      start = false;
     }
     
   if(iBars(_Symbol, PERIOD_D1) < 2000)
      return;
   else
      Print("!!! Bars ", iBars(_Symbol, PERIOD_D1), " Time ", TimeCurrent());
   TesterStop();
  }
//+------------------------------------------------------------------+

В итоге получил вот:

(SBER,D1)
Дата старта выставленная в тестере 31.12.2016
start 2017.01.03 00:00:00
!!! Bars 2000 Time 2023.01.03 10:00:00

Дата старта выставленная в тестере 01.01.2017
start 2017.01.03 00:00:00
!!! Bars 2000 Time 2023.12.26 10:00:00

Получилось время старта тестирования одинаковое 2017.01.03, а время когда набралось две тысячи баров отличается на 11 месяцев.

Почему?

 
запуска мт5 на маке и выбивает постоянно что делать ?? Уже раз 5 переустанавливал и перезагружал
 
fxsaber #:

Возможно, это поможет.

У меня нет файла в проводнике недописанного, да и закрытие происходит в коде с хэндлом файла, но фиксирую описанное явление.

 
Aleksey Vyazmikin #:

Повторение. И что делать?

ПК

Предположительно, дело в работе с файлами, потому что разделил на два накопителя нагрузку и пока краша нет. При этом 1/3 осталась на SSD, а 2/3 на HDD. Правда, пока ещё даже сутки не прошли, но последние краши происходили в течении пары часов.

 

Как вынести написание методов за пределы класса в случае с указателями?

class Text 
{
public:
   Text(const string label)
   {
     
   }
   void draw()
   {
     
   }
   
  Text   *setColor(const color c)
   {
      return &this;
   }
};
  Text :: *setColor(const color c) // Не работает
   {
      return &this;
   }
 
Vladimir Pastushak #:

Как вынести написание методов за пределы класса в случае с указателями?

Text* Text::setColor( const color c )
{
   return &this;
}
 

Вылетел терминал на другом ПК с другой задачей

JR      0       19:44:03.667    Scripts script Quant_Svod_Biv3_v00 (GBPUSD,H1) loaded successfully
FK      3       21:01:00.422    Exception       C0000005 at 0000000142083C65 read to FFFFFFFFFFFFFFFF
HQ      2       21:01:01.625    Terminal        crashlog generated

Предположительно - мало места ему на диске стало.

Запустил его, и пропали пользовательские символы, что я создал в прошлый раз - в директории они есть

А в терминале нет возможности их выбрать.

Может что где можно подкрутить, что бы они появились?

Чёт не везёт мне в последнее время со стабильностью терминала...