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

 
Igor Makanu:

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

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

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

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

Теперь понял вашу идею)

Т.е. тест надо не за 2 последних месяца запускать, а за 3 года, все эти 3 года пропустить в OnTick и начинать расчеты только на последних 2х месяцах.

Да - это самое простое решение. Спасибо!

 
elibrarius:

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

Быстрей будет работать со своим файлом истории в режиме оптимизатора "Математические вычисления".

 
elibrarius:

Теперь понял вашу идею)

Т.е. тест надо не за 2 последних месяца запускать, а за 3 года, все эти 3 года пропустить в OnTick и начинать расчеты только на последних 2х месяцах.

Да - это самое простое решение. Спасибо!

время в условие добавьте

input int InpBars = 100000;
input datetime InpDataTest = D'2015.01.01 00:00'; 
void OnTick()
{  static bool print_once = true;
   int bars = Bars(_Symbol, _Period);
   datetime t = TimeCurrent();
   if(bars < InpBars || t < InpDataTest  ) return;

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

}

2019.10.04 22:36:42.729 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:36:42.729 Core 1   InpBars=100000

2019.10.04 22:36:42.729 Core 1   InpDataTest=1420070400

2019.10.04 22:36:42.729 Core 1 2015.01.02 09:00:00   OK, TimeCurrent() =  2015.01.02 09:00:00

2019.10.04 22:36:43.041 Core 1 final balance 10000.00 USD



 
Igor Makanu:

время в условие добавьте

2019.10.04 22:36:42.729 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:36:42.729 Core 1   InpBars=100000

2019.10.04 22:36:42.729 Core 1   InpDataTest=1420070400

2019.10.04 22:36:42.729 Core 1 2015.01.02 09:00:00   OK, TimeCurrent() =  2015.01.02 09:00:00

2019.10.04 22:36:43.041 Core 1 final balance 10000.00 USD



Да, спасибо. Все работает.

 
Aleksey Vyazmikin:

Быстрей будет работать со своим файлом истории в режиме оптимизатора "Математические вычисления".

Ну это если чисто в самой НС и результат смотреть.

Я сейчас торговлю тестирую, чтобы и издержки и спреды были учтены. Поэтому интересует именно готовый робот, который можно и в тестере посмотреть и к реальной торговле подключить.

 
elibrarius:

Ну это если чисто в самой НС и результат смотреть.

Я сейчас торговлю тестирую, чтобы и издержки и спреды были учтены. Поэтому интересует именно готовый робот, который можно и в тестере посмотреть и к реальной торговле подключить.

Всё равно не понимаю - у Вас предикторам требуется большая глубина расчета? У меня вот действительно требуется одному - МАшке на дневках :) Я запуская просто тестирование на год раньше, а торговлю до этой даты можно запретить...

 
Aleksey Vyazmikin:

Всё равно не понимаю - у Вас предикторам требуется большая глубина расчета? У меня вот действительно требуется одному - МАшке на дневках :) Я запуская просто тестирование на год раньше, а торговлю до этой даты можно запретить...

Да - глубина истории нужна больше чем за год. Решение уже нашлось. Теперь тоже буду на 3 года раньше делать запуск и пропускать их.
 
В КБ не проходит код. Выдает такие ошибки
MQL5\Include\fxsaber\BestInterval\Deal.mqh(10,32) : error 239: '::' - syntax error
MQL5\Include\fxsaber\BestInterval\Deal.mqh(10,34) : error 279: 'ToNull' - call non-const method for constant object
MQL5\Include\fxsaber\BestInterval\Deal.mqh(10,34) : error 279: 'ToNull' - call non-const method for constant object
MQL5\Include\fxsaber\BestInterval\BestInterval.mqh(202,32) : error 239: '::' - syntax error
MQL5\Include\fxsaber\BestInterval\BestInterval.mqh(202,34) : error 351: 'ToNull' - access to non-static member or function
MQL5\Include\fxsaber\BestInterval\BestInterval.mqh(214,32) : error 239: '::' - syntax error
MQL5\Include\fxsaber\BestInterval\BestInterval.mqh(214,34) : error 351: 'ToNull' - access to non-static member or function
MQL5\Include\fxsaber\BestInterval\BestInterval.mqh(225,32) : error 239: '::' - syntax error
MQL5\Include\fxsaber\BestInterval\BestInterval.mqh(225,34) : error 351: 'ToNull' - access to non-static member or function
MQL5\Include\fxsaber\BestInterval\BestInterval.mqh(416,33) : error 239: '::' - syntax error
MQL5\Include\fxsaber\BestInterval\BestInterval.mqh(416,35) : error 351: 'ToNull' - access to non-static member or function
MQL5\Include\fxsaber\BestInterval\BestInterval.mqh(435,33) : error 239: '::' - syntax error
MQL5\Include\fxsaber\BestInterval\BestInterval.mqh(435,35) : error 351: 'ToNull' - access to non-static member or function

Прошу обновить КБ-компилятор.

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

А вот этот момент ещё не проверял, спасибо за наводку. Покопаю в эту сторону.
Библиотека за океанская, классы с которыми работаю, выбраны с буквой W, т.е. Unicode.

Как я понимаю кодировку.

const char *Utf8;
const char *Ansi;
const wchar_t *Utf16;
const wchar_t *Utf32;

utf-16 подразумевает тип wchar_t, библиотечная функция читающая строку, возвращает const wchar_t*
Из этого становиться ясно, что функция возвращает указатель на строку в кодировке utf-16
В свойствах проекта так же выбрана поддержка символов Юникода.
В документации mql пишется, что string работает в формате Unicode.

 

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

void OnStart()
{  datetime m_stoptime = 0;
//1.
   if(m_stoptime < TimeCurrent())
   {
      //расчеты   
   }


//2.
   MqlTick last_tick;
   if(SymbolInfoTick(_Symbol, last_tick))
   {  if(m_stoptime < last_tick.time) 
      {
         //расчеты
      }
   }

}

подозреваю, что вариант №2 будет быстрее работать?

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


ЗЫ: могу вопрос поставить как проверить варианты №1 и №2 по скорости, высока вероятность, что компилятор оптимизирует исполняемый код и тесты будут не корректными - поэтому и спрашиваю