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

 
Неправильная работа ExpertRemove в режиме Оптимизации.
input int Range = 0; // 1 .. 10

bool FuncInit()
{
  ExpertRemove();
  
  return(true);
}

int Count = 0;

void OnTick()
{
  static const bool Init = FuncInit();
  
  Count++;
}

double OnTester()
{
  return(Count);
}


Запускаем Оптимизацию. По коду видно, что все проходы должны прерваться по ExpertRemove. Но этого не происходит:

Core 5  pass 8 tested with error "expert removed itself in global initialization function" in 0:00:00.312
Core 5  pass 9 returned result 331851.00 in 0:00:00.125
Core 4  pass 6 tested with error "expert removed itself in global initialization function" in 0:00:00.265
Core 4  pass 7 returned result 331851.00 in 0:00:00.140
Core 1  pass 0 tested with error "expert removed itself in global initialization function" in 0:00:00.312
Core 1  pass 1 returned result 331851.00 in 0:00:00.125
Core 3  pass 4 tested with error "expert removed itself in global initialization function" in 0:00:00.296
Core 3  pass 5 returned result 331851.00 in 0:00:00.156
Core 8  pass 2 tested with error "expert removed itself in global initialization function" in 0:00:00.265
Core 8  pass 3 returned result 331851.00 in 0:00:00.140
Tester  optimization finished, total passes 10
Statistics      optimization done in 0 minutes 01 seconds
Statistics      shortest pass 0:00:00.125, longest pass 0:00:00.156, average pass 0:00:00.137
Statistics      local 10 tasks (100%), remote 0 tasks (0%), cloud 0 tasks (0%)

Половина проходов проигнорировали ExpertRemove. Воспроизводится?


ЗЫ Это приводит к расхождениям одиночных проходов и оптимизационных.

 
fxsaber:
typedef void (*FUNC)();
void f1() {};

void f2()
{
   f1();
}

void f2( FUNC g) 
{
   g();
}

по сути это то же самое что одна функция с дефолтным параметром. обычно это так и решается, так что это не обход и не костыль а вполне нормальное решение.

 
TheXpert:

по сути это то же самое что одна функция с дефолтным параметром. обычно это так и решается, так что это не обход и не костыль а вполне нормальное решение.

Вариант перегрузки понятен. Но для каждой функции создавать такое - не гибко совсем. Неужели и в C++ нельзя сделать красиво?

 
fxsaber:

Вариант перегрузки понятен. Но для каждой функции создавать такое - не гибко совсем. Неужели и в C++ нельзя сделать красиво?

хз, с++ с константами гибче, но именно с указателями функций в качестве параметров по умолчанию я не работал

UPD g++ кушает ваш код на ура
 
TheXpert:

хз, с++ с константами гибче, но именно с указателями функций в качестве параметров по умолчанию я не работал

UPD g++ кушает ваш код на ура

Спасибо за инфу!

 
fxsaber:

Как добиться дефолтного значения для входного параметра функции?

Можно воcпользоваться python-style кодом

typedef void (*FUNC)();

void f0() {Print(__FUNCSIG__);};
void f1() {Print(__FUNCSIG__);};

void f2( FUNC g = NULL ) {
   if (g == NULL){g = f1;}
   
   g();
}


void OnStart()
{
   f2();
   f2(f0);
}
 
Sergey Dzyublik:

Можно воcпользоваться python-style кодом

Спасибо, не знал про NULL.

 

В отчете Тестера при подсчете мат. ожидания двух схлопнувшихся позиций по CloseBy идет деление на два, вместо одного. Отсюда получаются неверные значения в отчете.


Ну и такие казусы при CloseBy  в отчете


 

Привет

Я арендовал это [название продукта Market был удален модератором] для одного меня, и мне не удалось изменить настройки, номер позиции три 3 максимум

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

Филипп

 
foonet:

На форуме запрещено разворачивать дискуссию о продуктах Маркета.
Discussion about Market products is prohibited on the forum sorry.