← Zurück

ArgumentNullExeption при вызове GetTimeFrameCandles

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

var candles = candleManager.GetTimeFrameCandles(security, TimeSpan.FromHours(1));

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

War dieses Thema hilfreich?

Thema teilen

Kommentare (4)

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

Moadip
Moadip

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
Loiso Autor

Получилось! Спасибо) Хранилище свечек получилось, но оно пустое, видимо где-то что-то еще не так( Я пробовал создать свечки из сохраненной истории.

    
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
Chicot

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

Версия 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
Chicot

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

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

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