Не выполняется Once() для своих правил стратегий
Atom Ответить
21.12.2011


Вот например правило (дублирует по фукциональности одно из стандартных):
Код

private sealed class NewBarStrategyRule : StrategyRule
{
	// СВОЙСТВА
	private Security Security { get; set; }
	private TimeSpan TimeFrame { get; set; }

	// КОНСТРУКТОР
	public NewBarStrategyRule(MyStrategy baseStrategy)
	{
		Security = baseStrategy.Security;
		TimeFrame = baseStrategy.Graph.TimeFrame;
				
		Core.CandleManager.CandlesStarted += OnNewCandles;
	}

	// МЕТОДЫ
	private void OnNewCandles(CandleToken token, IEnumerable<Candle> candles)
	{
		if (token.Security == Security && (TimeSpan)token.Arg == TimeFrame) // Если пришла наша свеча
			Activate();
	}

	// ДЕСТРУКТОР
	protected override void DisposeManaged()
	{
		Core.CandleManager.CandlesFinished -= OnNewCandles;
		base.DisposeManaged();
	}
}


Проблема: действие .Once() по такому правилу продолжает выполняться бесконечно. Вроде все делал по инструкции Confused

S# 4.0.10 (пробовал и на 4.0.8, 4.0.6)

Теги:


Спасибо:




5 Ответов
Alexander

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


1) S# версия
2) покажите как добавляете правило
Спасибо:

Supervisor

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


S# 4.0.10 (пробовал и на 4.0.8, 4.0.6)

Код

this
	.When(NewBar())
	.Do(a => Message("whooops"))
	.Once();

...

protected StrategyRule NewBar() { return new NewBarStrategyRule(this); }
Автор топика
Спасибо:

Supervisor

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


Со стандартным аналогичным правилом CandlesStarted() - .Once() работает нормально
Автор топика
Спасибо:

Alexander

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


статик поле сделайте.
у вас каждый раз возвращает новое правило
Спасибо: Supervisor

Supervisor

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


Упс) Невнимательность моя. Спасибо большое!
Автор топика
Спасибо:


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

loading
clippy