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

 
Не могу пройти проверку в кодебазе, пишет main file not found , но он есть. Просьба выяснить причину (если модераторы могут). Подумываю вернуться к публикациям в блогах - там таких заморочек нет.
 
Stanislav Korotky:
Не могу пройти проверку в кодебазе, пишет main file not found , но он есть. Просьба выяснить причину (если модераторы могут). Подумываю вернуться к публикациям в блогах - там таких заморочек нет.

mq5 разместите в папке "по-умолчанию".

 

Сразу два вопроса к работе компилятора МТ5(build 2321):

#define PRINT(x) ; Print(#x, ":", string(x))
#ifdef __cplusplus
    #include<iostream>
#endif


template<typename T>
class A{
};

template<typename T>
class B : public A<T>{
};


template<typename T>
void func(B<T> &it1){
   printf("C++:1");                      //MQL:2         
}

////ERRROR: 'func' - template functions overloading is not supported yet
//template<typename T>     
//void func(T &it1){ 
//  printf("C++:2");                               
//}
template<typename T>         
void func(T &it1, T* = NULL){
   printf("C++:2");                       //MQL:1        
}

template<typename T>
void func(A<T> &it1){
   printf("C++:3");                       //MQL:3
}


void OnStart(){
   B<int> b;
   func(b);
}

int main(){
   OnStart();
   return 0;
}

1. Не соответствие приоритетов выполнения шаблонных функций в MQL в сравнении с шаблонными функциями в С++ (online: https://onlinegdb.com/Hkvz8Hu7L).
Так в С++, когда все три шаблонных функции в наличии, выполняется шаблонная функция с результатом "C++:1", если ее удалить, тогда выполнятся будет "C++:2", а если ее удалить - "C++:3".
В MQL же совсем другие приоритеты: "C++:2", затем "C++:1" и "C++:3".


2. Не понятно почему в MQL первая из функций запрещена, тогда как идентичная ей, но с фиктивным параметром, уже разрешена:

//ERRROR: 'func' - template functions overloading is not supported yet
template<typename T>     
void func(T &it1){ 
  printf("C++:2");                               
}

// OK
template<typename T>         
void func(T &it1, T* = NULL){
   printf("C++:2");                              
}
 

Всем привет.

Скажите, кто нибудь сталкивался с проблемой тестирование мультивалютных роботов?

загружаются ли Все котировки всех валютных пар, которые требуются для советника? 

Пытаюсь тестировать две пары, например EURUSD GBPUSD:

Если проводить тесты на EURUSD (тестируется EURUSD GBPUSD)- то результат 1, 

Если проводить тесты на GBPUSD (тестируется EURUSD GBPUSD)- то результат 2 , т.е. разные 

Если проводить тесты на USDCHF (тестируется EURUSD GBPUSD)- то результат 3 , т.е. разные 



Результаты не сильно отличаются , мелочь в пару десятков сделок (за 2 месяца), но результаты на каждой паре разные (хотя тестируются определенные установленные пары EURUSD GBPUSD)

Сразу предположу: Весь код работает от переменной, Symb , которая берет Symbol() из цикла. Т.е. единый код , но внутри кода переменной Symb присваивается свое значение. 


Может ли быть такое? что из-за разных котировок, тиков, качества истории разных пар (при этом всегда тестируется EURUSD и GBPUSD ), результаты теста на разных парах - разный?  

Т.е. 

Может быть такое, что установили тест на EURUSD , тогда для GBPUSD загружается меньше котировок?

и

Может быть такое, что установили тест на GBPUSD , тогда для EURUSD загружается меньше котировок?

 
fxsaber:

mq5 разместите в папке "по-умолчанию".

Я прекрасно знаю, что главный модуль должен быть без папок - так оно и есть, папку по-умолчанию они сами "дорисовывают" выпадающими опциями справа от кнопок загрузки.

Не прокатывает.

 
В С++ компилируется и все работает (online: https://onlinegdb.com/Syn90dd7I), а в MQL ошибка: "'func' - ambiguous call to overloaded function"

#define PRINT(x) ; Print(#x, ":", string(x))
#ifdef __cplusplus
    #include<iostream>
#endif


template<typename T>
class A{
};

template<typename T>
class B : public A<T>{
};

template<typename T>
class C : public B<T>{
};


template<typename T>
void func(B<T> &it1){
   printf("C++:1");                      
}

template<typename T>
void func(A<T> &it1){
   printf("C++:2");                      
}


void OnStart(){
   C<int> c;
   func(c);            //ERROR: 'func' - ambiguous call to overloaded function
}

int main(){
   OnStart();
   return 0;
}
 
Stanislav Korotky:

Я прекрасно знаю, что главный модуль должен быть без папок - так оно и есть, папку по-умолчанию они сами "дорисовывают" выпадающими опциями справа от кнопок загрузки.

Не прокатывает.

У меня так.


 
Vladislav Andruschenko:

Всем привет.

Скажите, кто нибудь сталкивался с проблемой тестирование мультивалютных роботов?

Используете таймер? Проверьте идентичность событий таймера от прохода к проходу.

 
Vladislav Andruschenko:

Скажите, кто нибудь сталкивался с проблемой тестирование мультивалютных роботов?

загружаются ли Все котировки всех валютных пар, которые требуются для советника? 

Да, котировки идентичные. Все дело в точке входа (событии, по которому работаете).

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

 
Andrey Khatimlianskii:

Да, котировки идентичные. Все дело в точке входа (событии, по которому работаете).

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

Контроль баров, все отключал. 
Не помню, что бы такая ошибка была ранее. 
То ли я где то , что то ошибся, то ли изменились условия в тестере. 

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

Ну там например: тестируем gbpusd, значит по ней загружает все, а по остальным парам фильтрует тики для загрузки, чтобы меньше памяти использовать. 

Спасибо будем искать. 
Ну конечно же.........