Удаление неиспользуемых свечей из CandleSeries

Удаление неиспользуемых свечей из CandleSeries
Atom
31.05.2013
vk37


Попробовал начать использовать в своей стратегии CandleManager и CandleSeries. Время тестирования увеличилось в несколько раз. Памяти 32ГБ уже не хватает. Предполагаю, что память расходуется на хранение свечей (у меня таймфрейм 1 сек на данных за 9 месяцев). В CandleSeries мне нужны свечи только за последнюю минуту. Подскажите, есть ли способ удалять ненужные свечи из CandleSeries? Инициализирую так::::spoiler


                var trader = new MyEmulationTrader(
                    new[] {security},
                    new[] {portfolio},
                    _storageRegistry)
                    {
                        UseMarketDepth = true,
                        StorageRegistry = _storageRegistry,
                        AutoResetEvent = new AutoResetEvent(false),
                    };                
                trader.Connect();
                var quickCandleManager = new CandleManager(trader);
                quickCandleManager.Sources.Add(new MyTimeFrameCandleBuilder() { Sources = { new MarketDepthCandleBuilderSource(trader) } });
                var quickCangleSeries = new CandleSeries(typeof(MyCandle), security, paramCombination.QuickTimeFrame);
                quickCandleManager.Start(quickCangleSeries);

                var slowCandleManager = new CandleManager(trader);
                slowCandleManager.Sources.Add(new MyTimeFrameCandleBuilder() { Sources = { new MarketDepthCandleBuilderSource() } });
                var slowCangleSeries = new CandleSeries(typeof(MyCandle), security, paramCombination.SlowTimeFrame);
                slowCandleManager.Start(slowCangleSeries);

                trader.StartExport();



Спасибо:


Иван З.

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


В днях это так выглядит:

_candleManager.Container.CandlesKeepTime = TimeSpan.FromDays(2);

В минутах это наверное будет выглядеть так:

_candleManager.Container.CandlesKeepTime = TimeSpan.FromMinutes(1);

Попробуйте я не проверял.

Спасибо: vk37

vk37

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


Не помогло. Пока не знаю что делать. То ли разбираться в кодах стокшарпа, то ли свой CandleManager реализовывать.

Спасибо:

Иван З.

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


А что не получилось то? Я взял тики создал из них свечки по 1 секунде, установил

_candleManager.Container.CandlesKeepTime = TimeSpan.FromMinutes(1);

сохраняю свечи серрии в коллекцию

var W = candleSeries.GetCandles<Candle>().ToList();

каждый шаг смотрю, что с коллекцией, больше 60 свечей не показывает, и по времени они нормальные. Или вы что то другое рассчитывали получить?

Спасибо:

vk37

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


Иван З.: А что не получилось то? Я взял тики создал из них свечки по 1 секунде, установил

_candleManager.Container.CandlesKeepTime = TimeSpan.FromMinutes(1);

> сохраняю свечи серрии в коллекцию
> ```csharp
var W = candleSeries.GetCandles<Candle>().ToList();

каждый шаг смотрю, что с коллекцией, больше 60 свечей не показывает, и по времени они нормальные. Или вы что то другое рассчитывали получить?

Ограничение по количеству свечей работает. По прежнему большой расход памяти: 32ГБ потребляются полностью и, после того как 32ГБ исчерпаны, тестирование происходит очень медленно. Использую в тестировании BasketTrader. Включаю в него 10 экземпляров EmulationTrader. Тестирую период в 9 месяцев. Свечи строю двух таймфреймов: в несколько секунд и несколько минут.

Спасибо:

Moadip

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


Прежде чем изобретать велосипед, неплохо бы погонять под профилировщиком типа этого. Чтобы посмотреть куда память утекает. На форуме уже поднимался этот вопрос и не раз, что течет. Вроде фиксили, но возможно недофиксили.[laugh]

Спасибо:

Иван З.

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


Тесту приходится перебирать все тики, за 9 месяцев. Их сколько? И сколько обычный foreach их перебирать будет?

Спасибо:

vk37

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


Moadip: Прежде чем изобретать велосипед, неплохо бы погонять под профилировщиком типа этого. Чтобы посмотреть куда память утекает. На форуме уже поднимался этот вопрос и не раз, что течет. Вроде фиксили, но возможно недофиксили.[laugh]

Думал уже над этим. И профилировщик именно этот поставил. Я так понимаю, что чтобы что-то увидеть в профилировщике, нужны *.pdb файлы от стокшарп сборок. У меня их нет. Если только компилировать по открытым исходникам. Но они устаревшей версии. Пока не заморачивался с этим.

Спасибо:

vk37

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


Иван З.: Тесту приходится перебирать все тики, за 9 месяцев. Их сколько? И сколько обычный foreach их перебирать будет? Свечи строятся на основе MarketDepth. Может еще в этом проблема.

Спасибо:

vk37

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


Moadip: Прежде чем изобретать велосипед, неплохо бы погонять под профилировщиком типа этого. Чтобы посмотреть куда память утекает. На форуме уже поднимался этот вопрос и не раз, что течет. Вроде фиксили, но возможно недофиксили.[laugh] Память стала утекать, когда логику работы стратегии перестроил с использованием CandleManager и индикаторов (до этого без них обходился). Следующую модификацию стратегии стелал без CandleManager, но с индикаторами. И память все равно в моем случае утекала. Сейчас сделал свою упрощенную реализацию индикатора без реализации IIndicator. С памятью стало все нормально. В моем случае проблема с утечкой памяти была в использовании индикатора SimpleMovingAverage.

Спасибо:

Mikhail Sukhov

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


IIndicatorContainer

Спасибо:


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

loading
clippy