Здравствуйте. Вопрос по добавлению своего индикатора на график. Индикатор создан на базе индикаторов из stocksharp.codeplex только у итогового изменено название с highest на step1, как библиотека классов. При добавлении его на график появляется ошибка - Неявное преобразование типа "Swing.Step1" в "StockSharp.Algo.Indicators.IIndicator" невозможно. Существует явное преобразование (возможно, отсутствует приведение). В каком направлении двигаться?
Kommentare (12)
Anmelden oder Konto erstellen, Melden Sie sich an oder registrieren Sie sich, um einen Kommentar zu hinterlassen
Здравствуйте Compressor. Нам нужен код, как переопределяете индикатор Highest и как затем используете новый, чтобы помочь Вам.
Код, в котором добавляется индикатор
Код добавляемого индикатора Step1
Его отличие от Highest в том, что он добавляется из своей библиотеки, а не из библиотеки StoskSharp'а.
Просмотрев код, видно, что есть ошибка в следующих строках:
Во второй строке Вы хотели бы получить значение индикатора _step1Elem.Indicator, но используете индикатор _indichElem.Indicator. Так правильно:
Даже если выполнить проект с Вашим кодом и без исправления указанной выше ошибки, то проект выполняется успешно. Есть предположение, что Вы используете разные версии модулей S# в разных сборках своего приложения, это может привести к исключению о котором Вы писали. Проверьте версии подключенных модулей, если ошибку не удастся устранить, пришлите архив с проектами.
Не помогло, в 132 строке все равно выдает ошибку.
Подключенные сборки проверяли? Пришлите архив проекта на электронную почту iv_qul@list.ru
После изменений, связанных с переопределением библиотек, индикатор не реагирует на параметр Length, везде берет значение 1.
Привожу в качестве примера код индикатора, который адекватно работает, в том числе принимает значение Length:
Замечу, что здесь наследуемый класс LengthIndicator<> взят из S#.
К сожалению и этот вариант не работает правильно, если посмотреть график, то коричневая линия это как раз Максимум за 2 бара плюс shift (она производная от розовой без смещения на верх), если присмотреться то вершины образуют макс только на одном баре и не продляются на второй, а вот желтая линия графика это правильная линия, она держит максимум 2 бара.
В последнем варианте величина Length просто поднимает или опускает график сильнее, но не влияет на базу расчета индикатора.
Правильно, свойство Length только хранит целочисленное значение и никак не влияет на работу индикатора, если Вы его не используете. Вам необходимо самостоятельно использовать это свойство (Length) для реализации алгоритма индикатора. Вы можете посмотреть код индикатора Highest, там в переопределенном методе OnProcess обеспечивается управление историческим буфером (Buffer) с использованием свойства Length.
По примеру Highest параметр LastValue не существует в текущем контексте.
Я полагаю, Вы используете старый вариант, попробуйте это:
Рекомендую пройти уроки C#, многое будет понятно, меньше будет подобных проблем.