Посмотрел код, в целом... Идея, вроде, здравая.
Интересно, кто-нибудь ставил эксп. на демо? IMHO, результаты с тестера должны плохо соответствовать реальным. Причина - некоторые "особенности" тестера (я давно на это натыкался).
В функции double CalculatePips(string Sym)
есть строчка:
m_pips = (iClose(Sym, 0, 0)-iOpen(Sym, 0, ShiftBack))/_Point;
из нее следует, что цена Close берется с 0-го бара. Т.е. тестировать надо на модели "все тики".
Теперь о тестере: если тики на тестируемой паре моделируются, то на остальных - нет. Это, в общем, понятно, если смотреть с точки зрения разработчиков с MQL. Но это было бы еще полбеды. Беда в том, что при запросе iClose(Sym, 0, 0) с других пар выдается цена ЗАКРЫТИЯ этого бара из исторических данных. Т.е. тестер по остальным парам нагло "заглядывает в будущее". Не такое уж дальнее, в перделах 1-го бара... Но заглядывает!
На месте разработчиков следовало бы сделать так, чтобы в подобных ситуациях, если уж нельзя моделировать тики, выдавалась бы хотя бы цена открытия бара. А так получилась просто "засада" для мультивалютных систем в тестере...