Пока делаю пример, решил прогнать на данных IQfeed (с трудом скормил нужный тип биржи, через копирование Nyse и изменения имени - про это соседняя тема):
- данные 1 мин
- тестирование тоже на 1 мин
http://gyazo.com/1f1ebcf3dcaa352cf10844053faf34fc
Проблема локализовалась:
Если запускать тест на большом объеме, то при исполнении заявки S# смотрит на текущий объем свечи, исполняет объем свечи по цене закрытия, а вот оставшийся (объем заявки - объем свечи) он исполняет по какой-то рандомной цене...
Понятно откуда взялась проблема, вроде как по какой цене исполнить очень большой объем - но метод решения путем исполнения вне рынка - неправильный. На мой взгляд нужно сделать какой-нибудь режим тестирования, при котором будет считаться мгновенное исполнение всего объема по цене закрытия текущей или открытия следующей свечи (если нет стаканов). MatchOnTouch = true проблему не решает, картинка остается той же.
Update: Уменьшил объем до мизерного - практически всё исполнение вне рынка пропало, кроме нескольких мест
Мне кажется, что
при тестировании на свечках, сделать исполнение по цене закрытия или открытия следующей - это самый правильный вариант. На сегодняшний день так себя ведут большинсто квантовых пакетов (quantstrat в R) например. Данный подход решил бы все проблемы. А проскальзывания надо либо на тиках + стаканы смотреть, либо просто закладывать дельту.