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

 
Комбинатор:
Ничего, если получится это в плюсах скомпилить и запустить )

Не очень понимаю, что вас здесь не устраивает.  Всё работает.

template<typename T>
void f() { }

template<>
void f<int>() { }

int _tmain(int argc, _TCHAR* argv[])
{
  f<double>();
  f<int>();

  return 0;
}
 
Alexey Navoykov:

Не очень понимаю, что вас здесь не устраивает.  Всё работает.

Ок, это я туплю.
 

Да, это я уже обнаружил. Но проблема в том (была), что в исходнике этот мембер - на самом деле массив, и я для простоты сперва решил разобраться со скаляром. Однако для массива аналогичный прием не катит. Пришлось массив втаскивать статиком внурь функции-члена.

 
Stanislav Korotky:

Однако для массива аналогичный прием не катит. Пришлось массив втаскивать статиком внурь функции-члена.

Это уже ошибка компилятора - нужно сообщить в Сервисдеск

template<typename T>
struct A {
        static int i[];
};
template<typename T>
int A::i[]; //error: '[' - unexpected token
 

build 1650. Если несколько связанных .ex5 модулей (основной и библиотеки) то вообще ничего не работает. Везде ошибка вида:

2017.08.18 01:49:59.759 Draw (USDJPY,H1) Cannot find 'xxx' in 'yyy.ex5'

Раньше все работало нормально. Да и сейчас при компиляции MetaEditor 1646 + MetaTrader 1650 - все работает

Очевидно ошибка в MetaEditor 1650 при том что .ex5 файлы похудели почти в два раза. Зачем такие эксперименты???

 

Добавляю код

//Test.mqh
class A {};
class B { public:
        B() { f(); }
        A *g() { return NULL; }
void f()
{
        void *x = g();
        if ( true )
                return; 
        delete x; //в build 1650 не работает даже если до delete никогда (!) не доходит
                   //а ошибка при выполнении возникает именно из-за наличия этой строки
                   //и указатель в исходном коде действительный (есть проверка)
}
};

//Test.mq5
#include "Test.mqh"
#import "Test2.ex5"
        A *f();
#import
void OnStart()
{
        f();
}
//Test2.mq5
#property library
#include "Test.mqh"
static B b;
A *f() export { return NULL; }

Результат - в предыдущем сообщении

 
 Еще пример на проверку 
//Test.mq5
class A;
#import "Test2.ex5"
        A *f();
        void g( A* );
#import
void OnStart() //вариант 1
{
        f(); /*возвращаемое значение не используется*/
}
//Test2.mq5
#property library
class A {};
static A *a;
A *f()       export { /*делает что-то полезное*/; return a; }

void g( A* ) export { /*делает что-то полезное*/; }

Библиотека носит общий характер. Попутно возвращаемый f() указатель в данном конкретном случае в дальнейшем не используется - вариант 1 (но может и использоваться - см.далее вариант 2). При компиляции Test.mq5 нет сообщений об ошибках - значит компилятору определение класса (A) не требуется. Тем не менее при выполнении ошибка: Cannot find 'f' in 'Test2.ex5'

Далее

void OnStart() //вариант 2
{
        g( f()/*возвращаемое значение используется*/);
}
 
Подскажите в результатах тестирования можно выставить не максимальную просадку а относительную по средствам? А то получается максимальная часто 3-5% а относительная доходит до 50%. И чтобы посмотреть относительную просадку надо отдельно тест прогонять. Заранее спасибо
Тестирование стратегий - Алгоритмический трейдинг, торговые роботы - Справка по MetaTrader 5
Тестирование стратегий - Алгоритмический трейдинг, торговые роботы - Справка по MetaTrader 5
  • www.metatrader5.com
Тестер стратегий позволяет тестировать и оптимизировать торговые стратегии ( советники ) перед началом использования их в реальной торговле. При...
 
 
Vladimir Pastushak:

Язык Windows поменять надо для счастья...

Причина обращения: