← Zurück

TimeFrameStrategy стратегия не видит своих своих сделок

После перехода на 4.1.5 стратегия TimeFrameStrategy перестала видеть свои сделки. Итерации идут, в OnProcess заходит. Там регистрируются заявки RegisterOrder, и по ним проходят сделки. В логах эти сделки идут только от Trader, от Strategy их нет, соответственно, стратегия эти сделки не видит, и позиция не менятся. (в 4.1.4 все работало корректно). Возможно, что S# 4.1.5: перестало срабатывать правило WhenNewMyTrades() по той же самой причине: стратегия не видит своих сделок.

War dieses Thema hilfreich?

Thema teilen

Kommentare (9)

Anmelden oder Konto erstellen, Melden Sie sich an oder registrieren Sie sich, um einen Kommentar zu hinterlassen

Mikhail Sukhov
Mikhail Sukhov

Тоже эмулятор?

Maniac
Maniac Autor

Нет, не эмулятор, терминал - Quik.

Mikhail Sukhov
Mikhail Sukhov

Maniac: Нет, не эмулятор, терминал - Quik.

Там событие не вызывается потому что в эмуляторе ошибка. А почему у вас - не понятно. Надо больше логов.

Maniac
Maniac Autor

Создание стратегии и OnProcess


				_strategy = new ChaosStrategy(_timeFrame)
				{
					Volume = 1,
					Security = _sec,
					Portfolio = _portfolio,
					Trader = _trader,
					CancelOrdersWhenStopping = false,
					Name = "Chaos",
					WaitAllTrades = true
				};

				_logManager.Sources.Add(_strategy);	// добавление логирования

		public ChaosStrategy(TimeSpan timeFrame)
			: base(timeFrame)
		{
			
		}
		
		protected override void OnStarted()
		{
			base.StopOrderRegistered += o => this.AddInfoLog("New StopOrder {3}: Id={0}, Securuty={1}, State={2}", o.Id, o.Security.Code, o.State, o.Type);
			base.StopOrderChanged += o => this.AddInfoLog("Стоп заявка {0}, объём {2}, баланс {3}, TransactionId={4}, Price={5} изменилась на {1} в {7}, Latency={6}",
				o.Id, o.State, o.Volume, o.Balance, o.TransactionId, o.Price, o.LatencyCancellation, o.Time);
			base.NewMyTrades += trades =>
			{
				foreach (var myTrade in trades)
				{
					var trade = myTrade.Trade;
					this.AddInfoLog("ChaosStrategy Trade: Id={0}, {5}, Price={1}, Security={2}, Volume={3}, Date={4}",
						trade.Id, trade.Price, trade.Security.Code, trade.Volume, trade.Time, trade.OrderDirection);
				}

				Thread.Sleep(500);

				if (base.PositionManager.Position != 0)
				{
					// protect current position with stop order
					CreateTakeProfitAndStopLimit();
				}
			};
			base.OnStarted();
		}

		protected override ProcessResults OnProcess()
		{
			if (PositionManager.Position == 0)
			{
			MakeTrade(_direction);
			_direction = _direction.Invert();
			}
			this.AddInfoLog("Очередная итерация. Позиция: {0}", this.Position.ToString());
			return ProcessResults.Continue;
		}

		public void MakeTrade(OrderDirections _direction)
		{
			// создаем заявку
			decimal _price = _direction == OrderDirections.Buy ? 
				Security.BestAsk.Price + Security.MinStepSize * 10 : Security.BestAsk.Price - Security.MinStepSize * 10;
			var order = this.CreateOrder(_direction, _price, Volume);

			// регистрируем заявку (обычным способом - лимитированной заявкой)
			RegisterOrder(order);
		}

Логи

2012.10.16 22:24:27.406| |Chaos |Стратегия запущена. [0,-1]. Позиция при старте 0. 2012.10.16 22:24:57.390| |QuikTrader|RegisterOrder: 80642079/0 Покупка Цена=1926,0 Объем=1 Сост=None Бал=1 2012.10.16 22:24:57.406| |Chaos |Очередная итерация. Позиция: 0 2012.10.16 22:24:58.328| |QuikTrader|New order: 80642080/1921961359 Покупка Цена=1926 Объем=1 Сост=Done Бал=0 2012.10.16 22:24:58.328| |QuikTrader|Order changed: 80642080/1921961359 Покупка Цена=1926 Объем=1 Сост=Done Бал=0 2012.10.16 22:24:58.343| |QuikTrader|QuikTrader Trade : Id=1184336309, Price=1924,5, Security=LKOH, Volume=1, Date=16.10.2012 22:24:40 2012.10.16 22:25:27.375| |QuikTrader|RegisterOrder: 80642081/0 Продажа Цена=1921,7 Объем=1 Сост=None Бал=1 2012.10.16 22:25:27.375| |Chaos |Очередная итерация. Позиция: 0 2012.10.16 22:25:28.328| |QuikTrader|New order: 80642082/1921961957 Продажа Цена=1921,7 Объем=1 Сост=Done Бал=0 2012.10.16 22:25:28.328| |QuikTrader|QuikTrader Trade : Id=1184336657, Price=1921,8, Security=LKOH, Volume=1, Date=16.10.2012 22:25:10 2012.10.16 22:25:28.328| |QuikTrader|Order changed: 80642082/1921961957 Продажа Цена=1921,7 Объем=1 Сост=Done Бал=0 2012.10.16 22:25:57.375| |QuikTrader|RegisterOrder: 80642083/0 Покупка Цена=1924,4 Объем=1 Сост=None Бал=1 2012.10.16 22:25:57.375| |Chaos |Очередная итерация. Позиция: 0 2012.10.16 22:25:58.484| |QuikTrader|New order: 80642084/1921962719 Покупка Цена=1924,4 Объем=1 Сост=Done Бал=0 2012.10.16 22:25:58.484| |QuikTrader|QuikTrader Trade : Id=1184337097, Price=1923,4, Security=LKOH, Volume=1, Date=16.10.2012 22:25:40 2012.10.16 22:25:58.484| |QuikTrader|Order changed: 80642084/1921962719 Покупка Цена=1924,4 Объем=1 Сост=Done Бал=0 2012.10.16 22:26:27.375| |QuikTrader|RegisterOrder: 80642085/0 Продажа Цена=1922,1 Объем=1 Сост=None Бал=1 2012.10.16 22:26:27.375| |Chaos |Очередная итерация. Позиция: 0 2012.10.16 22:26:27.859| |QuikTrader|New order: 80642086/1921962972 Продажа Цена=1922,1 Объем=1 Сост=Active Бал=1 2012.10.16 22:26:27.875| |QuikTrader|Order changed: 80642086/1921962972 Продажа Цена=1922,1 Объем=1 Сост=Active Бал=1 2012.10.16 22:26:34.656| |QuikTrader|QuikTrader Trade : Id=1184337296, Price=1922,1, Security=LKOH, Volume=1, Date=16.10.2012 22:26:16 2012.10.16 22:26:34.656| |QuikTrader|Order changed: 80642086/1921962972 Продажа Цена=1922,1 Объем=1 Сост=Done Бал=0 2012.10.16 22:26:57.375| |QuikTrader|RegisterOrder: 80642087/0 Покупка Цена=1923,1 Объем=1 Сост=None Бал=1 2012.10.16 22:26:57.375| |Chaos |Очередная итерация. Позиция: 0 2012.10.16 22:26:57.859| |QuikTrader|New order: 80642088/1921963374 Покупка Цена=1923,1 Объем=1 Сост=Done Бал=0 2012.10.16 22:26:57.859| |QuikTrader|QuikTrader Trade : Id=1184337528, Price=1922,1, Security=LKOH, Volume=1, Date=16.10.2012 22:26:40 2012.10.16 22:26:57.859| |QuikTrader|Order changed: 80642088/1921963374 Покупка Цена=1923,1 Объем=1 Сост=Done Бал=0 2012.10.16 22:27:03.156| |Logger |Останавливаем работу ... 2012.10.16 22:27:04.625| |Chaos |Стратегия останавливается. [0,-1]. Позиция при старте 0.
Maniac
Maniac Autor

В OnStarted подписался на события OrderRegistering, OrderRegistered, OrderRegisterFailed

			base.OrderRegistering += o => this.AddInfoLog("OrderRegistering {3}: Id={0}, Securuty={1}, State={2}", o.Id, o.Security.Code, o.State, o.Type);
			base.OrderRegistered += o => this.AddInfoLog("OrderRegistered {3}: Id={0}, Securuty={1}, State={2}", o.Id, o.Security.Code, o.State, o.Type);
			base.OrderRegisterFailed += o => this.AddInfoLog("OrderRegisterFailed {3} {4}: Id={0}, Securuty={1}, State={2}", o.Order.Id, o.Order.Security.Code, o.Order.State, o.Order.Type, o.Error.Message);

В логах есть только OrderRegistering, к-рый, видимо так и не выполняется, т.к. при остановке стратегии возникает предупреждение: Стратегия в состоянии Stopping. Регистрация заявки невозможна.

2012.10.17 09:58:27.117| |Chaos |Стратегия запущена. [0,-1]. Позиция при старте 0. 2012.10.17 09:58:56.960| |Chaos |OrderRegistering Limit: Id=0, Securuty=LKOH, State=None 2012.10.17 09:58:56.975| |QuikTrader|RegisterOrder: 35873126/0 Покупка Цена=1934,8 Объем=1 Сост=None Бал=1 2012.10.17 09:58:57.007| |Chaos |Очередная итерация. Позиция: 0 2012.10.17 09:58:57.599| |QuikTrader|New order: 35873127/1922401126 Покупка Цена=1934,8 Объем=1 Сост=Done Бал=0 2012.10.17 09:58:57.615| |QuikTrader|Order changed: 35873127/1922401126 Покупка Цена=1934,8 Объем=1 Сост=Done Бал=0 2012.10.17 09:58:57.631| |QuikTrader|QuikTrader Trade : Id=1184599265, Price=1933,8, Security=LKOH, Volume=1, Date=17.10.2012 9:58:56 2012.10.17 09:59:26.974| |Chaos |OrderRegistering Limit: Id=0, Securuty=LKOH, State=None 2012.10.17 09:59:26.974| |QuikTrader|RegisterOrder: 35873128/0 Продажа Цена=1932,8 Объем=1 Сост=None Бал=1 2012.10.17 09:59:26.974| |Chaos |Очередная итерация. Позиция: 0 2012.10.17 09:59:27.551| |QuikTrader|New order: 35873129/1922401509 Продажа Цена=1932,8 Объем=1 Сост=Done Бал=0 2012.10.17 09:59:27.551| |QuikTrader|Order changed: 35873129/1922401509 Продажа Цена=1932,8 Объем=1 Сост=Done Бал=0 2012.10.17 09:59:27.551| |QuikTrader|QuikTrader Trade : Id=1184599480, Price=1933,2, Security=LKOH, Volume=1, Date=17.10.2012 9:59:26 2012.10.17 09:59:56.989| |Chaos |OrderRegistering Limit: Id=0, Securuty=LKOH, State=None 2012.10.17 09:59:56.989| |QuikTrader|RegisterOrder: 35873130/0 Покупка Цена=1934,8 Объем=1 Сост=None Бал=1 2012.10.17 09:59:56.989| |Chaos |Очередная итерация. Позиция: 0 2012.10.17 09:59:57.566| |QuikTrader|New order: 35873131/1922401858 Покупка Цена=1934,8 Объем=1 Сост=Done Бал=0 2012.10.17 09:59:57.566| |QuikTrader|QuikTrader Trade : Id=1184599648, Price=1933,8, Security=LKOH, Volume=1, Date=17.10.2012 9:59:56 2012.10.17 09:59:57.566| |QuikTrader|Order changed: 35873131/1922401858 Покупка Цена=1934,8 Объем=1 Сост=Done Бал=0 2012.10.17 09:59:59.001| |Logger |Останавливаем работу ... 2012.10.17 10:00:00.764| |Chaos |Стратегия останавливается. [0,-1]. Позиция при старте 0. 2012.10.17 10:00:00.764|Warning|Chaos |Стратегия в состоянии Stopping. Регистрация заявки невозможна. 2012.10.17 10:00:00.764| |Chaos |Очередная итерация. Позиция: 0
esper
esper

Да, это бага. Спасибо за логи.

Mikhail Sukhov
Mikhail Sukhov

esper: Да, это бага. Спасибо за логи.

Залили на КП. Просьба проверить как можно быстрее, исправлена ли ошибка.

Ant.On.
Ant.On.

В теме S# 4.1.5: перестало срабатывать правило WhenNewMyTrades() тоже был не эмулятор (с эмулятором отдельная проблема). Видимо там та же ошибка.

Maniac
Maniac Autor

Да, сделки пошли. Спасибо!