EmulationTrader.Suspend() - оно работает?
Atom
06.09.2011


Мне необходимо написать тестирование так, чтобы исторические данные выдавались либо с определенной задержкой между тиками, либо при срабатывании сигнала на покупку/продажу тестирование приостанавливалось и потом возобнавлялось бы при нажатии кнопки. Фактически хочется сделать некий "мультик", чтобы показать как и где сработала стратегия и визуально оценить этот момент.

Попытался вызвать метод EmulationTrader.Suspend() Срабатывает событие EmulationTrader.StateChanged, но при этом тики продолжают тикать. Т.е. фактически остановки эмуляции не происходит. Останавливается только после достижения конца виртуального дня.

Подскажите, как все таки остановить эмуляцию и потом ее продолжить с места остановки?

PS: Эксперименты проводил на том примере, который дан в дистрибутиве - SampleHistoryTesting



Спасибо:


Mikhail Sukhov

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


Hamper Перейти

Подскажите, как все таки остановить эмуляцию и потом ее продолжить с места остановки?


По идее через http://stocksharp.com/do...sting_StrategyDebug.htm Но вы правильно сказали, что эмуляция не сразу останавливается. Нужно пофиксить. Так что пока только из кода стратегии. Тестирование идет в одном потоке, так что проблем остановить его в нужном событие думаю не составит.
Спасибо:

Hamper

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


Mikhail Sukhov Перейти

По идее через http://stocksharp.com/do...sting_StrategyDebug.htm Но вы правильно сказали, что эмуляция не сразу останавливается. Нужно пофиксить. Так что пока только из кода стратегии. Тестирование идет в одном потоке, так что проблем остановить его в нужном событие думаю не составит.


Нет, Михаил, не летит этот самолет [confused]

В класс SmaStrategy добавил переменную:
Код
public StrategyDebug debug;


Создаю стратегию:
Код
// создаем торговую стратегию, скользящие средние на 80 5-минуток и 10 5-минуток
strategy = new SmaStrategy(candleManager, new SimpleMovingAverage(80), new SimpleMovingAverage(10), timeFrame){
	Volume    = 1,
	Portfolio = portfolio,
	Security  = security,
	Trader    = trader,
	debug     = StrategyDebug.Get(trader)
};
strategy.debug.BreakOnNewTrade = true;
strategy.debug.BreakOnTime = new DateTime(2011, 8, 30, 10, 0, 10);


Стратегия стартует, при первом же событии OnProcess срабатывает debug, trader докладывает о том, что у него состояние Suspended и... И работа продолжается как ни в чем не бывало - тики тикают, стратегия запускается и обрабатывается, в логах сделки и прочее...

Кстати статус trader изменяется один (!) раз. Добавлял явный debug.Break() в событие стратегии OnProcess - картинка не меняется. Происходит suspend, тики протикивают до конца виртуального дня и только после этого останавливаются.
Спасибо:

Mikhail Sukhov

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


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

По идее через http://stocksharp.com/do...sting_StrategyDebug.htm Но вы правильно сказали, что эмуляция не сразу останавливается. Нужно пофиксить. Так что пока только из кода стратегии. Тестирование идет в одном потоке, так что проблем остановить его в нужном событие думаю не составит.


Нет, Михаил, не летит этот самолет [confused]


Вообще-то я имел ввиду что-то типа MessageBox из обработчика событий NewOrder NewTrader and so on.
Спасибо:

Hamper

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


Mikhail Sukhov Перейти
Вообще-то я имел ввиду что-то типа MessageBox из обработчика событий NewOrder NewTrader and so on.


Именно так.

Код
trader.StateChanged += () => {
	this.GuiAsync(() => {
	LOG.Text += "State: ";
	switch (trader.State){
		case EmulationStates.Started  : LOG.Text += "started \n"; break;
		case EmulationStates.Stopped  : LOG.Text += "stopped \n"; break;
		case EmulationStates.Stopping : LOG.Text += "stopping\n"; break;
		case EmulationStates.Suspended: LOG.Text += "suspend \n"; break;
		default:                        LOG.Text += "unknown \n"; break;
	}
	});

	if (trader.State == EmulationStates.Started){
		// запускаем стратегию когда эмулятор запустился
		strategy.Start();
	}
};

trader.SecuritiesChanged += sc => {
	this.GuiAsync(() => {
	LOG.Text += "MT:"+trader.MarketTime.ToLongTimeString()+" ";
	LOG.Text += "Price:"+security.LastTrade.Price+"\n";
	});
};


LOG - это TextBox. Получаем в нем вот что:

State: started
State: suspend
MT:10:29:59 Price:82,00000
MT:10:30:01 Price:82,19000
MT:10:30:03 Price:82,15000
MT:10:30:03 Price:82,15000
MT:10:30:03 Price:82,19000
MT:10:30:07 Price:82,12000
... И т.д. до конца виртуального дня. Если потом сделать strategy.debug.Resume(), то получаем то же самое для следующего виртуального дня.
Спасибо:

Mikhail Sukhov

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


Hamper Перейти
Mikhail Sukhov Перейти
Вообще-то я имел ввиду что-то типа MessageBox из обработчика событий NewOrder NewTrader and so on.


Именно так.


Вы меня читаете, но не понимаете.[laugh]
Спасибо:

Hamper

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


Mikhail Sukhov Перейти
Hamper Перейти
Mikhail Sukhov Перейти
Вообще-то я имел ввиду что-то типа MessageBox из обработчика событий NewOrder NewTrader and so on.


Именно так.


Все меня читаете, но не понимаете.[laugh]


Хммм... Как-то наверное да. Что именно надо сделать? NewTraders дает точно такую же картинку. NewOrders выдает кучу новых ордеров. Я же выше писал, что после того как был сделан trader.Suspend() и после strategy.debug.Break() стратегия и тики все равно работают до конца виртуального дня.

Может быть я не верно использовал StrategyDebug ???? Но из документации понять, как он работает можно только интуитивно.
Спасибо:

Mikhail Sukhov

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


Hamper Перейти
Может быть я не верно использовал StrategyDebug ????


Я же написал, что пока не останавливает StrategyDebug мгновенно. И предложил решение с MessageBox
Спасибо:

Hamper

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


Mikhail Sukhov Перейти
Hamper Перейти
Может быть я не верно использовал StrategyDebug ????


Я же написал, что пока не останавливает StrategyDebug мгновенно. И предложил решение с MessageBox


Аааа... Семен Семенычь! (с) [biggrin]
Теперь я протупился. Т.е. в событиях просто использовать искусственный тормоз...
Спасибо:


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

loading
clippy