RandomWalkTradeGenerator не хранятся сделки


RandomWalkTradeGenerator не хранятся сделки
Atom
12/10/2011


Версия 4.0.8
Генерирую данные и стакан.

Code
var security = new Security
                    {
                        Id = "RIU9@RTS",
                        Code = "RIU9",
                        Name = "RTS-9.09",
                        MinStepSize = 5,
                        MinStepPrice = 2,
                        Decimals = 0,
                        Exchange = Exchange.Test,
                    };

                    _trader = new EmulationTrader(
                            new[] { security },
                            new[] { portfolio })
                        {
                            MarketTimeChangedInterval = timeFrame
                        };

                        _trader.TradeGenerators[security] = new RandomWalkTradeGenerator(security, 155000);
                        _trader.DepthGenerators[security] = new TrendMarketDepthGenerator(security);


В самой стратегии пробую считать объем сделок за период, но:
Code
Int32 count = base.Trader.Trades.Count();
всегда = 0.
Хотя в
Code
Trade tr = base.Security.LastTrade;
есть информация по сделке.
Приход новых сделок в стратегии обрабатываю вот так:
Code
protected override void OnStarting()
        {
            this
                .When(base.Security.SecurityNewTrades())
                .Do(CalcVolume);

            base.OnStarting();
        }


В чем может быть проблема?



Thanks:


russ

Avatar
Date: 12/11/2011
Reply


Народ, так должны хранится сделки или нет? В примерах аналогичная ситуация.
Thanks:

Mikhail Sukhov

Avatar
Date: 12/11/2011
Reply


russ Go to

В самой стратегии пробую считать объем сделок за период, но:
Code
Int32 count = base.Trader.Trades.Count();
всегда = 0.


Да, в эмуляции сделки не попадают в Trader.Trades.
Thanks:

profts

Avatar
Date: 1/10/2012
Reply


Для тестирования также нужны сделки.
Пытался обойти данную проблему созданием собственной ThreadSafeObservableCollection<Trade> sdelki, столкнулся со следующим:

по событию

Quote:

this
.When(Security.SecurityNewTrades())
.Do(raschet);

сначала идет добавление последней сделки в мою коллекцию, а затем уже необходимый расчет на основе моей коллекции:
Quote:

private void raschet()
{
sdelki.Add(Security.LastTrade);
...
/// Расчет
...
}


Если перед запуском делаю остановку на строке добавления сделки в коллекцию и далее прогоняю с пом F11, то сделки сохраняются в коллекцию и расчет идет. Без остановки в коллекцию добавляется только одна сделка, хотя тики продолжают генерироваться и событие срабатывает и через некоторое время вылетает Win32Exception. Так понимаю что-то с потоками...
Thanks:

Alexander

Avatar
Date: 1/10/2012
Reply


Без стэк трэйса невозможно сказать.
Но похоже что да, проблема с потоками у вас возникает в алгоритме.
Thanks:

profts

Avatar
Date: 1/10/2012
Reply


Создание шлюза:

Quote:

_trader = new EmulationTrader(
new[] { security },
new[] { portfolio })
{
MarketTimeChangedInterval = timeFrame,
Storage = storage,
WorkingTime = Exchange.Rts.WorkingTime,
DaysInMemory = 1,
};
_trader.DepthGenerators[security] = new TrendMarketDepthGenerator(security)
{
Interval = TimeSpan.FromSeconds(1),
};


из Strategy:

Quote:

protected override void OnStarting()
{
sdelki = new ThreadSafeObservableCollection<Trade>();

this
.When(Security.SecurityNewTrades())
.Do(raschet);
base.OnStarting();
}
private void raschet()
{
sdelki.Add(Security.LastTrade);

MainWindow.Instance.GuiAsync(() => sum_vol_riz010 = sdelki.Where(p => p.Time > Security.LastTrade.Time.AddSeconds(-10) &&
p.Security == Security).Sum(tr => tr.Volume));
}


Пытаюсь сделать, чтобы заработал данный элементарный расчет.
Thanks:

Alexander

Avatar
Date: 1/10/2012
Reply


так у вас памяти не хватает, ведь написано.
очищайте этот список, не держите в нём абсолютно все сделки.
Thanks:


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

loading
clippy