← Zurück

Не работает StopLossStrategy - CurrentBestPrice = 0

Никак не могу разобраться со стоп-лосс стратегией. Цена инструмента в стакане опускается ниже поога, а стратегия не срабаывает. Посмотрел дебаггером - метод GetNewPrice() все время возвращает 0, CurrentBestPrice также всегда 0, хотя массив из 20 лучших оферов присутствует. У кого-нибудь стратегия работает? Прошу подсказать, в какую сторону копать, замучался уже(

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

esper
esper

Версия 3.2.2, ни StopLoss, ни TakeProfit у меня не срабатывают, хотя цена уходит за дельту. На основании каких данных эти стратегию принимают решение?

Стратегия следующая:

sealed class VolumeStrategy : Strategy
	{
		private volatile Order _order;

		public VolumeStrategy(ITrader trader)
		{
			base.Trader = trader;
			base.NewMyTrades += OnNewMyTrades;

			base.Volume = Settings.Volume;
			base.Security = Trader.Securities.FirstOrDefault(s => s.Code == "SBER03");
			base.Portfolio = Trader.Portfolios.FirstOrDefault(p => p.Name == "");
		}

		protected override void OnRunning()
		{
			this
			    .When(base.Security.SecurityNewTrades())
			    .Do(Process)
			    .MakePeriodical();

			base.OnRunning();
		}

		protected override void DisposeManaged()
		{
			base.NewMyTrades -= OnNewMyTrades;
			base.DisposeManaged();
		}

		private void Process()
		{
			if (_order != null)
			{
				return;
			}

			//определяем направление сделки
			var direction = OrderDirections.Buy;

			// создаем заявку
			_order = base.CreateOrder(
				direction, 
				Security.ShrinkPrice(direction == OrderDirections.Buy ? Security.BestBid.Price + Settings.SafeSpread : Security.BestAsk.Price - Settings.SafeSpread), 
				base.Volume);

			// регистрируем ее
			base.RegisterOrder(_order);
		}

		private void OnNewMyTrades(IEnumerable<MyTrade> trades)
		{
			// фильтруем сделки, чтобы найти те, которые произошли для заявки TargetOrder
			trades = trades.Where(t => t.Order == _order);

			// если не найдена ни одна сделка для заявки TargetOrder
			if (trades.Count() == 0)
				return;

			// сама пакетная стратегия так же является параллельной, чтобы она не блокирована основной код робота
			var batch = new BatchStrategy(BatchFinishModes.All);
			
			// для каждой сделки добавляем для защиты по пакетной стратегии
			batch.ChildStrategies.AddRange(trades.Select(CreateBatch).Cast<Strategy>());

			base.ChildStrategies.Add(batch);
		}

		BatchStrategy CreateBatch(MyTrade t)
		{
			var s = new BatchStrategy(BatchFinishModes.First);

			// выставляет тейк-профит в n пунктов
			var takeProfit = new TakeProfitStrategy(t, new Unit(0.2m));

			// выставляет стоп-лосс в m пунктов
			var stopLoss = new StopLossStrategy(t, new Unit(0.2m));

			s.ChildStrategies.Add(takeProfit);
			s.ChildStrategies.Add(stopLoss);
			return s;
		}
	}

Лог:

VS 30.06.2011 17:23:19.015 Стратегия запущена. VS 30.06.2011 17:23:21.312 [BS] Стратегия запущена. VS 30.06.2011 17:23:21.312 [BS] [BS] Стратегия запущена. VS 30.06.2011 17:23:21.328 [BS] [BS] [TPS] Стратегия запущена. VS 30.06.2011 17:23:21.328 [BS] [BS] [SLS] Стратегия запущена.

esper
esper

Отвечу сам себе, для работы защитных стратегий нужен экспорт стакана. Точнее, после добавления экспорта стакана, TakeProfit сработал, а вот StopLoss нет...

Alexander
Alexander

esper: Отвечу сам себе, для работы защитных стратегий нужен экспорт стакана. Точнее, после добавления экспорта стакана, TakeProfit сработал, а вот StopLoss нет...

Да, про необходимость запуска экспорта стакана указано в разделе Котирование в документации.

Попробуйте установить IsParallel=true для TakeProfit \ StopLoss \ BatchStrategy

esper
esper

Alexander: Да, про необходимость запуска экспорта стакана указано в разделе Котирование в документации. В разделе про котирование не сказано, что TakeProfit и StopLoss тоже стратегии котирования.

Alexander: Попробуйте установить IsParallel=true для TakeProfit \ StopLoss \ BatchStrategy Это свойство точно есть в версии 3.2.2?

IsParallel

esper
esper

Взял версию 3.2.3, стратегии стали срабатывать без IsParallel=true

Alexander
Alexander

esper: Взял версию 3.2.3, стратегии стали срабатывать без IsParallel=true

А где вы её достали? Мы её ещё не выкладывали... 🙄

esper
esper

Alexander:

esper: Взял версию 3.2.3, стратегии стали срабатывать без IsParallel=true

А где вы её достали? Мы её ещё не выкладывали... 🙄

На codeplex в референсах😊

Alexander
Alexander

esper:

Alexander:

esper: Взял версию 3.2.3, стратегии стали срабатывать без IsParallel=true

А где вы её достали? Мы её ещё не выкладывали... 🙄

На codeplex в референсах😊

:) подождите final 3.2.3, там ещё есть проблемы. Скоро будет.

Я пока сам на 3.2.2 сижу.

Я правильно понимаю, что все проблемы, которые в этом топике описаны - решены?

esper
esper

Из этого топика да, стратегии стали отрабатывать, но появились другие вопросы.

Я правильно понимаю, что с переходом на событийную модель надобность в IsParallel отпала?