Здравствуйте. Вопрос по добавлению своего индикатора на график. Индикатор создан на базе индикаторов из stocksharp.codeplex только у итогового изменено название с highest на step1, как библиотека классов. При добавлении его на график появляется ошибка - Неявное преобразование типа "Swing.Step1" в "StockSharp.Algo.Indicators.IIndicator" невозможно. Существует явное преобразование (возможно, отсутствует приведение). В каком направлении двигаться?
评论 (12)
登录 或 创建账户, 登录或注册以发表评论
Здравствуйте 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#, многое будет понятно, меньше будет подобных проблем.