← Back

Остановка стратегий

Ребят а не у кого не было проблем с остановкой стратегии? У меня почему то иногда стратегии не стопоряться... В лог выводиться что стратегия "останавливается", а вот что она остановлена так и не приходит сообщение... Может у кого то есть подозрения по какой причине это может происходить?

Comments (29)

Login or Create account, Log in or register to leave a comment

Alexander
Alexander

frontman: Ребят а не у кого не было проблем с остановкой стратегии? У меня почему то иногда стратегии не стопоряться... В лог выводиться что стратегия "останавливается", а вот что она остановлена так и не приходит сообщение... Может у кого то есть подозрения по какой причине это может происходить?

какая стратегия - что является базовой? сколько раз возвращается ProcessResults.Stop в OnProcess? Напомню, на всякий случай, что после первого возврата ProcessResults.Stop стратегия переходит в состояние ProcessStates.Stopping, после второго - в ProcessStates.Stopped

frontman
frontman Author

Я извиняюсь пытался найти и переопределить метод OnProcess, но что то не нашел... Базовый класс у меня Strategy...

Alexander
Alexander

frontman: Я извиняюсь пытался найти и переопределить метод OnProcess, но что то не нашел... Базовый класс у меня Strategy...

Вот пример из доки. + Смотрите примеры, их множество.

frontman
frontman Author

Хм... Александр не сочтите за оскорбление но в Strategy нет метода OnProcess))

protected virtual void OnChildStopped(Strategy childStrategy);
		protected virtual void OnStarting();
		protected virtual void OnStopping();
		protected virtual void OnStopped();
		protected internal virtual void RegisterOrder(Order order);
		protected internal virtual void ReRegisterOrder(Order oldOrder, Order newOrder);
		public virtual void Start();
		public virtual void Stop();
		public virtual void SuspendRules();
		public virtual void ResumeRules();
		public virtual void SuspendRules(Action action);
		protected virtual void OnSecurityChanged();
		protected virtual void OnPortfolioChanged();
		protected virtual void OnPositionsChanged(IEnumerable<Position> positions);
		protected virtual void OnNewMyTrades(IEnumerable<MyTrade> trades);
		protected virtual void OnOrderChanged(Order order);
		protected virtual void OnStopOrderChanged(Order order);
		protected virtual void OnOrdersChanged(IEnumerable<Order> orders);
		protected virtual void OnStopOrdersChanged(IEnumerable<Order> orders);
		protected virtual void OnOrderFailed(OrderFail fail);
		protected virtual void OnStopOrderFailed(OrderFail fail);
		protected virtual IEnumerable<Order> ProcessNewOrders(IEnumerable<Order> newOrders, bool isStopOrders);
		protected void NotifyPropertyChanged(string info);
		public void CancelActiveOrders();
		protected virtual void OnError(Exception error);
		public override string ToString();
		public override Strategy Clone();
		protected override bool OnEquals(Strategy other);
		protected override void DisposeManaged();
Alexander
Alexander

А, ну да, он скрыт. Тогда, раз наследуететесь от Strategy, единственной причиной неостановки стратегии является то, что какое-то правило продолжает работу. Дайте вывод лога - запуск, остановки, OnStopping, OnStopped.

frontman
frontman Author

