ArgumentNullExeption при вызове GetTimeFrameCandles
Atom Ответить
13.04.2012


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

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



Спасибо:




4 Ответов
Moadip

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


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

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

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


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


В 4.1
Код
series = new CandleSeries(typeof(TimeFrameCandle), security, TimeSpan.FromHours(1));
candleManager.Start(series);
Спасибо: Loiso

Loiso

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


Получилось! Спасибо)
Хранилище свечек получилось, но оно пустое, видимо где-то что-то еще не так( Я пробовал создать свечки из сохраненной истории.
Код
    
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();
            
        }
    }
}
Автор топика
Спасибо:

Chicot

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


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

Версия 4.0.22.

Пробовал так

Код
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));


А еще так.

Код
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 получается пустым.
Почитал форум, но решить вопрос не удалось.

Спасибо:

Chicot

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


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

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

Код
var security = new Security {
                Id = "GAZP@EQNE",
                MinStepSize = 0.01m,
                Exchange = Exchange.Micex
            };
Спасибо:


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

loading
clippy