Тестирование на истории 4.0.21 вход по рынку всегда по худшей цене.
Перешел на 4.0.21, запускаю тест на истории и наблюдаю
радикально отличающийся график эквити.
Перебрал несколько прошлых сборок: 4.0.17, 4.0.18, 4.0.19, 4.0.20 график примерно одинаковый.
и текущая
[blink]
Ну все думаю, накрылся мой грааль.[biggrin]
Запускаю тестовые примеры 4.0.20 и 4.0.21 графики примерно одинаковые(для ускорения тестирования период взят 1месяц)
[blink]
Ковыряние в своем коде результатов не дало.
Причина нашлась после изучения отчетов.
При сравнении аналогичных входов на 4.0.20 и 4.0.21 вход
всегда был примерно на 100п. хуже.
Почему 100п, у меня стояло проскальзывание в 100п.
Меняю в тестовых примерах вход с помощью котирования
Код
// если произошло пересечение
if (_isShortLessThenLong != isShortLessThenLong)
{
// если короткая меньше чем длинная, то продажа, иначе, покупка.
var direction = isShortLessThenLong ? OrderDirections.Sell : OrderDirections.Buy;
// создаем заявку
var order = this.CreateOrder(direction, Security.GetMarketPrice(direction), Volume);
// регистрируем заявку (обычным способом - лимитированной заявкой)
// RegisterOrder(order);
// регистрируем заявку (через котирование)
var strategy = new MarketQuotingStrategy(order, new Unit(), new Unit());
ChildStrategies.Add(strategy);
// запоминаем текущее положение относительно друг друга
_isShortLessThenLong = isShortLessThenLong;
}
на вход по рынку с проскальзыванием
Код
// если произошло пересечение
if (_isShortLessThenLong != isShortLessThenLong)
{
// если короткая меньше чем длинная, то продажа, иначе, покупка.
var direction = isShortLessThenLong ? OrderDirections.Sell : OrderDirections.Buy;
var slip = Security.MinStepSize * 20;//проскальзование 100п.
var price = isShortLessThenLong
? Security.GetMarketPrice(direction) - slip
: Security.GetMarketPrice(direction) + slip;
// создаем заявку
var order = this.CreateOrder(direction, price, Volume);
// регистрируем заявку (обычным способом - лимитированной заявкой)
RegisterOrder(order);
// регистрируем заявку (через котирование)
//var strategy = new MarketQuotingStrategy(order, new Unit(), new Unit());
//ChildStrategies.Add(strategy);
// запоминаем текущее положение относительно друг друга
_isShortLessThenLong = isShortLessThenLong;
}
Картинка примерно не изменилась.
Ок, ставлю проскальзывание в
10 000п.
Т.е. вход по рынку происходит не по лучшей возможной цене, а по худшей и с максимальным проскальзыванием.