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

 
Alexey Viktorov:

никакая это не особенность mql5, а просто некоторые попытки приучить к порядку.

приучение к порядку - это когда компилятор выдаст предупреждение (или ошибку). преобразование целых в дробные возвращает 0 - это нонсенс, а не порядок. так 90% старых кодов поломаются.

и, заметьте, рабочий вариант всё равно был с int! т.е. дело не в преобразовании типов на этапе подстановки в функцию, а на этапе вычисления

ДОБАВЛЕНО: перешёл на MQ-demo, обновил рабочий терминал. Нет в нём этой проблемы.

 
Ошибка при компиляции
class A {  
public:
        static int i;
} a; //Error: unresolved static variable 'A::i'
int A::i = 0;
 
Igor Zakharov:

приучение к порядку - это когда компилятор выдаст предупреждение (или ошибку). преобразование целых в дробные возвращает 0 - это нонсенс, а не порядок. так 90% старых кодов поломаются.

и, заметьте, рабочий вариант всё равно был с int! т.е. дело не в преобразовании типов на этапе подстановки в функцию, а на этапе вычисления

ДОБАВЛЕНО: перешёл на MQ-demo, обновил рабочий терминал. Нет в нём этой проблемы.

А отсутствие подсветки возможных вариантов в этом случае не вызывает подозрений?

   ObjectSetDouble (0,name,OBJPROP_ANGLE,dir// тут должен появиться список вариантов переменных double
 
Ошибка при выполнении
class A {  
public:
         A() { i = ++ii; printf( "%d", i ); }
        ~A() {           printf( "%d", i ); }
        int i;
        static int ii;
};
int A::ii = 0;
A a[ 2 ];
void OnStart() {}

  • Результат в MQL: 1212
  •               а в С++: 1221
 
Alexey Viktorov:

А отсутствие подсветки возможных вариантов в этом случае не вызывает подозрений?

:)

 
Igor Zakharov:

:)

Да... Странно, некоторое время взад не подсвечивались переменные несоответствующего типа. Может специально исправили или обратят внимание на этот диалог и исправят ещё раз. Но как бы там ни-было, если функция требует тип переменной double, то double и надо подставлять.

 
Всегда ошибка была
#define MACRO( X, Y )
MACRO( 1, 2, 3) //Warning: too many arguments for function-like macro 'MACRO'
почему предупреждение? Тем более, что они всегда в избыточном количестве и не обратишь внимание иной раз
 
Alexey Viktorov:

Да... Странно, некоторое время взад не подсвечивались переменные несоответствующего типа. Может специально исправили или обратят внимание на этот диалог и исправят ещё раз. Но как бы там ни-было, если функция требует тип переменной double, то double и надо подставлять.

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

https://www.mql5.com/ru/docs/basis/types/casting

int в double - это допустимое неявное преобразование без потери данных. законное.

Документация по MQL5: Основы языка / Типы данных / Приведение типов
Документация по MQL5: Основы языка / Типы данных / Приведение типов
  • www.mql5.com
Часто возникает необходимость преобразовать один числовой тип в другой. Не каждый числовой тип допустимо преобразовать в другой, допустимые преобразования в MQL5 показаны на схеме: Сплошные линии со стрелками обозначают преобразования, которые выполняются без потери информации. Вместо типа char может выступать тип bool (оба занимают в памяти 1...
 

вопрос по работе тестера стратегий

Запускаю тест. Советник открывает позицию с SL и TP. Затем происходит ролловер и позиция закрывается НЕ переоткрываясь. 

Это что такое? Баг? Какое то время не пользовался тестером и таких проблем не было теперь есть. Ниже лог из тестера. Видим что позиция открылась, а после ролловера закрылась и потом вроде как написано что открылась через BUY, но на самом деле на экране показывает что открытых сделок нет. Вставлял в тестер команду 

PositionSelect(_Symbol) для проверки наличия открытых позиций после ролловера, результат всегда один - открытых позиций нет.


2020.04.28 18:14:14.609 2014.01.09 05:00:00   instant buy 1.00 AUDUSD at 0.88800 sl: 0.88450 tp: 0.89200 (0.88750 / 0.88800 / 0.88750)

2020.04.28 18:14:14.609 2014.01.09 05:00:00   deal #8 buy 1.00 AUDUSD at 0.88800 done (based on order #8)

2020.04.28 18:14:14.610 2014.01.09 05:00:00   deal performed [#8 buy 1.00 AUDUSD at 0.88800]

2020.04.28 18:14:14.610 2014.01.09 05:00:00   order performed buy 1.00 at 0.88800 [#8 buy 1.00 AUDUSD at 0.88800]


2020.04.28 18:14:24.169 2014.01.09 23:59:59   deal #9 sell 1.00 AUDUSD at 0.88980 done (based on order #9)

2020.04.28 18:14:24.169 2014.01.09 23:59:59    rollover deal performed [#9 sell 1.00 AUDUSD at 0.88980]

2020.04.28 18:14:24.170 2014.01.09 23:59:59   deal #10 buy 0.00 AUDUSD at 0.8899950 done (based on order #10)

2020.04.28 18:14:24.170 2014.01.09 23:59:59    rollover deal performed [#10 buy 0.00 AUDUSD at 0.8899950]


 
Igor Zakharov:

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

https://www.mql5.com/ru/docs/basis/types/casting

int в double - это допустимое неявное преобразование без потери данных. законное.

Я ссылки на документацию даю для того, чтобы не переписывать документацию в сообщение и чтобы люди привыкали читать документацию. Представьте себе, что здесь на форуме встречались такие, что не знали о существовании документации вообще. Что касается меня лично, я такую картинку в документации видел, но не пытался её досконально понять. Мне достаточно привычки применять переменные того типа какой требует функция. В крайнем случае поставлю принудительное приведение к нужному типу.

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