10:21:24.562 | | Главная стратегия | Стратегия запущена. 10:31:09.260 | | Главная стратегия | Выставляю заявки.Позиция 0 10:31:09.260 | | Главная стратегия | Зарегистрировал заявку: TransactionId=36992922, Id=0, Price=154495,00000, Balance=1, Security=RIZ1@RTS, State=None 10:31:09.307 | | Главная стратегия | Параметры заявки 154495,00000, 1, None, , J700379, RIZ1@RTS, Sell, Limit, 1 10:31:09.323 | | Корзина стратегий | Стратегия запущена. 10:31:09.354 | | Стратегия в корзине 1 | Стратегия запущена. 10:31:09.385 | | Стратегия в корзине 3 | Стратегия запущена. 10:31:09.401 | | Стратегия в корзине 4 | Стратегия запущена. 10:31:09.448 | | Стратегия в корзине 2 | Стратегия запущена. 10:31:09.510 | | Главная стратегия | Выставляю заявки.Позиция 0 10:31:09.588 | | Главная стратегия | Выставляю заявки.Позиция 0 10:31:16.556 | | Главная стратегия | Выставляю заявки.Позиция 0 10:31:22.384 | | Главная стратегия | Выставляю заявки.Позиция 0 10:31:22.384 | | Главная стратегия | Новая Sell сделка 448683077 по цене 154495,00000 на 1 заявки 36992922. 10:31:22.384 | | Главная стратегия | Зарегистрировал заявку: TransactionId=36992923, Id=0, Price=154495,00000, Balance=1, Security=RIZ1@RTS, State=None 10:31:22.415 | | Главная стратегия | Параметры заявки 154495,00000, 1, None, , J700379, RIZ1@RTS, Sell, Limit, 1 10:31:22.447 | | Корзина стратегий | Стратегия запущена. 10:31:22.462 | | Стратегия в корзине 1 | Стратегия запущена. 10:31:22.478 | | Стратегия в корзине 3 | Стратегия запущена. 10:31:22.525 | | Стратегия в корзине 4 | Стратегия запущена. 10:31:22.525 | | Главная стратегия | Позиция: -1 10:31:22.556 | | Защитная стратегия(Являеться дочерней Стратегии 4) | Стратегия запущена. 10:31:22.556 | | Стратегия в корзине 2 | Стратегия запущена. 10:31:22.915 | | Главная стратегия | Новая Sell сделка 448683087 по цене 154495,00000 на 1 заявки 36992923. 10:31:22.947 | | Главная стратегия | Позиция: -2 10:31:22.993 | | Защитная стратегия(Являеться дочерней Стратегии 4) | Стратегия запущена. 10:31:28.774 | | Стратегия в корзине 1 | Закрываю позицию: TransactionId=36992922, Id=5840039044, Price=154495,00000, Balance=0, Security=RIZ1@RTS, State=Done Уже закрыто позиций 0 10:31:28.774 | | Стратегия в корзине 1 | Закрываю позицию: TransactionId=36992923, Id=5840043675, Price=154495,00000, Balance=0, Security=RIZ1@RTS, State=Done Уже закрыто позиций 0 10:31:28.852 | | Главная стратегия | Новая Buy сделка 448683176 по цене 154500,00000 на 1 заявки 36992924. 10:31:28.868 | | Корзина стратегий | Новая Buy сделка 448683176 по цене 154500,00000 на 1 заявки 36992924. 10:31:28.868 | | Главная стратегия | Позиция: -1 10:31:28.884 | | Стратегия в корзине 1 | Новая Buy сделка 448683176 по цене 154500,00000 на 1 заявки 36992924. 10:31:28.930 | | Корзина стратегий | Количество контрактов в заявке исчерпанно: останавливаю все стратегии 10:31:28.946 | | Корзина стратегий | Стратегия останавливается. 10:31:28.977 | | Главная стратегия | Новая Buy сделка 448683179 по цене 154500,00000 на 1 заявки 36992925. 10:31:28.977 | | Стратегия в корзине 1 | Стратегия останавливается. 10:31:29.009 | | Стратегия в корзине 1 | Стратегия остановлена. 10:31:29.055 | | Стратегия в корзине 3 | Стратегия останавливается. 10:31:29.024 | | Корзина стратегий | Новая Buy сделка 448683179 по цене 154500,00000 на 1 заявки 36992925. 10:31:29.055 | | Главная стратегия | Позиция: 0 10:31:29.055 | | Стратегия в корзине 3 | Отменяю заявки 0 10:31:29.118 | | Стратегия в корзине 1 | Новая Buy сделка 448683179 по цене 154500,00000 на 1 заявки 36992925. 10:31:29.118 | | Стратегия в корзине 3 | Стратегия остановлена. 10:31:29.118 | | Стратегия в корзине 4 | Стратегия останавливается. 10:31:29.165 | | Корзина стратегий | Стратегия в корзине 1 говорит ,что изменилось кол-во закрытых сделок: 1 10:31:29.196 | | Защитная стратегия(Являеться дочерней Стратегии 4) | Стратегия остановлена. 10:31:29.165 | | Защитная стратегия(Являеться дочерней Стратегии 4) | Стратегия останавливается. 10:31:29.227 | | Корзина стратегий | Количество контрактов в заявке исчерпанно: останавливаю все стратегии 10:31:29.227 | | Стратегия в корзине 2 | Стратегия останавливается. 10:31:29.290 | | Стратегия в корзине 2 | Стратегия остановлена. 10:31:29.290 | | Корзина стратегий | Стратегия останавливается. 10:31:29.321 | | Стратегия в корзине 1 | Стратегия останавливается. 10:31:29.383 | | Стратегия в корзине 1 | Стратегия остановлена. 10:31:29.399 | | Стратегия в корзине 3 | Стратегия останавливается. 10:31:29.430 | | Стратегия в корзине 3 | Отменяю заявки 0 10:31:29.462 | | Стратегия в корзине 3 | Стратегия остановлена. 10:31:29.477 | | Стратегия в корзине 4 | Стратегия останавливается. 10:31:29.493 | | Защитная стратегия(Являеться дочерней Стратегии 4) | Стратегия останавливается. 10:31:29.540 | | Защитная стратегия(Являеться дочерней Стратегии 4) | Стратегия остановлена. 10:31:29.540 | | Стратегия в корзине 2 | Стратегия останавливается. 10:31:29.555 | | Стратегия в корзине 2 | Стратегия остановлена. 10:31:43.898 | | Главная стратегия | Стратегия останавливается.

