Тестирование на истории 4.0.21 вход по рынку всегда по худшей цене.


Тестирование на истории 4.0.21 вход по рынку всегда по худшей цене.
Atom
10.03.2012


Перешел на 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п.

Меняю в тестовых примерах вход с помощью котирования

на вход по рынку с проскальзыванием

Картинка примерно не изменилась.

Ок, ставлю проскальзывание в 10 000п.

Т.е. вход по рынку происходит не по лучшей возможной цене, а по худшей и с максимальным проскальзыванием.



Спасибо:


1 2 3  >
pyhta4og

Фотография
Дата: 10.03.2012
Ответить


Вопросы:
1. Проскальзывание ставите MarketEmulator.Settings.Slippage=100?
2. Используете в стратегии только маркет-ордера?
3. Тестируете со генерируемыми стаканами ?
4. Тестируете с настоящими стаканами ?

Спасибо:

Moadip

Фотография
Дата: 10.03.2012
Ответить


pyhta4og Перейти
Вопросы:
1. Проскальзывание ставите MarketEmulator.Settings.Slippage=100?
2. Используете в стратегии только маркет-ордера?
3. Тестируете со генерируемыми стаканами ?
4. Тестируете с настоящими стаканами ?



1. Нет, проскальзывание ставиться внутри стратегии.
Про класс MarketEmulator вообще не знал. В примерах по тестированию использование данного класса не нашел.
Можно небольшой пример как его применять?
2. Да, только маркет ордера.
3.4. Тест на генерируемых стаканах.
Спасибо:

pyhta4og

Фотография
Дата: 10.03.2012
Ответить


Moadip Перейти
pyhta4og Перейти
Вопросы:
1. Проскальзывание ставите MarketEmulator.Settings.Slippage=100?
2. Используете в стратегии только маркет-ордера?
3. Тестируете со генерируемыми стаканами ?
4. Тестируете с настоящими стаканами ?



1. Нет, проскальзывание ставиться внутри стратегии.

это как? В моем понятии проскальзывание это то что происходит на бирже а не выставляется внутри стратегии. Например MarketEmulator.Settings.Slippage - это то, насколько по более худшей цене по сравнению с последняя сделка произойдет исполнение маркет-ордера

Про класс MarketEmulator вообще не знал. В примерах по тестированию использование данного класса не нашел.
Можно небольшой пример как его применять?

см. EmulationTrader.MarketEmulator и документацию

2. Да, только маркет ордера.

с 4.0.20->4.0.21 ничего с матчингом маркетордеров не менялось, для того чтобы выяснить есть ли ошибка в тестере надо по логам по ордерно разбитраться.

3.4. Тест на генерируемых стаканах.
Спасибо:

Moadip

Фотография
Дата: 10.03.2012
Ответить


Цитата:
это как? В моем понятии проскальзывание это то что происходит на бирже а не выставляется внутри стратегии.


Естественно что проскальзывание происходит на бирже.
Допустим есть лучший бид/оффер 900/910, я хочу продать по рынку. Посылаю лимитку на продажу по 800, т.е. устанавливаю для стратегии порог в 100п на проскальзывание. Моя заявка может исполнится как по 900, так и допустим по 850, т.е. по лучшему биду в текущий момент.
Если же на момент когда моя заявка будет на бирже лучший бид будет меньше 800, скажем 790, то я встану в стакан лимиткой на продажу по 800. Это я и называю учитывать/выставлять проскальзывание внутри стратегии.

Цитата:
Например MarketEmulator.Settings.Slippage - это то, насколько по более худшей цене по сравнению с последняя сделка произойдет исполнение маркет-ордера


Это то как работает алгоритм данного свойства?
Т.к. в моем понимании проскальзывание это не то, насколько по более худшей цене пройдет исполнение моей заявки по сравнению с последней.
А то, по какой цене исполнится моя заявка, относительно той цены, которую я увидел в стакане на момент отправления заявки.
Спасибо:

pyhta4og

Фотография
Дата: 10.03.2012
Ответить


Moadip Перейти
Цитата:
это как? В моем понятии проскальзывание это то что происходит на бирже а не выставляется внутри стратегии.


Естественно что проскальзывание происходит на бирже.
Допустим есть лучший бид/оффер 900/910, я хочу продать по рынку. Посылаю лимитку на продажу по 800, т.е. устанавливаю для стратегии порог в 100п на проскальзывание. Моя заявка может исполнится как по 900, так и допустим по 850, т.е. по лучшему биду в текущий момент.
Если же на момент когда моя заявка будет на бирже лучший бид будет меньше 800, скажем 790, то я встану в стакан лимиткой на продажу по 800. Это я и называю учитывать/выставлять проскальзывание внутри стратегии.

Понял вас. Но в таком случае вы пользуетесь лимитными заявками, а не маркетордерами. Поскольку ввсе-таки выставляете цену в 800.

В итоге, вы утверждаете что теперь кидаете селл-заявку ниже рынка на 100 пунктов и она всегда исполняется по этой самой худщей цене, даже если есть бид гораздо лучше?

Цитата:

Цитата:
Например MarketEmulator.Settings.Slippage - это то, насколько по более худшей цене по сравнению с последняя сделка произойдет исполнение маркет-ордера


