← Zurück

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

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

War dieses Thema hilfreich?

Thema teilen

Kommentare (10)

Anmelden oder Konto erstellen, Melden Sie sich an oder registrieren Sie sich, um einen Kommentar zu hinterlassen

ghost-mo
ghost-mo Autor

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

Support
ghost-mo
ghost-mo Autor

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

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

ghost-mo
ghost-mo Autor

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

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

Support
Support

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

ghost-mo
ghost-mo Autor

Вот я вернулся к этой проблеме, так и не переварив. И так исходные, используется пример 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.<CastIterator>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
ghost-mo Autor

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

Support
Support

Добрый день

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

ghost-mo
ghost-mo
ghost-mo Autor

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

ghost-mo
ghost-mo Autor

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