RandomWalkTradeGenerator не хранятся сделки
Atom Ответить
10.12.2011


Версия 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.
Хотя в
Код
Trade tr = base.Security.LastTrade;
есть информация по сделке.
Приход новых сделок в стратегии обрабатываю вот так:
Код
protected override void OnStarting()
        {
            this
                .When(base.Security.SecurityNewTrades())
                .Do(CalcVolume);

            base.OnStarting();
        }


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



Спасибо:




6 Ответов
russ

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


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

Mikhail Sukhov

Фотография
Автор статей Программист Трейдер
Дата: 11.12.2011
Ответить


russ Перейти

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


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

profts

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


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

по событию

Цитата:

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

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

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


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

Alexander

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


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

profts

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


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

Цитата:

_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:

Цитата:

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

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


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


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

loading
clippy