← 戻る

Как работает 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: Здесь надо события тестера искать какие то видимо.

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