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

Тестирование на истории 4.0.21 вход по рынку всегда по худшей цене.
Atom
3/10/2012
Moadip


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

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



Thanks:


1 2 3  >
pyhta4og

Avatar
Date: 3/10/2012
Reply


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

Thanks:

Moadip

Avatar
Date: 3/10/2012
Reply


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



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

pyhta4og

Avatar
Date: 3/10/2012
Reply


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. Тест на генерируемых стаканах.
Thanks:

Moadip

Avatar
Date: 3/10/2012
Reply


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


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

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


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

pyhta4og

Avatar
Date: 3/10/2012
Reply


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


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

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

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

Quote:

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


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


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

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

Thanks: Moadip

Moadip

Avatar
Date: 3/10/2012
Reply


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


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

Code

        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);
        }


Code

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


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

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

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

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

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

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

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

Mikhail Sukhov

Avatar
Date: 3/12/2012
Reply


Moadip

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


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

JackSparrow

Avatar
Date: 3/12/2012
Reply


Mikhail Sukhov
Moadip

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


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


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

Mikhail Sukhov

Avatar
Date: 3/13/2012
Reply


JackSparrow

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


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

Alexander

Avatar
Date: 3/13/2012
Reply


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

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



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

Attach files by dragging & dropping, , or pasting from the clipboard.

loading
clippy