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

Тестирование на истории 4.0.21 вход по рынку всегда по худшей цене.
Atom
10.03.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п.

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

	
	// если произошло пересечение
	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п.

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




Спасибо:


< 1 2 3  >
risty

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


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

Если есть какие-то стаканы, генерированные или записанные то и маркетные ордера и лимитированные филяться о встречные заявки и свойство Slippage фактически не используется Вопрос: "EmulationTrader.MarketEmulator.Settings.Slippage" ограничивает максимальное проскальзывание или устанавливает абсолютное значение проскальзывание при сделках по рынку?

И если это свойство ограничивает, то как ввести в тестирование на истории проскальзывание при сделках по рынку ?

Спасибо:

Moadip

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


EmulationTrader.MarketEmulator.Settings.Slippage это максимальное проскальзование. Т.е. если Slippage = 100, то проскальзование будет браться случайным образом от 0 до 100.

Цитата из справки

Максимальный уровень проскальзывания, который может происходить при исполнении заявки. По умолчанию проскальзование отсутствует При условии что не используются реальные или сгенерированные стаканы.

Если же используются стаканы, то проскальзывание можно сэмулировать с помощью периода обновления стакана, я так делаю.

_trader.DepthGenerators[security] = new TrendMarketDepthGenerator(security) { Interval = TimeSpan.FromMilliseconds(2000)};

Допустим появился сигнал на вход, входим в шорт по рынку, стакан последний раз генерировался по 1000, bid/offer 990/1010, но последний тик уже 1020, bid/offer 1010/1030 и мы должны войти по 1010, но т.к. стакан генерируется с каким то периодом, то мы войдем по худшей цене по 990.

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

Опять же, все зависит от стратегии, если вход может быть только скажем по закрытию 1 мин. свечки, то это не подойдет. А если вход возможен на каждом тике, то да. Ну если только обновление стакана поставить раз в 2 минуты.[smile]

Самое интересное что стакан не обновляется чаще чем 1 раз в секунду, установлено экспериментальным путем.

Спасибо:

risty

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


Moadip: Если же используются стаканы, то проскальзывание можно сэмулировать с помощью периода обновления стакана, я так делаю.

_trader.DepthGenerators[security] = new TrendMarketDepthGenerator(security) ;

> 
> Допустим появился сигнал на вход, входим в шорт по рынку, стакан последний раз генерировался по 1000, bid/offer 990/1010, но последний тик уже 1020, bid/offer 1010/1030 и мы должны войти по 1010, но т.к. стакан генерируется с каким то периодом, то мы войдем по худшей цене по 990.
> 
> Возможен и другой вариант, если последний тик 980, то получается мы войдем по лучшей цене.
> Т.е. может эмулируется как положительное так и отрицательное проскальзывание. Это то как я понимаю работу тестера, возможно и не правильно.
> 
> Опять же, все зависит от стратегии, если вход может быть только скажем по закрытию 1 мин. свечки, то это не подойдет. А если вход возможен на каждом тике, то да. Ну если только обновление стакана поставить раз в 2 минуты.[smile]
> 
> Самое интересное что стакан не обновляется чаще чем 1 раз в секунду, установлено экспериментальным путем.
Супер, спасибо огромное!!!!

Может уважаемые авторы библиотеки подскажут ещё какие-то "документированные/рекомендуемые" свойства EmulationTrader, которые позволяют играться с проскальзыванием при генерируемом стакане?

И ещё вопрос:
```csharp
var order = this.CreateOrder(OrderDirections.Sell, Security.GetMarketPrice(OrderDirections.Sell), Volume);

и

var order = this.SellAtMarket(Volume);

это синонимы ?

Спасибо:

Alexander

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


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

Спасибо:

InsiderHSE

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


Moadip: EmulationTrader.MarketEmulator.Settings.Slippage это максимальное проскальзование. Т.е. если Slippage = 100, то проскальзование будет браться случайным образом от 0 до 100.

А какой закон распределения этого проскальзывания? равномерно в интервале от 0 до 100? или от -100 до 100? или неравномерно? Есть ли способ установить фиксированное проскальзывание на каждую сделку?

Спасибо:

InsiderHSE

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


Установил EmulationTrader.MarketEmulator.Settings.Slippage в 10 пипсов, стаканов нет и не генерирую. При этом сделки this.SellAtMarket(Volume) исполняются по LastPrice. Версия 0,22. Баг?

Спасибо:

Moadip

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


InsiderHSE: Установил EmulationTrader.MarketEmulator.Settings.Slippage в 10 пипсов, стаканов нет и не генерирую. При этом сделки this.SellAtMarket(Volume) исполняются по LastPrice. Версия 0,22. Баг?

Проблема которая была в 4.0.21 никуда не делась в 4.0.22, также как и в 4.0.23. Из за этого похоже и не работает slippage.

Спасибо:

Alexander

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


InsiderHSE: Установил EmulationTrader.MarketEmulator.Settings.Slippage в 10 пипсов, стаканов нет и не генерирую. При этом сделки this.SellAtMarket(Volume) исполняются по LastPrice. Версия 0,22. Баг?

Смотрите на 4.1

Спасибо:

InsiderHSE

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


Alexander Mukhanchikov:

InsiderHSE: Установил EmulationTrader.MarketEmulator.Settings.Slippage в 10 пипсов, стаканов нет и не генерирую. При этом сделки this.SellAtMarket(Volume) исполняются по LastPrice. Версия 0,22. Баг?

Смотрите на 4.1 Когда примерно можно ожидать хотя бы базовой справки по 4.1? Без хотя бы краткого объяснения, как изменилась логика формирования свечек, разобраться сложно...

Спасибо:

Alexander

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


InsiderHSE:

Alexander Mukhanchikov:

InsiderHSE: Установил EmulationTrader.MarketEmulator.Settings.Slippage в 10 пипсов, стаканов нет и не генерирую. При этом сделки this.SellAtMarket(Volume) исполняются по LastPrice. Версия 0,22. Баг?

Смотрите на 4.1 Когда примерно можно ожидать хотя бы базовой справки по 4.1? Без хотя бы краткого объяснения, как изменилась логика формирования свечек, разобраться сложно...

Попробуем в ближайшие пару недель. Есть ещё что хочется сделать для 4.1. Код первичнее документации

Спасибо:
< 1 2 3  >

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

loading
clippy