← 戻る

Ошибка при тестировании

При тестировании периодически возникает::::spoiler

System.NullReferenceException: Object reference not set to an instance of an object.
   at #=qkoSo$d923scmg_sYtLvcgC1T0ft2pstJcPersksBoZKwr0BQW4jZhfAQW1xMmBut.#=qg67115AckIhO5d2zxyCZAQ==(Boolean #=qLADmQb8cJ4Y_nd7XlXaXQw==)
   at #=qkoSo$d923scmg_sYtLvcgC1T0ft2pstJcPersksBoZKwr0BQW4jZhfAQW1xMmBut.#=qm3V9Kfo72M8TE2px_zLo9xQM1RL6SFBGqLB3If2f6Fw=.#=qPPbjei2wiECkz_QeThbm2A5qP5NSKd6ArG8wtLmBsyA=()
   at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
   at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
   at System.Threading.TimerQueueTimer.CallCallback()
   at System.Threading.TimerQueueTimer.Fire()
   at System.Threading.TimerQueue.FireNextTimers()

このトピックは参考になりましたか?

トピックを共有

コメント (8)

ログイン または アカウントを作成, コメントを残すにはログインまたは新規登録してください

Alexander
Alexander

что надо чтоб воспроизвести? на Sample воспроизводится?

vk37
vk37 著者

На Sample не порбовал. Код такой примерно::::spoiler

public class Optimizer
{
    private IStorageRegistry _storageRegistry;
    private LocalMarketDataDrive _defaultDrive;
 
    public void Optimize()
    {
        var startTime = new DateTime(2012, 9, 10);
        var stopTime = new DateTime(2012, 11, 8);
        _storageRegistry = new StorageRegistry();
        _defaultDrive = (LocalMarketDataDrive)_storageRegistry.DefaultDrive;
        _defaultDrive.Path = @"D:\DBs\HydraData\Smart";
        var security = Securities.Instance.RtsF;
        var periods = MyStrategy.GetParamCombinations();
 
        Parallel.ForEach(periods, new ParallelOptions { MaxDegreeOfParallelism = 8 }, period =>
            {
                using (var waitHandle = new AutoResetEvent(false))
                {
                    var rts = security.Clone();
                    var portfolio = new Portfolio { Name = "test account", BeginValue = 100000m };
                    var trader = new EmulationTrader(
                        new[] { rts },
                        new[] { portfolio },
                        _storageRegistry)
                        {
                            UseMarketDepth = true,
                            StorageRegistry = _storageRegistry,
                        };
 
                    trader.MarketEmulator.Settings.Latency = TimeSpan.FromSeconds(1);
                    trader.RegisterMarketDepth(rts);
                    trader.Connect();
                    trader.StartExport();
                    var strategy = new MyStrategy(period)
                    {
                        Volume = 1,
                        Security = rts,
                        Portfolio = portfolio,
                        Trader = trader,
                        CommissionManager = rts.GetComissionManager(),
                    };
 
                    trader.StateChanged += (oldState, newState) =>
                        {
                            if (trader.State == EmulationStates.Started)
                                strategy.Start();
                            else if (trader.State == EmulationStates.Stopped)
                            {
                                new ExcelStrategyReport(strategy, path).Generate();
                                waitHandle.Set();
                            }
                        };
 
                    trader.Start(startTime, stopTime);
                    waitHandle.WaitOne();
                }
            });
    }
}
Alexander
Alexander

Зачем всё это делать в параллельном foreach? Попробуйте Sample, воспроизведётся там - будем смотреть. Нет - ищите проблему у себя.

vk37
vk37 著者

Alexander Mukhanchikov: Зачем всё это делать в параллельном foreach?Хочется, чтобы все ядра задействовались: так тестируется быстрее.

Alexander
Alexander

vk37:

Alexander Mukhanchikov: Зачем всё это делать в параллельном foreach?Хочется, чтобы все ядра задействовались: так тестируется быстрее.

А почитать как это сделать правильно в документации или посмотреть исходники примера кто-то мешает?

vk37
vk37 著者

Да пробовал я ваш Баскет Трейдер. С него начинал. Чем-то он мне не понравился. Память, чтоли всю сразу под себя забирал. Ну может еще раз попробую.

Mikhail Sukhov
Mikhail Sukhov

vk37: Да пробовал я ваш Баскет Трейдер. С него начинал. Чем-то он мне не понравился.

vk37
vk37 著者

Михаил, у Вас все пользователи вашей библиотеки вызывают подобные ассоциации, или только избранные?