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

 
Ilyas:

Что знаете о совместном доступе к данным из нескольких потоков?

В коде используется  lock_guard
Но если его закомментировать, то не каких изменений не наблюдается.

recursive_mutex mtx;
const wchar_t* data;
bool success ;
                
while (condition)
{
        
   if (DataAvailable())
   {
      lock_guard<recursive_mutex> locker(mtx);
      success = ReadData();
   }
        
   if (success)
   {
      lock_guard<recursive_mutex> locker(mtx);
      data = getData();
                
      memcpy(out, data, wcslen(data) * (sizeof(char)*3));
   }
        
   Sleep(1);
}
Всё же начало течь, ну это понятно почему, из за не правильного sizeof
Файлы:
222.PNG  13 kb
 
elibrarius:

Понятно - экономия ресурсов.

А что делать если нужно тестирование на М15 проводить, но данные нужны за несколько лет (чтобы нейросеть обучать)? В своих файлах бары хранить?

нужно просто подождать:

input int InpBars = 100000;

void OnTick()
{  int bars = Bars(_Symbol, _Period);
   if(bars < InpBars) return;

}
 
elibrarius:

Понятно - экономия ресурсов.

А что делать если нужно тестирование на М15 проводить, но данные нужны за несколько лет (чтобы нейросеть обучать)? В своих файлах бары хранить?

Какие проблемы? Вы можете обращаться к данным любого таймфрейма.
 
Slava:
Какие проблемы? Вы можете обращаться к данным любого таймфрейма.

Если тестирование запущу на М15, т.к. торговля в тестере будет на М15, то 100000 бар из истории я не смогу считать. А нужно тестировать торговлю именно на М15.

Если запускать на Мonthly, чтобы иметь историю на 8 лет, то не смогу торговать чаще чем раз в месяц.

 
elibrarius:

Если тестирование запущу на М15, т.к. торговля в тестере будет на М15, то 100000 бар из истории я не смогу считать. А нужно тестировать торговлю именно на М15.

Если запускать на Мonthly, чтобы иметь историю на 8 лет, то не смогу торговать чаще чем раз в месяц.

Почему?

 
Alexey Viktorov:

Почему?

По ценам открытия тестирую. Тик будет приходить раз в месяц.
Если по всем реальным тикам запускать, то можно с сильной пределкой и усложнением кода. Так же будет перерасход ресурсов. Думаю что проще с файлов бары считывать.
 
elibrarius:
Думаю что проще с файлов бары считывать.

я Вам написал решение в одну строку - добавьте в это условие дату тестирования и в тестере тестируйте без проблем, производительность минимум упадет

или  тогда проще сделать как админ предлагает, с файлом конечно не проблема, но велик соблазн потом подглядеть нейросетью куда не следовало бы - у меня так обычно все заканчивалось )))

 
Roman:

В коде используется  lock_guard
Но если его закомментировать, то не каких изменений не наблюдается.

Всё же начало течь, ну это понятно почему, из за не правильного sizeof
С отпуска вернусь, если не в ломы будет, то изучу вопрос. Но, по логике вещей, баг не в mql, а у Вас в коде. Кстати, чисто так, а вдруг, у Вас в библиотека с какой кодировкой работает? Вы точно уверены, что utf-16, а вдруг все таки utf-8, как-никак, самая распространенная.
 
Igor Makanu:

я Вам написал решение в одну строку - добавьте в это условие дату тестирования и в тестере тестируйте без проблем, производительность минимум упадет

или  тогда проще сделать как админ предлагает, с файлом конечно не проблема, но велик соблазн потом подглядеть нейросетью куда не следовало бы - у меня так обычно все заканчивалось )))

Проверил - не помогло.

Да и не должно. Ведь по статье, которую админ процитировал:
Минимальный объем истории при скачивании с торгового сервера для таймфреймов D1 и меньше составляет один год.

А запрошенные мной 100000 баров М15 - это около 3х лет. За первый год бары копируются, это 37 тыс баров, а дальше их просто нет в тестере, ожидание не поможет.

 
elibrarius:

Проверил - не помогло.

Да и не должно. Ведь по статье, которую админ процитировал:
Минимальный объем истории при скачивании с торгового сервера для таймфреймов D1 и меньше составляет один год.

А запрошенные мной 100000 баров М15 - это около 3х лет. За первый год бары копируются, это 37 тыс баров, а дальше их просто нет в тестере, ожидание не поможет.

у меня все работает, поставил тест 2000 г - 2019 на М15, код эксперта:

input int InpBars = 100000;

void OnTick()
{  static bool print_once = true;
   int bars = Bars(_Symbol, _Period);
   if(bars < InpBars) return;

   if(print_once)
   {  Print("OK - ", TimeCurrent());
      print_once = false; }

}

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

2019.10.04 22:15:19.567 Core 1 EURUSD,M15: testing of Experts\IgorM\tst.ex5 from 2000.01.01 00:00 to 2019.10.03 00:00 started with inputs:

2019.10.04 22:15:19.567 Core 1   InpBars=100000

2019.10.04 22:15:19.567 Core 1 2003.01.16 19:30:00   OK - 2003.01.16 19:30:00

2019.10.04 22:15:19.567 Core 1 final balance 10000.00 USD

добавьте в условие дату с которой нужно начать тестирование и обучайте НС, ну или делайте как предложил админ