EmulationTrader - как пройтись по всем сделкам?
Atom Ответить
23.08.2012


Здравствуйте.

Ситуация такая.

1. Скачал Гидрой тиковые сделки по фьючу RTS
2. Взял за основу SampleHistoryTesting
3. Заменил стратегию на собственную
4. Не работает :)

Если запустить SampleHistoryTesting - то все тестируется, данные по сделкам читаются, свечки приходят. То есть для SmaStrategy вызывается событие ProcessCandle, которое задано как

Код

		protected override void OnStarting()
		{
			_series
				.WhenCandlesFinished()
				.Do(ProcessCandle)
				.Apply(this);

			// запоминаем текущее положение относительно друг друга
			_isShortLessThenLong = ShortSma.LastValue < LongSma.LastValue;

			base.OnStarting();
		}


Моя же стратегия основана не на свечках, мне нужно обработать каждую сделку. Делаю так:

Код

        protected override void OnStarting()
        {
            base.Security.Exchange.IsSupportAtomicReRegister = false;

            this.SuspendRules(() =>
            {
                base.Security.WhenNewTrades().Do(NewTrade).Apply(this);
            });

            base.OnStarting();
        }


И метод NewTrade никогда не вызывается. Дополнительно пробовал:

1. Менял MarketTimeChangedInterval = TimeSpan.FromMilliseconds(1) при создании эмулятора:
Код

                m_Trader = new EmulationTrader(new[] { Sec }, new[] { Por }, Str)
                {
                    MarketTimeChangedInterval = TimeSpan.FromMilliseconds(1),
                    WorkingTime = Exchange.Rts.WorkingTime,
                    UseMarketDepth = false,
                };


2. Пробовал правило base.Security.WhenChanged().Do(NewTrade).Apply(this);

Вопрос - как заставить эмулятор прогнать через стратегию все исторические сделки, а не свечки? Спасибо.



Спасибо:




3 Ответов
ra81

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


Вообще сделки приходят нормально. Сам тестил на 4.1.2 версии стратегию со стоплосями и они бы не работали без сделок. В вашем коде вроде ничего не вижу кривого. Но где-то косяк есть это точно.

Возможно он вот тут
Код
base.Security.WhenNewTrades().Do(NewTrade).Apply(this);


Как вариант предлагается переписать в
Код
this.Security.WhenNewTrades().Do(NewTrade).Apply(this);
Спасибо:

esper

Фотография
Программист
Дата: 24.08.2012
Ответить


Возможно, еще не хватает Trader.RegisterTrades.
Спасибо: Oppositus

Oppositus

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


esper Перейти
Возможно, еще не хватает Trader.RegisterTrades.


Да! С Trader.RegisterTrades все заработало.
Автор топика
Спасибо:


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

loading
clippy