Не успевает сработать приостановка правил
Atom Ответить
15.12.2011


Котирование. Хочу запустить стратегию с приостановленными правилами, для чего использую следующий код
Код

this.SuspendRules();
base.OnStarting();
this.SuspendRules();


Тем не менее, прежде чем второй SuspendRules() срабатывает стратегия успевает 1 раз провести котирование. По-видимому, в base.OnStarting() SuspendRules снимается. Есть ли способ запустить котирование с приостановленными правилами?

Теги:


Спасибо:




7 Ответов
freelancer

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


Может так заработает ?

Код
SuspendRules(() =>
{
	base.OnStarting();
});
Спасибо:

InsiderHSE

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


freelancer Перейти
Может так заработает ?

Код
SuspendRules(() =>
{
	base.OnStarting();
});


Нет, это по сути то же самое. Флажок IsRulesSuspended снимается внутри base.OnStarting()
Автор топика
Спасибо:

Alexander

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


InsiderHSE Перейти
Флажок IsRulesSuspended снимается внутри base.OnStarting()


каким образом?

SuspendRules нигде не снимается

Флаг меняется лишь методами SuspendRules \ ResumeRules
Спасибо:

InsiderHSE

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


Alexander Mukhanchikov Перейти
InsiderHSE Перейти
Флажок IsRulesSuspended снимается внутри base.OnStarting()


каким образом?

SuspendRules нигде не снимается

Флаг меняется лишь методами SuspendRules \ ResumeRules


Могу предположить, что ResumeRules вызывается внутри base.OnStarting() =). Иначе как тогда стратегия успевает провести котирование? Или это баг?
Автор топика
Спасибо:

Alexander

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


InsiderHSE Перейти
Alexander Mukhanchikov Перейти
InsiderHSE Перейти
Флажок IsRulesSuspended снимается внутри base.OnStarting()


каким образом?

SuspendRules нигде не снимается

Флаг меняется лишь методами SuspendRules \ ResumeRules


Могу предположить, что ResumeRules вызывается внутри base.OnStarting() =). Иначе как тогда стратегия успевает провести котирование? Или это баг?


Внутри base.OnStarting() такого нет, если base - это Strategy
Чтобы понимать о чём речь, скиньте минимальный код стратегии, для которого это всё воспроизводится.
Спасибо:

InsiderHSE

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


base это BestByPriceQuotingStrategy

Код

using System;
using StockSharp.Algo.Strategies;
using StockSharp.BusinessEntities;

namespace OptionQuoter.Models
{
	using System.Diagnostics;

	using Ecng.Collections;
	using Ecng.Common;

	public class SingleOptionQuotingStrategy2 : BestByPriceQuotingStrategy
	{
		public SingleOptionQuotingStrategy2(Order order, Unit betsPriceOffset, Unit theorpriceOffset)
			: base(order, betsPriceOffset)
		{
			TheorPriceOffset = theorpriceOffset;
		}
		public SingleOptionQuotingStrategy2(OrderDirections dir, decimal vol, Unit theorpriceOffset)
			: base(dir, vol) { TheorPriceOffset = theorpriceOffset; }

		public Unit TheorPriceOffset { get; private set; }

		protected override void ProcessQuoting()
		{
			Debug.WriteLine("Время: {0}; Вызван ProcessQuoting.".Put(DateTime.Now.ToString("HH:mm:ss.fff")));
			base.ProcessQuoting();
		}

		protected override void OnStarting()
		{

			this.SuspendRules();
			base.OnStarting();
			this.SuspendRules();
			this.Rules.ForEach(r => r.EnableLog(true));

		}
	}
}


В дебаггере появляется
Время: 16:44:05.447; Вызван ProcessQuoting.
хотя судя по коду - не должно.
Автор топика
Спасибо:

Alexander

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


в 4.0.9 будет фикс
Спасибо: InsiderHSE


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

loading
clippy