Я бы инициализацию стратегии перенес сюда. А то ошибка происходит, про состояние объекта что-то.
_trader.StateChanged += (oldState, newState) =>
{
if (_trader.State == EmulationStates.Stopped)
{
this.GuiAsync(() =>
{
StartBtn.IsEnabled = true;
if (_trader.IsFinished)
{
TestingProcess.Value = TestingProcess.Maximum;
MessageBox.Show(this, "Закончено за " + (DateTime.Now - _startEmulationTime));
}
else
MessageBox.Show(this, "Отменено");
});
}
else if (_trader.State == EmulationStates.Started)
{
//!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
// создаем торговую стратегию, скользящие средние на 80 5-минуток и 10 5-минуток
_strategy = new SmaStrategy(series, new SimpleMovingAverage { Length = 80 }, new SimpleMovingAverage { Length = 10 })
{
Volume = 1,
Portfolio = portfolio,
Security = security,
Trader = _trader
};
//!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
// запускаем стратегию когда эмулятор запустился
_strategy.Start();
}
};
Kommentare (10)
Anmelden oder Konto erstellen, Melden Sie sich an oder registrieren Sie sich, um einen Kommentar zu hinterlassen
_trader.StateChanged += (oldState, newState) => { if (_trader.State == EmulationStates.Stopped) { this.GuiAsync(() => { StartBtn.IsEnabled = true;
};
Ошибка, в общем, возникает при инициализации старетгии. Вне зависимости в каком месте ее инициализировать. Возникает не при каждом запуске. Одна и та же сборка иногда нормально сработает, а иногда с ошибкой. Может кто сталкивался?
судя по колстаку у вас Parallel.For или что-то в этом духе. Там точно нет ситуации что EmulationTrader дергается из двух разных потоков? Он вполне может быть не потокобезопасным.
если вам надо сделать оптимизацию гораздо быстрее будет сделать кучу экземпляров стратегии с разными параметрами и всю кучу прогнать в одном эмуляйшн-трейдере.
В упрощенном виде код оптимизации такой:
По стек трейсу видно, что напрямую вызывается BaseTrader.ProcessEvents. Зачем?
По стек трейсу видно, что напрямую вызывается BaseTrader.ProcessEvents. Зачем? Даже не знаю что это такое. Строка 83 - инициализация стратегии. Упрощенный код моей стратегии:
Если только Михаил заинтересуется😀 Мне и своего кода для ревьирования хватает, спасибо. Надо поднтянуть матчасть связанную с отладкой ошибок. Дебаггер, рефлектор.
Да я про ваш код имел ввиду. Хотя конечно я бы начал с основ - что такое исключение и что такое стектрейс. Но я так понял вы не из тех, кто любит на всякие разности отвлекаться.🙄
Получилось разобраться?