← Atrás

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

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

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


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

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

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

¿Le resultó útil este tema?

Compartir tema

Comentarios (10)

Iniciar sesión o Crear cuenta, Inicie sesión o regístrese para dejar un comentario

devruss
devruss Autor

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

Mikhail Sukhov
Mikhail Sukhov

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

devruss
devruss Autor

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

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

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

devruss
devruss Autor

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

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


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

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

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


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

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

Mikhail Sukhov
Mikhail Sukhov

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

devruss
devruss Autor

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

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

Mikhail Sukhov
Mikhail Sukhov

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

Да так.

vsnoopy83
vsnoopy83

devruss:

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

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

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

devruss
devruss Autor

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

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

Да так.

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

devruss
devruss Autor

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

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