frontman
frontman Author

Я старался)) Обратите внимание на конец логов... Стратегия 4 так и не остановилась(((

frontman
frontman Author

А вот скажите если я у правила использую метод Periodical правило остановиться только когда делегат вернет true? Или когда стратегия останавливается правило то же?

frontman
frontman Author

Ну т.е не взирая на Periodical правило остановиться если стратегия начинает останавливаться?

Alexander
Alexander

Покажите свою "Стратегия в корзине 4".

frontman
frontman Author
protected override void OnStarting()
		{
			this.When(Order.NewTrades()).Do(trades => Task.Factory.StartNew(() => NewTrades(trades)));
			base.OnStarting();
		}

    	private void NewTrades(IEnumerable<MyTrade> trads)
        {
			foreach (var profit in trads.Select(trade => new ProtectedStrategy(trade, ProtectivDelta, ProtectivSlipPage)))
			{
				profit.CreateNewOrder += order =>
											 {
												 OnCreateNewOrder(order);
												 this.When(order.NewTrades())
													 .Do(tr => OnChangedCloseTrade(tr.Sum(t => t.Trade.Volume)));
											 };
				ChildStrategies.Add(profit);
			}
        }
Alexander
Alexander

frontman: ...

И где она тут?

this.When(Order.NewTrades()).Do(trades => Task.Factory.StartNew(() => NewTrades(trades))); оно? Что такое Task.Factory.StartNew()?

frontman
frontman Author

Новый поток... Нет все таки помоем причина в Periodical вот этот вариант который я вам скинул(уже исправленный) работает. Мне кажется если исп Periodical правило не перестанет работать даже если стратегия стопиться...

Alexander
Alexander

frontman: Новый поток... Нет все таки помоем причина в Periodical вот этот вариант который я вам скинул(уже исправленный) работает. Мне кажется если исп Periodical правило не перестанет работать даже если стратегия стопиться...

Так скиньте задание и добавление вашей 4 стратегии. я не вижу Periodical

frontman
frontman Author

Вот то что я вам скинул это внутренности "Стратегия в корзине 4"

frontman
frontman Author

Александр ну this.When(Order.NewTrades()).Do(trades => Task.Factory.StartNew(() => NewTrades(trades))); было с Periodical...

Вообщем смотрите я убрал его отовсюду... И у меня все стало норм... Дайте доступ я сам подправлю))

Alexander
Alexander

frontman: Дайте доступ я сам подправлю))

к какому файлу \ методу?

ещё раз вопрос - как именно у вас был описан Periodical, что передано в качестве canFinish?

frontman
frontman Author

Флаг. Его стратегия материнская в true ставит перед тем как остановить стратегию. Да даже если бы и не ставила , все равно остановка должна была правило убить... "к какому файлу \ методу?" - ну к тому где метод Periodical описан...

Alexander
Alexander

