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

EmulationTrader - как пройтись по всем сделкам?
Atom
8/23/2012
Oppositus


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

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

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

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

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




Thanks:


ra81

Avatar
Date: 8/24/2012
Reply


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

Возможно он вот тут

base.Security.WhenNewTrades().Do(NewTrade).Apply(this);

Как вариант предлагается переписать в

this.Security.WhenNewTrades().Do(NewTrade).Apply(this);
Thanks:

esper

Avatar
Date: 8/24/2012
Reply


Возможно, еще не хватает Trader.RegisterTrades.

Thanks: Oppositus

Oppositus

Avatar
Date: 8/24/2012
Reply


esper: Возможно, еще не хватает Trader.RegisterTrades.

Да! С Trader.RegisterTrades все заработало.

Thanks:


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

loading
clippy