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

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


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




Спасибо:


ghost-mo

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


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

Спасибо: Support

ghost-mo

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


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

Без явного объявления в ChartIndicatorElement. В другом посте говорили:

Support: Добрый день График в легенде показывает параметры индикатора.

Я добавляю на график элемент: charts[N].AddElement(charts[N].Areas[0], strategy.ChartIndiElement,strategy._series, strategy.Indicator); 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() Полная:

System.NotSupportedException HResult=0x80131515 Сообщение = Указанный метод не поддерживается. Источник = StockSharp.Algo Трассировка стека: at StockSharp.Algo.Indicators.ComplexIndicatorValue.GetValue() at StockSharp.Xaml.Charting.IndicatorPainters.BaseChartIndicatorPainter1.#=zk9036Ro=(IList1 #=zFsAlfBA=, Int32 #=zPyNoDzM=) at StockSharp.Xaml.Charting.IndicatorPainters.BaseChartIndicatorPainter1.#=zP5ntCAXu3kc4HQPuH7ljQwM=.#=zydjJIQlML2tuONAbmw==(Int32 #=zycFec1E=) at System.Linq.Enumerable.WhereSelectEnumerableIterator2.MoveNext() at System.Linq.Enumerable.d__971.MoveNext() at System.Linq.Enumerable.<CastIterator>d__971.MoveNext() at #=zAuXtmwo_UFdzWVVSiImlM63HcRIkO9Rk3i2tbosrvzDDD1nU_YsPK9gA62La.#=z8SGlJVg=[TX1](IEnumerableEx1 #=z8Cqh5Eg=) at StockSharp.Xaml.Charting.IndicatorPainters.BaseChartIndicatorPainter1.DrawValues(IList1 vals, IChartElement element) at StockSharp.Xaml.Charting.IndicatorPainters.BaseChartIndicatorPainter1.Draw(ChartDrawData data) at #=zx24ajpn1eHsuu_VYWsSDObVHmCQkPa79lI0bsVbZ4_TXnui8LBYeXlVxIZKi.#=zQMvP4FWk4J6y(ChartDrawData #=zVByD5Xs=) at #=zx24ajpn1eHsuu_VYWsSDObVHmCQkPa79lI0bsVbZ4_TXnui8LBYeXlVxIZKi.#=z8SGlJVg=(ChartDrawData #=zVByD5Xs=) at StockSharp.Xaml.Charting.Chart.#=zgPLuF158PsVf.#=z8SGlJVg=(ChartDrawData #=zVByD5Xs=) at SampleConnection.ChartWindow.ProcessNewCandle(CandleSeries series, Candle candle) in E:\Users\Ghost-mo\Desktop\проджекты\Сергей\API_4.4.17_ru (1)\Samples\Connectors\SampleConnection\ChartWindow.xaml.cs:line 71 at StockSharp.Algo.Connector.ProcessCandleMessage(CandleMessage message) at StockSharp.Algo.Connector.OnProcessMessage(Message message)

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

Можно конечно руками разбить МАКД сигнал на составляющие, но это сложно в коде и плюс на графике все равно не будет его имени, если в элементе не указывать индикатор. .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/StockSharp/StockSharp/blob/master/Samples/Chart/SampleChart/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 KB (507)
Спасибо:


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

loading
clippy