frontman: Флаг. Его стратегия материнская в true ставит перед тем как остановить стратегию. Да даже если бы и не ставила , все равно остановка должна была правило убить... "к какому файлу \ методу?" - ну к тому где метод Periodical описан...

		/// <summary>
		/// Сделать правило периодичным (будет вызываться до тех пор, пока <paramref name="canFinish"/> не вернет true).
		/// </summary>
		/// <param name="canFinish">Критерий окончания периодичности.</param>
		/// <returns>Правило.</returns>
		public StrategyRule Periodical(Func<bool> canFinish)
		{
			if (canFinish == null)
				throw new ArgumentNullException("canFinish");

			CanFinish = canFinish;
			return this;
		}

Какой флаг? Там функцию надо передавать. Дубль 3 - опишите подробнее свой Periodical.

frontman
frontman Author

Хм... Понял)) Ну вот смотрите если записать вот так например this.When(Order.NewTrades()).Do(trades => Task.Factory.StartNew(() => NewTrades(trades))).Periodical(() => IsStoped || ProcessState == ProcessStates.Stopping); Где IsStoped - тот самый флаг, то остановка нормально работает...

Alexander
Alexander

frontman: Хм... Понял)) Ну вот смотрите если записать вот так например this.When(Order.NewTrades()).Do(trades => Task.Factory.StartNew(() => NewTrades(trades))).Periodical(() => IsStoped || ProcessState == ProcessStates.Stopping); Где IsStoped - тот самый флаг, то остановка нормально работает...

Тогда в чём проблема раз всё нормально работает? Для остановки правила должно выполняться CanFinish, которые вы передаёте в Periodical.

frontman
frontman Author

Ну вообще то это костыль) Правило должно и без него стопориться же!

Alexander
Alexander

frontman: Ну вообще то это костыль) Правило должно и без него стопориться же!

Так в чём костыль-то? Если вы передаёте функцию, которая всегда возвращает false - как, по-вашему, должно останавливаться правило? правильно - никак.

вдумайтесь в смысл Periodical - выполнять правило до тех пор, пока выполняется CanFinish.

frontman
frontman Author

Alexander Mukhanchikov: вдумайтесь в смысл Periodical - выполнять правило до тех пор, пока выполняется CanFinish. Немного не так. Пока CanFinish не вернет true. Т.е. правило выполняется до тех пор пока CanFinish не выполняется)

frontman
frontman Author

Нет понимаю я это. Но разве это правило имеет смысл если сама стратегия в которой это правило работает остановлена? Мне кажется нет. Т.е. не взирая не на какие условия правило должно тормозиться при остановки стратегии...

Alexander
Alexander

frontman: Нет понимаю я это. Но разве это правило имеет смысл если сама стратегия в которой это правило работает остановлена? Мне кажется нет. Т.е. не взирая не на какие условия правило должно тормозиться при остановки стратегии...

Неверно. Много ситуаций - тоже самое котирование - когда мы должны дожидаться окончания работы дочерних стратегий перед остановкой базовой.

P.S. Ну да, верно, описался.

frontman
frontman Author

Alexander Mukhanchikov: Неверно. Много ситуаций - тоже самое котирование - когда мы должны дожидаться окончания работы дочерних стратегий перед остановкой базовой. Нет я не о стратегиях а о правилах. frontman: Нет понимаю я это. Но разве это <mark>правило</mark> имеет смысл если сама стратегия в которой это правило работает остановлена? Мне кажется нет. Т.е. не взирая не на какие условия<mark> правило</mark> должно тормозиться при остановки стратегии...

Со стратегиями то все правильно...

Alexander
Alexander

frontman:

Alexander Mukhanchikov: Неверно. Много ситуаций - тоже самое котирование - когда мы должны дожидаться окончания работы дочерних стратегий перед остановкой базовой. Нет я не о стратегиях а о правилах. frontman: Нет понимаю я это. Но разве это <mark>правило</mark> имеет смысл если сама стратегия в которой это правило работает остановлена? Мне кажется нет. Т.е. не взирая не на какие условия<mark> правило</mark> должно тормозиться при остановки стратегии...

Со стратегиями то все правильно...

С правилами всё аналогично. Если тормозится стратегия - надо дождаться пока все правила закончут свою работу. Стратегии состоят ведь из правил. Может мы должны перекрыться там, или заявки снять....

В общем надо завершать - пишите правила таким образом, чтобы они завершались.

frontman
frontman Author

Все. Понял спасибо) Извините за долгие расспросы)