S#

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


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


Добрый день!

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

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

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

S# v. 4.0.23

Теги:


Спасибо:




3 Ответов
ra81

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


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

        /// <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();
            }
        }


Код

        /// <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);
        }
Спасибо: Spiritschaser Кот Матроскин AlexLan73 MaximMM

Spiritschaser

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


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

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

ra81

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


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

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

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


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

loading
clippy