ArgumentNullExeption при вызове GetTimeFrameCandles


ArgumentNullExeption при вызове GetTimeFrameCandles
Atom
4/13/2012


При попытке создать часовые свечки на строчке
Code
var candles = candleManager.GetTimeFrameCandles(security, TimeSpan.FromHours(1));

выдает ошибку "ArgumentNullExeption не обработано. Значение не может быть неопределенным, значение параметра Key"
security и candleManager не null, заданы. Параметра key я ни в одном из используемых классов не нашел. Подскажите, что может быть не так?



Thanks:


Moadip

Avatar
Date: 4/13/2012
Reply


Loiso Go to
При попытке создать часовые свечки

Вы их не создаете, а пытаетесь взять.

Из справки: Получить все свечки по инструменту и тайм-фрейму
Code
GetTimeFrameCandles(Security, TimeSpan)


Прежде чем их взять, нужно зарегестрировать нужную группировку свечек. Это в 4.0
Code
candleManager.RegisterTimeFrameCandles(security, TimeSpan.FromHours(1));


В 4.1
Code
series = new CandleSeries(typeof(TimeFrameCandle), security, TimeSpan.FromHours(1));
candleManager.Start(series);
Thanks: Loiso

Loiso

Avatar
Date: 4/18/2012
Reply


Получилось! Спасибо)
Хранилище свечек получилось, но оно пустое, видимо где-то что-то еще не так( Я пробовал создать свечки из сохраненной истории.
Code
    
class Program
    {
        static void Main()
        {
            
            // создаем тестовый инструмент, на котором будет производится тестирование
            var security = new Security
            {
                Id = "SBER@EQBR", 
                Code = "SBER",
                Name = "SBER-4.04",
                MinStepSize = 0.01m,
                MinStepPrice = 0.01m,
                Exchange = Exchange.Test,
            };

            // тестовый портфель
            var portfolio = new Portfolio
            {
                Name = "test account",
                //BeginAmount = 100000,
            };

            // хранилище, через которое будет производиться доступ к тиковой и котировочной базе
            var storage = new TradingStorage(new InMemoryStorage())
            {
                BasePath = "C:/"
            };

            var _trader = new EmulationTrader(
                new[] { security },
                new[] { portfolio })
            {
                MarketTimeChangedInterval = TimeSpan.FromHours(1),
                Storage = storage,
                WorkingTime = Exchange.Rts.WorkingTime,
                DaysInMemory = 6,
            };
            
            CandleManager candleManager = new CandleManager(_trader);
            var builder = new CandleBuilder(new TradeCandleBuilderSource(_trader) { IsSyncProcess = true });
            candleManager.Sources.Add(builder);

            candleManager.RegisterTimeFrameCandles(security, TimeSpan.FromHours(1));
            
            var candles = candleManager.GetTimeFrameCandles(security, TimeSpan.FromHours(1));
           
            foreach (var x in candles)
            {
                Console.WriteLine(x.ClosePrice);
            }

            Console.WriteLine("Ok");
            Console.ReadKey();
            
        }
    }
}
Thanks:

Chicot

Avatar
Date: 5/3/2012
Reply


Подскажите, пожалуйста, как можно получить коллекцию свечек из хранилища.

Версия 4.0.22.

Пробовал так

Code
TradingStorage storage = new TradingStorage(new InMemoryStorage());
storage.BasePath = @"e:\Hydra DB";

IMarketDataStorage<TimeFrameCandle> candleStorage = storage.GetCandleStorage<TimeFrameCandle,TimeSpan>(security, TimeSpan.FromMinutes(5));
IEnumerable<TimeFrameCandle> candles = candleStorage.Load(new DateTime(2012, 3, 1), new DateTime(2012, 3, 31));


А еще так.

Code
IMarketDataStorage<Trade> tradeStorage = storage.GetTradeStorage(security);
IEnumerable<Trade> deals = tradeStorage.Load(new DateTime(2012, 3, 1), new DateTime(2012, 3, 31));

var candleManager = new CandleManager();
candleManager.Sources.Add(new CandleBuilder(new RawConvertableCandleBuilderSource<Trade>(deals)) { IsSyncRegister = true });
candleManager.Register(typeof(TimeFrameCandle), security, TimeSpan.FromHours(1));
var candles = candleManager.GetTimeFrameCandles(security, TimeSpan.FromHours(1));


Так и так candles получается пустым.
Почитал форум, но решить вопрос не удалось.

Thanks:

Chicot

Avatar
Date: 5/7/2012
Reply


Проблема решилась после иной спецификации Security. Не хватало свойства Exchange.

Определил так, и свечки стали создаваться.

Code
var security = new Security {
                Id = "GAZP@EQNE",
                MinStepSize = 0.01m,
                Exchange = Exchange.Micex
            };
Thanks:


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

loading
clippy