← Назад

Как работает strategy.WhenStopping()?

Не могу понять как работает WhenStopping() для стратегий...

Как я понимаю, этот кусок кода должен выполняться в момент окончания стратегии до перехода в состояние Stopped:


strategy.WhenStopping()
                .Do(() =>
                {
                    Debug.WriteLine("Stopping Strategy now");                   
                })
                .Apply();

Тем не менее, ничего не выводится...

Задача следующая: когда на бэктесте стратегия выполнилась, надо вывести всю статистику (последние значения переменных, считавшихся во время исполнения статегии)

Комментарии (10)

Вход или Создать аккаунт, Войдите или зарегистрируйтесь, чтобы оставить комментарий

devruss
devruss Автор

Михаил, может ты сможешь помочь?=)

Mikhail Sukhov
Mikhail Sukhov

Код правильный и рабочий. Не понимаю что именно нужно прокомментировать. Если из разряда "почему у меня не работает", то это надо самостоятельно разбираться или логи подкреплять.

devruss
devruss Автор

Михаил Сухов: Код правильный и рабочий. Не понимаю что именно нужно прокомментировать. Если из разряда "почему у меня не работает", то это надо самостоятельно разбираться или логи подкреплять.

Если поставить в дебаггере точку остановки на Debug.WriteLine(...), то на практике этот кусок кода никогда не исполняется.

Что надо выводить в лог и как понять почему так происходит?

devruss
devruss Автор

Михаил Сухов: Код правильный и рабочий. Не понимаю что именно нужно прокомментировать. Если из разряда "почему у меня не работает", то это надо самостоятельно разбираться или логи подкреплять.

Ок. Вот есть кусок кода в SmaStrategy из SampleHistoryTesting:


// если наша стратегия в процессе остановки
			if (ProcessState == ProcessStates.Stopping)
			{
				// отменяем активные заявки
				CancelActiveOrders();
				return;
			}

Данных код никогда не исполняется. (проверил на последнем билде)

Также если поставить в SampleHistoryTesting следующий код:


this.WhenStopping()
                .Do(() =>
                {
                    Debug.WriteLine("********************* STOPPING ************************************");
                })
                .Apply();

то этот код тоже никогда не срабатывает

Mikhail Sukhov
Mikhail Sukhov

В SampleHistoryTesting стратегия только запускается. Там нет остановки. Добавь остановку и событие будет срабатывать.

devruss
devruss Автор

Михаил Сухов: В SampleHistoryTesting стратегия только запускается. Там нет остановки. Добавь остановку и событие будет срабатывать.

Стоп, давай тогда определим, что мы понимаем под "остановкой". Я думал, что "остановка" - это когда ты запустил стратегию, она отработала и завершилась = остановилась... нет? Тогда вопрос есть ли состояние WhenFinishing?

Mikhail Sukhov
Mikhail Sukhov

devruss: Стоп, давай тогда определим, что мы понимаем под "остановкой". Я думал, что "остановка" - это когда ты запустил стратегию, она отработала и завершилась = остановилась... нет?

Да так.

vsnoopy83
vsnoopy83

devruss:

Михаил Сухов: В SampleHistoryTesting стратегия только запускается. Там нет остановки. Добавь остановку и событие будет срабатывать.

Стоп, давай тогда определим, что мы понимаем под "остановкой". Я думал, что "остановка" - это когда ты запустил стратегию, она отработала и завершилась = остановилась... нет? Тогда вопрос есть ли состояние WhenFinishing?

Думаю WhenStopping срабатывает при выполнении метода Strategy.Stop(), к тестеру это не имеет отношения. Здесь надо события тестера искать какие то видимо.

devruss
devruss Автор

Михаил Сухов:

devruss: Стоп, давай тогда определим, что мы понимаем под "остановкой". Я думал, что "остановка" - это когда ты запустил стратегию, она отработала и завершилась = остановилась... нет?

Да так.

Ну если это так, то когда тестер завершается и connector.IsFinished, что остановка стратегии не происходит

devruss
devruss Автор

vsnoopy83: Здесь надо события тестера искать какие то видимо.

Скорее всего так и есть... короче поведение стратегии на тестере и вживую отличается похоже