При добавление значения на график выпадает ошибка
Atom Ответить
05.09.2019


Добрый день.
Пока индикаторы не сформированы я их не рисую.
При старте стратегии и прогрузке и прорисовке графиков. Например при использовании Macd при попытке добавить на график данные (свечку, трэйды и индикатор ) выскакивает ошибка:
"Получен новый индикатор без предварительного вызова Reset()."
Хотя я пробовал при старте стратегии добавить по каждому индикатору Reset()
Подскажете в чем может быть проблема, код наверное нужен? Постараюсь вырезать суть



Спасибо:




10 Ответов
ghost-mo

Фотография
Курсы Благотворитель
Дата: 06.09.2019
Ответить


Кажется проблема была в том, что я не в ту Area или ChartIndiElement передавал\привязывал данные
Автор топика
Спасибо: Support

ghost-mo

Фотография
Курсы Благотворитель
Дата: 15.09.2019
Ответить


И еще раз здравствуйте, помогите пожалуйста.
Не совсем понимаю почему возникает ошибка.
А вы можете поделиться ПРАВИЛЬНЫМ примером рисования графика по комплексному индикатору, ну например macd.

Без явного объявления в ChartIndicatorElement. В другом посте говорили:
Support Перейти
Добрый день
График в легенде показывает параметры индикатора.


Я добавляю на график элемент:
charts[N].AddElement(charts[N].Areas[0], strategy.ChartIndiElement[I],strategy._series, strategy.Indicator[I]);
ChartIndiElement[0]- пустой ChartIndicatorElement.

И подгружаю данные для отрисовки как то совсем извращенно:
osnValue -значение индикатора макд.Process(candle);
Код

if (osnValue is ComplexIndicatorValue)
{
if (osnValue.IsFormed)
{
foreach (var indv in ((ComplexIndicatorValue)osnValue).InnerValues)//перебор по составной части результата
{
drZnach.Add(indv.Value);//для других расчетов дополнительно запоминаю
try
{
tData.Add(charts[(int)typeuslovia].Areas[1].Elements[drZnach.Count - 1], drZnach.Last());//в доп область добавляю.
}
catch (Exception ee)
{
// MessageBox.Show("Что то пошло не так: "+ee,"Ошибка");
}
}
else особый извращенный код для отрисовки графиков пока не сформировались графики.
Автор топика
Спасибо:

Support

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


Пожалуйста укажите текст ошибки.
Спасибо:

ghost-mo

Фотография
Курсы Благотворитель
Дата: 17.09.2019
Ответить


ну у меня выпадала ошибка: "Получен новый индикатор без предварительного вызова Reset()."
Но я разобрался, это было из-за того, что в отрисовке графика пока не готова сигнальная линия, я использовал общую индикатор macd а надо было ema.

Вот у меня и вопрос как правильно на график вывести macd с учетом не готовности индикатора
Автор топика
Спасибо:

Support

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


Пришлите пожалуйста проект, воспроизводящий вашу проблему.
Спасибо:

ghost-mo

Фотография
Курсы Благотворитель
Дата: 28.11.2019
Ответить


Вот я вернулся к этой проблеме, так и не переварив.
И так исходные, используется пример SampleConnection из ночной сборки апи за ноябрь.
я модифицировал класс ChartWindow (файл класса прилагаю)так ,что бы он отрисовывал индикатор MACD signal.
Но или я не понял ваше объяснение или что то не работает.
Получаю ошибку на методе draw: Указанный метод не поддерживается.
из трасировки видно ,что косяк тут:
at StockSharp.Algo.Indicators.ComplexIndicatorValue.GetValue[T]()
Полная:

Прошу посмотреть)

Можно конечно руками разбить МАКД сигнал на составляющие, но это сложно в коде и плюс на графике все равно не будет его имени, если в элементе не указывать индикатор.
.Add(indicatorElement1, ((ComplexIndicatorValue)osnValue).InnerValues.ToArray()[0].Value)
.Add(indicatorElement2, ((ComplexIndicatorValue)osnValue).InnerValues.ToArray()[1].Value);

Так же прошу передать кому то подумать, что куда то в индикатор запихнуть всякие рекомендованные нюансы их отрисовки: в зоне свеч, или в отдельной зоне, DrawStyle = ChartIndicatorDrawStyles.Histogram и прочее
Спасибо.
Автор топика
Спасибо:

ghost-mo

Фотография
Курсы Благотворитель
Дата: 29.11.2019
Ответить


хм, после не хитрых манипуляций, получилось заставить отрисовывать так как задумано, но нужно задавать свойство IndicatorPainter.
например indicatorElement1.IndicatorPainter =new StockSharp.Xaml.Charting.IndicatorPainters.MovingAverageConvergenceDivergenceSignalPainter();
или это я в обходной путь пошел?
Автор топика
Спасибо:

Support

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


Добрый день

Вызывается ли в вашем коде такой метод https://github.com/Stock.../MainWindow.xaml.cs#L115 Если нет, то добавьте его пожалуйста. Указывать рендерер для индикатора нужно только он не стандартный и требуется отрисовка более одной линии. Стандартные индикаторы имеют уже свои рендереры.
Спасибо: ghost-mo

ghost-mo

Фотография
Курсы Благотворитель
Дата: 30.11.2019
Ответить


Суппер, спасибо!)
Чувствую в моем коде есть еще много адских костылей, которых можно исправить тайными методами S#
Автор топика
Спасибо:

ghost-mo

Фотография
Курсы Благотворитель
Дата: 30.11.2019
Ответить


Сейчас приходится использовать: if (osnValue.IsFormed)
и не отрисовывать график вообще пока условие не выполнится.
Иначе получаю ошибку: System.Collections.Generic.KeyNotFoundException: "Данный ключ отсутствует в словаре."
И багу на графике прикрепил к посту.
Подскажите пожалуйста.
image3731.png 11,3KB (4)
Автор топика
Спасибо:


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

loading
clippy