← Zurück

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

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

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);

В самой стратегии пробую считать объем сделок за период, но:

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

            base.OnStarting();
        }

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

War dieses Thema hilfreich?

Thema teilen

Kommentare (6)

Anmelden oder Konto erstellen, Melden Sie sich an oder registrieren Sie sich, um einen Kommentar zu hinterlassen

russ
russ Autor

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

Mikhail Sukhov
Mikhail Sukhov

russ: В самой стратегии пробую считать объем сделок за период, но:

Int32 count = base.Trader.Trades.Count();


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

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

по событию

this .When(Security.SecurityNewTrades()) .Do(raschet); сначала идет добавление последней сделки в мою коллекцию, а затем уже необходимый расчет на основе моей коллекции: private void raschet() { sdelki.Add(Security.LastTrade); ... /// Расчет ... }

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

Alexander
Alexander

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

profts
profts

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

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

из Strategy:

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

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

Alexander
Alexander

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