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


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

Теги:


Спасибо:




29 Ответов
1 2  >
Alexander

Фотография
Дата: 14.11.2011
Ответить


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


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

frontman

Фотография
Дата: 14.11.2011
Ответить


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

Alexander

Фотография
Дата: 14.11.2011
Ответить


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


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

frontman

Фотография
Дата: 14.11.2011
Ответить


Хм... Александр не сочтите за оскорбление но в 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

Фотография
Дата: 14.11.2011
Ответить


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

frontman

Фотография
Дата: 14.11.2011
Ответить


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

Фотография
Дата: 14.11.2011
Ответить


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

frontman

Фотография
Дата: 14.11.2011
Ответить


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

frontman

Фотография
Дата: 14.11.2011
Ответить


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

Alexander

Фотография
Дата: 14.11.2011
Ответить


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

frontman

Фотография
Дата: 14.11.2011
Ответить


Код
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

Фотография
Дата: 14.11.2011
Ответить


frontman Перейти
Код
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);
			}
        }



И где она тут?
Цитата:
this.When(Order.NewTrades()).Do(trades => Task.Factory.StartNew(() => NewTrades(trades)));

оно?
Что такое Task.Factory.StartNew()?
Спасибо:

frontman

Фотография
Дата: 14.11.2011
Ответить


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

frontman

Фотография
Дата: 14.11.2011
Ответить


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

Alexander

Фотография
Дата: 14.11.2011
Ответить


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


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

frontman

Фотография
Дата: 14.11.2011
Ответить


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

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

Alexander

Фотография
Дата: 14.11.2011
Ответить


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


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

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

frontman

Фотография
Дата: 14.11.2011
Ответить


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

Alexander

Фотография
Дата: 14.11.2011
Ответить


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

Фотография
Дата: 14.11.2011
Ответить


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

Alexander

Фотография
Дата: 14.11.2011
Ответить


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


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

frontman

Фотография
Дата: 14.11.2011
Ответить


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

Alexander

Фотография
Дата: 14.11.2011
Ответить


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


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

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

frontman

Фотография
Дата: 14.11.2011
Ответить


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

frontman

Фотография
Дата: 14.11.2011
Ответить


Alexander Mukhanchikov Перейти

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

Немного не так. Пока CanFinish не вернет true. Т.е. правило выполняется до тех пор пока CanFinish не выполняется)
Автор топика
Спасибо:
1 2  >

Добавить файлы через драг-н-дроп, , или вставить из буфера обмена.

loading
clippy