Добавление своего индикатора на график

Добавление своего индикатора на график
Atom
3/27/2013
Compressor


Здравствуйте. Вопрос по добавлению своего индикатора на график. Индикатор создан на базе индикаторов из stocksharp.codeplex только у итогового изменено название с highest на step1, как библиотека классов. При добавлении его на график появляется ошибка - Неявное преобразование типа "Swing.Step1" в "StockSharp.Algo.Indicators.IIndicator" невозможно. Существует явное преобразование (возможно, отсутствует приведение). В каком направлении двигаться?



Thanks:


1 2  >
IvanB

Avatar
Date: 3/24/2013
Reply


Здравствуйте Compressor.
Нам нужен код, как переопределяете индикатор Highest и как затем используете новый, чтобы помочь Вам.
Thanks: Самунджян Артем

Compressor

Avatar
Date: 3/25/2013
Reply


Код, в котором добавляется индикатор

Его отличие от Highest в том, что он добавляется из своей библиотеки, а не из библиотеки StoskSharp'а.
Thanks:

IvanB

Avatar
Date: 3/25/2013
Reply


Просмотрев код, видно, что есть ошибка в следующих строках:
Code
                var st1 = _step1Elem.Indicator.Process(new DecimalIndicatorValue(candle.HighPrice) { IsFinal = final });
                var stValue = new ChartIndicatorValue(_indichElem.Indicator, st1);

Во второй строке Вы хотели бы получить значение индикатора _step1Elem.Indicator, но используете индикатор _indichElem.Indicator. Так правильно:
Code
                var st1 = _step1Elem.Indicator.Process(new DecimalIndicatorValue(candle.HighPrice) { IsFinal = final });
                var stValue = new ChartIndicatorValue(_step1Elem.Indicator, st1);


Даже если выполнить проект с Вашим кодом и без исправления указанной выше ошибки, то проект выполняется успешно.
Есть предположение, что Вы используете разные версии модулей S# в разных сборках своего приложения, это может привести к исключению о котором Вы писали. Проверьте версии подключенных модулей, если ошибку не удастся устранить, пришлите архив с проектами.
Thanks:

Compressor

Avatar
Date: 3/25/2013
Reply


Не помогло, в 132 строке все равно выдает ошибку.
Thanks:

IvanB

Avatar
Date: 3/25/2013
Reply


Compressor
Не помогло, в 132 строке все равно выдает ошибку.


Подключенные сборки проверяли?
Пришлите архив проекта на электронную почту iv_qul@list.ru
Thanks:

Compressor

Avatar
Date: 3/27/2013
Reply


После изменений, связанных с переопределением библиотек, индикатор не реагирует на параметр Length, везде берет значение 1.
Thanks:

IvanB

Avatar
Date: 3/27/2013
Reply


Compressor
После изменений, связанных с переопределением библиотек, индикатор не реагирует на параметр Length, везде берет значение 1.


Привожу в качестве примера код индикатора, который адекватно работает, в том числе принимает значение Length:
Code
 public class Step2 : LengthIndicator<decimal>
    {
        /// <summary>
		/// Создать
		/// </summary>
		public Step2()
			: base(typeof(decimal))
		{
		}

        public override bool IsFormed
        {
            get
            {
                return true;
            }
        }

		/// <summary>
		/// Обработать входное значение.
		/// </summary>
		/// <param name="input">Входное значение.</param>
		/// <returns>Результирующее значение.</returns>
		protected override decimal OnProcess(IIndicatorValue input)
		{
			var val = input.GetValue<decimal>();

		    var newValue = val + Length;
            return newValue;
		}
    }


Замечу, что здесь наследуемый класс LengthIndicator<> взят из S#.
Thanks:

Compressor

Avatar
Date: 3/27/2013
Reply


К сожалению и этот вариант не работает правильно, если посмотреть график, то коричневая линия это как раз Максимум за 2 бара плюс shift (она производная от розовой без смещения на верх), если присмотреться то вершины образуют макс только на одном баре и не продляются на второй, а вот желтая линия графика это правильная линия, она держит максимум 2 бара.
Thanks:

Compressor

Avatar
Date: 3/27/2013
Reply


В последнем варианте величина Length просто поднимает или опускает график сильнее, но не влияет на базу расчета индикатора.
Thanks:

IvanB

Avatar
Date: 3/27/2013
Reply


Compressor
В последнем варианте величина Length просто поднимает или опускает график сильнее, но не влияет на базу расчета индикатора.


Правильно, свойство Length только хранит целочисленное значение и никак не влияет на работу индикатора, если Вы его не используете.
Вам необходимо самостоятельно использовать это свойство (Length) для реализации алгоритма индикатора.
Вы можете посмотреть код индикатора Highest, там в переопределенном методе OnProcess обеспечивается управление историческим буфером (Buffer) с использованием свойства Length.
Thanks:
1 2  >

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

loading
clippy