Добрый день. Пока индикаторы не сформированы я их не рисую. При старте стратегии и прогрузке и прорисовке графиков. Например при использовании Macd при попытке добавить на график данные (свечку, трэйды и индикатор ) выскакивает ошибка: "Получен новый индикатор без предварительного вызова Reset()." Хотя я пробовал при старте стратегии добавить по каждому индикатору Reset() Подскажете в чем может быть проблема, код наверное нужен? Постараюсь вырезать суть
Kommentare (10)
Anmelden oder Konto erstellen, Melden Sie sich an oder registrieren Sie sich, um einen Kommentar zu hinterlassen
Кажется проблема была в том, что я не в ту Area или ChartIndiElement передавал\привязывал данные
И еще раз здравствуйте, помогите пожалуйста. Не совсем понимаю почему возникает ошибка. А вы можете поделиться ПРАВИЛЬНЫМ примером рисования графика по комплексному индикатору, ну например macd.
Без явного объявления в ChartIndicatorElement. В другом посте говорили:
Я добавляю на график элемент: charts[N].AddElement(charts[N].Areas[0], strategy.ChartIndiElement,strategy._series, strategy.Indicator); ChartIndiElement[0]- пустой ChartIndicatorElement.
И подгружаю данные для отрисовки как то совсем извращенно: osnValue -значение индикатора макд.Process(candle);
Пожалуйста укажите текст ошибки.
ну у меня выпадала ошибка: "Получен новый индикатор без предварительного вызова Reset()." Но я разобрался, это было из-за того, что в отрисовке графика пока не готова сигнальная линия, я использовал общую индикатор macd а надо было ema.
Вот у меня и вопрос как правильно на график вывести macd с учетом не готовности индикатора
Пришлите пожалуйста проект, воспроизводящий вашу проблему.
Вот я вернулся к этой проблеме, так и не переварив. И так исходные, используется пример 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.BaseChartIndicatorPainter
1.#=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 и прочее Спасибо.
хм, после не хитрых манипуляций, получилось заставить отрисовывать так как задумано, но нужно задавать свойство IndicatorPainter. например indicatorElement1.IndicatorPainter =new StockSharp.Xaml.Charting.IndicatorPainters.MovingAverageConvergenceDivergenceSignalPainter(); или это я в обходной путь пошел?
Добрый день
Вызывается ли в вашем коде такой метод https://github.com/StockSharp/StockSharp/blob/master/Samples/Chart/SampleChart/MainWindow.xaml.cs#L115 Если нет, то добавьте его пожалуйста. Указывать рендерер для индикатора нужно только он не стандартный и требуется отрисовка более одной линии. Стандартные индикаторы имеют уже свои рендереры.
Суппер, спасибо!) Чувствую в моем коде есть еще много адских костылей, которых можно исправить тайными методами S#
Сейчас приходится использовать: if (osnValue.IsFormed) и не отрисовывать график вообще пока условие не выполнится. Иначе получаю ошибку: System.Collections.Generic.KeyNotFoundException: "Данный ключ отсутствует в словаре." И багу на графике прикрепил к посту. Подскажите пожалуйста.