Mikhail SukhovНо как-то не все рвутся отвечать другим, чего не сказать наоборот, о вопросах.
Да тоже заметил. Сложно отвечать когда сам еще не разобрался до конца и задаешь глупые вопросы)
Mikhail SukhovЧто-то явно в коде робота. Потому что одно на другое очень слабо влияет... Попробуйте код упростить. Подозреваю, что там много больше, чем Вы привели в топике.
Это весь код стратегии. Я просто решил потестить все ли переопределения выполняються
Code class ABC : Strategy
{
public ABC()
: base()
{
}
protected override StrategyProcessResults OnProcess()
{
if (base.ProcessState == StrategyProcessStates.Stopping)
return StrategyProcessResults.Stop;
if (this.TotalWorkingTime.Seconds > 10)
{
this.Stop();
AddLog(StrategyErrorStates.Warning, "send stop", this);
}
AddLog(StrategyErrorStates.None, "OnProcess", this);
return StrategyProcessResults.Continue;
}
protected override void OnRunned()
{
AddLog(StrategyErrorStates.None, "OnRunned", this);
base.OnRunned();
}
protected override void OnRunning()
{
AddLog(StrategyErrorStates.None, "OnRunning", this);
base.OnRunning();
}
protected override void OnStopped()
{
AddLog(StrategyErrorStates.None, "OnStopped", this);
base.OnStopped();
}
protected override void OnStopping()
{
AddLog(StrategyErrorStates.None, "OnStopping", this);
base.OnStopping();
}
}
Стратегия только одна, без дочерних.
Код регистрации и запуска стратегии из главного окна
Codeprivate void button5_Click(object sender, RoutedEventArgs e)
{
Security m1 = sList.FirstOrDefault(s => s.Code == "LKOH");
Portfolio p = pList.FirstOrDefault(i => i.Name == "NL0011100043");
var st = new ABC();
gsl.Strategies.Add(st);
st.Interval = TimeSpan.FromSeconds(0.1);
man.Register(st, p, m1);
st.Start();
}
это весь код не включая получения инструментов, портфелей и подключения к квику.
В такой реализации OnProcess у меня ни разу не выполняется.
Во так я останавливаю ее:
Codeprivate void button6_Click(object sender, RoutedEventArgs e)
{
foreach (var item in man.Strategies)
{
if (item.Name == "ABC" || item.Name == "")
item.Stop();
}
}
а вот весь лог GuiStrategyLogger'a:
Quote:
ABC 16:35:28 OnRunning
ABC 16:35:29 Стратегия запущена
ABC 16:35:29 OnRunned
ABC 16:35:35 Стратегия останавливается.
ABC 16:35:35 OnStopping
Вроде бы все просто. Стратегия должна выполнять OnProcess раз в 100мс, в логгере я должен увидеть приблизительно 100 сообщений OnProcess и в течении 10 сек стратегия должна сама себя остановить.
Будьте так добры)) все кому не лень попробуйте создать такой пример и отписаться по результатам.
Все кому лень чуть позже выложу ссылку на солюшн)
Спасибо