← Zurück

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

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


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

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

War dieses Thema hilfreich?

Thema teilen

Kommentare (7)

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

freelancer
freelancer

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

SuspendRules(() =>
{
	base.OnStarting();
});
InsiderHSE
InsiderHSE Autor

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

SuspendRules(() => { base.OnStarting(); });


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

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

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

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

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

InsiderHSE
InsiderHSE Autor

Alexander Mukhanchikov:

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

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

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

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

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

Alexander
Alexander

InsiderHSE:

Alexander Mukhanchikov:

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

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

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

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

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

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

InsiderHSE
InsiderHSE Autor

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
Alexander

в 4.0.9 будет фикс

InsiderHSE