Не совсем понятно, как в стратегии сделать событие на изменение индикатора

Не совсем понятно, как в стратегии сделать событие на изменение индикатора
Atom
5/14/2012
Spiritschaser


Добрый день!

Столкнулся с проблемой событийной модели:
1. У меня заполняются индикаторы по событию формирования очередной свечки.
2. В стратегии индикаторы обрабатываются ПОСЛЕ формирования следующей свечки (что логично), следовательно, в стратегии появляется лаг размером в свечку (что слишком много).
3. Логичное решение - обработка индикаторов после появления очередного значения последнего индикатора.

Попытался написать своё правило, но в примере правило создаётся ТОЛЬКО по событиям стратегии.
Я правильно понимаю, что чтобы сделать правило для событийной модели, мне нужно сначала написать новое событие для класса стратегии, которое основано на событии обновления индикаторов, а затем уже создавать правило для стратегии?

Или я что-то упустил?

S# v. 4.0.23

Tags:


Thanks:


ra81

Avatar
Date: 5/14/2012
Reply


Нижележащий код думаю прояснит что и как создается :).
Code

        /// <summary>
        /// Правило на событие истечения временного диапазона таймера <see cref="System.Timers.Timer"/>. 
        /// Срабатывает когда таймер <see cref="System.Timers.Timer.Elapsed"/> срабатывает.
        /// </summary>
        public sealed class TimerElapsedStrategyRule : StrategyRule<Timer>
        {
            private Timer Timer { get; set; }

            public TimerElapsedStrategyRule(Timer timer)
            {
                Timer = timer;
                Name = "Timer elapsed";
                Timer.Elapsed += OnTimerElapsed;
            }

            private void OnTimerElapsed(object sender, ElapsedEventArgs elapsedEventArgs)
            {
                Activate(Timer);
            }

            protected override void DisposeManaged()
            {
                Timer.Elapsed -= OnTimerElapsed;
                base.DisposeManaged();
            }
        }


Code

        /// <summary>
        /// Правило на событие таймера, об завершение интервала времени.
        /// </summary>
        /// <param name="timer"> Таймер. </param>
        /// <returns>Правило.</returns>
        public static TimerElapsedStrategyRule TimerElapsed(this Timer timer)
        {
            if (timer == null)
                throw new ArgumentNullException("timer");

            return new TimerElapsedStrategyRule(timer);
        }
Thanks: Spiritschaser Кот Матроскин AlexLan73 MaximMM

Spiritschaser

Avatar
Date: 5/14/2012
Reply


О! Спасибо!
Как я много раз писал на форуме, я десятки лет был не в курсе ООП, и сейчас мне это просто рвёт мозг.

Всё просто, достаточно объявить private индикатор - как у Вас объявлен Timer.
Спасибо!
Thanks:

ra81

Avatar
Date: 5/14/2012
Reply


Spiritschaser
О! Спасибо!
Как я много раз писал на форуме, я десятки лет был не в курсе ООП, и сейчас мне это просто рвёт мозг.

Всё просто, достаточно объявить private индикатор - как у Вас объявлен Timer.
Спасибо!

Тада жмакните спасибу :)). Раз я был полезен.
Thanks: Spiritschaser


Attach files by dragging & dropping, , or pasting from the clipboard.

loading
clippy