Это то как работает алгоритм данного свойства?
Т.к. в моем понимании проскальзывание это не то, насколько по более худшей цене пройдет исполнение моей заявки по сравнению с последней.
А то, по какой цене исполнится моя заявка, относительно той цены, которую я увидел в стакане на момент отправления заявки.


Смотрите, есть режим эмуляции без стакана вообще. Это когда нет генераторов и нет данных о стакане. В этом конкретном случае заявки помеченные как маркетные (НЕ лимитные!) исполняются по LastTrade плюс Slippage если заявка на покупку или LastTrade минус Slippage если на продажу.

Если есть какие-то стаканы, генерированные или записанные то и маркетные ордера и лимитированные филяться о встречные заявки и свойство Slippage фактически не используется

Спасибо: Moadip

Moadip

Фотография
Дата: 10.03.2012
Ответить


Цитата:
Но в таком случае вы пользуетесь лимитными заявками, а не маркетордерами.


Может я чего то не знаю, но насколько мне известно на фортс нет рыночных заявок.
Если надо войти по рынку, то выставляется лимитка с заведомо большей/меньшей ценой, чтобы купить/продать.
Касательно S# знаю только два способа как подать заявку.

Код

        void GoLong(decimal vol)
        {
            var order = new Order
            {
                Portfolio = Portfolio,
                Price = Security.BestAsk.Price + Security.MinStepSize * _instrSlippage, ////////////// проскальзывание
                Security = Security,
                Volume = vol,
                Direction = OrderDirections.Buy,
            };
            RegisterOrder(order);
        }


Код

        var order = StrategyHelper.CreateOrder(this, OrderDirections.Buy, Security.GetMarketPrice(OrderDirections.Buy), Volume);
        RegisterOrder(order);


Возможно Security.GetMarketPrice(OrderDirections.Buy) считается "рыночным" ордером?

Цитата:
В итоге, вы утверждаете что теперь кидаете селл-заявку ниже рынка на 100 пунктов и она всегда исполняется по этой самой худщей цене, даже если есть бид гораздо лучше?

Именно! Это и показано на скриншотах выше.

Цитата:
Смотрите, есть режим эмуляции без стакана вообще. Это когда нет генераторов и нет данных о стакане. В этом конкретном случае заявки помеченные как маркетные (НЕ лимитные!) исполняются по LastTrade плюс Slippage если заявка на покупку или LastTrade минус Slippage если на продажу.

Если есть какие-то стаканы, генерированные или записанные то и маркетные ордера и лимитированные филяться о встречные заявки и свойство Slippage фактически не используется

А вот за это спасибо. Такие нюансы в справке не написаны.

UPD:
Отвечаю сам на свой вопрос "рыночные" это BuyAtMarket и SellAtMarket.
Но с реализацией данных методов я не совсем согласен(посмотрел рефлектором)
Т.к. с помощь их не всегда можно войти по "рынку".
Спасибо:

Mikhail Sukhov

Фотография
Дата: 12.03.2012
Ответить


Moadip Перейти

UPD:
Отвечаю сам на свой вопрос "рыночные" это BuyAtMarket и SellAtMarket.
Но с реализацией данных методов я не совсем согласен(посмотрел рефлектором)
Т.к. с помощь их не всегда можно войти по "рынку".


На РТС нет маркетных заявок. Так что хоть как-то входить. Не по планкам же.
Спасибо:

JackSparrow

Фотография
Дата: 12.03.2012
Ответить


Mikhail Sukhov Перейти
Moadip Перейти

UPD:
Отвечаю сам на свой вопрос "рыночные" это BuyAtMarket и SellAtMarket.
Но с реализацией данных методов я не совсем согласен(посмотрел рефлектором)
Т.к. с помощь их не всегда можно войти по "рынку".


На РТС нет маркетных заявок. Так что хоть как-то входить. Не по планкам же.


Так вопрос утыкается в то что если есть цена более лучшая чем указанная то сделка закрывается по ней. Это, на фортсе, будет принцип входа по маркету. Тоже самое что по краю стакана ударить.
Спасибо:

Mikhail Sukhov

Фотография
Дата: 13.03.2012
Ответить


JackSparrow Перейти

Так вопрос утыкается в то что если есть цена более лучшая чем указанная то сделка закрывается по ней. Это, на фортсе, будет принцип входа по маркету. Тоже самое что по краю стакана ударить.


Сейчас речь о тестере? С тестером это не ко мне. Я ответил насчет того, почему XXXAtMarket так сделан.
Спасибо:

Alexander

Фотография
Дата: 13.03.2012
Ответить


Moadip Перейти
Цитата:
В итоге, вы утверждаете что теперь кидаете селл-заявку ниже рынка на 100 пунктов и она всегда исполняется по этой самой худщей цене, даже если есть бид гораздо лучше?

Именно! Это и показано на скриншотах выше.



Фикс залит на codeplex.
Возьмите свежие библиотеки из ветки dev и протестируйте.
Только учитывайте то, что архив с котировками (RIU9@RTS) был также обновлён.
Спасибо:
1 2 3  >

Добавить файлы через драг-н-дроп, , или вставить из буфера обмена.

loading
clippy