Новая версия платформы MetaTrader 5 build 3550: улучшения и исправления - страница 24

 
fxsaber #:

Нужной шаблонной сигнатуры не находит (доказательство) - надо искать среди остальных. Этого не происходит. Другие языки с таким же поведением?

Не понял логики с примером, приведенном по линку. Там нет альтернативных функций, так что негде искать остальные. А исходный ваш пример - работает.

 
Stanislav Korotky #:

Не понял логики с примером, приведенном по линку. Там нет альтернативных функций, так что негде искать остальные. А исходный ваш пример - работает.

Вопрос решен, поэтому объяснение логики неактуально. Ниже ошибка правильная?

struct RATES : public MqlRates {};

void Value( MqlRates &Rates ) {}
void Array( MqlRates &Rates[] ) {}

void OnStart()
{
  RATES Val;
  RATES Arr[];
  
  Value(Val); // OK
  Array(Arr); // 'Arr' - parameter conversion not allowed
}

По ссылке одиночная структура передается отлично. Массив - нет.

 
fxsaber #:

После запуска советника в Тестере (M1 OHLC) и Терминале (M1)

Получил два файла для сравнения.

Tester vs Terminal.

Видно, что Тестер насильно подгоняет бар под тиковый объем. Скорректируйте тиковые объемы и попробуйте снова этим советником.

Записал объемы в спред, а тиковые объемы сделал = 4. Теперь файлы полностью совпадают, если делать NormalizeDouble.
Если сделать без NormalizeDouble, то будет так

Т.е. влиятие тиков тут исключено. Только разное поведение тестера и терминала.

 
elibrarius #:

Записал объемы в спред, а тиковые объемы сделал = 4. Теперь файлы полностью совпадают, если делать NormalizeDouble.
Если сделать без NormalizeDouble, то будет так

Т.е. влиятие тиков тут исключено. Только разное поведение тестера и терминала.

Но если сделать экспорт символа и импорт, то  уже будут совпадать. Т.е. вы на импортированном символе видели только проблемы из за тиков.

Сравнивал файлы полученные без NormalizeDouble оригинальные и после импорта экспорта (т.е. округленные через CSV), отличаются все со всеми.

 

В общем надо делать через NormalizeDouble , но если кто-то этого не сделает полчит такое же разное поведение в терминале и тестере.


Хорошо бы сделать поведение одинаковым.

 
elibrarius #:

Записал объемы в спред, а тиковые объемы сделал = 4. Теперь файлы полностью совпадают, если делать NormalizeDouble.
Если сделать без NormalizeDouble, то будет так

Т.е. влиятие тиков тут исключено. Только разное поведение тестера и терминала.

Насколько я понял, fxsaber имел в виду размер тика, когда написал "тиковый объем".

 
fxsaber #:

После запуска советника в Тестере (M1 OHLC) и Терминале (M1)

Получил два файла для сравнения.

Tester vs Terminal.

Видно, что Тестер насильно подгоняет бар под тиковый объем. Скорректируйте тиковые объемы и попробуйте снова этим советником.

Посмотрел еще раз ваш скриншот по тикам. Тики в количестве от 0 до 3 искажают цены., Если >=4. То все хорошо.

Итого имеем: В текущей ситуации тиковый объем должен быть от 4 и выше. Цены делать через NormalizeDouble.

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

 
Stanislav Korotky #:

Насколько я понял, fxsaber имел в виду размер тика, когда написал "тиковый объем".

MqlRates::tick_volume
 
fxsaber #:

Значит я ошибся. Просто на картинке были подсвечены изменения в ценах, округленных до 5 в последнем разряде - поэтому я подумал, что речь о размере тика.

 
Stanislav Korotky #:

Значит я ошибся. Просто на картинке были подсвечены изменения в ценах, округленных до 5 в последнем разряде - поэтому я подумал, что речь о размере тика.

Округлены они у меня в оригинале до 5 (Хотя там есть еще невыведенные знаки, которые и округляет тестер), потому сразу и увидел, когда появились 1 и 6 в последнем знаке.
Причина обращения: