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


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

Теги:


Спасибо:



Скидка 15% на все обучение до 5 апреля (осталось 2 дней).

9 Ответов
Mikhail Sukhov

Фотография
Автор статей Программист Трейдер
Дата: 16.10.2012
Ответить


Тоже эмулятор?
Спасибо:

Maniac

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


Нет, не эмулятор, терминал - Quik.
Автор топика
Спасибо:

Mikhail Sukhov

Фотография
Автор статей Программист Трейдер
Дата: 16.10.2012
Ответить


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


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

Maniac

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


Создание стратегии и 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);
		}


Логи

Автор топика
Спасибо:

Maniac

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


В 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. Регистрация заявки невозможна.

Автор топика
Спасибо:

esper

Фотография
Программист
Дата: 17.10.2012
Ответить


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

Ant.On.

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


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

Mikhail Sukhov

Фотография
Автор статей Программист Трейдер
Дата: 17.10.2012
Ответить


esper Перейти
Да, это бага. Спасибо за логи.


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

Maniac

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


Да, сделки пошли. Спасибо!
Автор топика
Спасибо:


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

loading
clippy