修复Candlestick按昨收判断涨跌颜色,一字涨停/跌停显示不对的问题 (#362)

This commit is contained in:
monitor1394
2026-05-17 18:28:03 +08:00
parent 39514f82b3
commit 68cb18305d
3 changed files with 37 additions and 11 deletions

View File

@@ -151,7 +151,8 @@ namespace XCharts.Runtime
var close = serieData.GetCurrData(startDataIndex + 1, dataAddDuration, dataChangeDuration, yAxis.inverse, yMinValue, yMaxValue, unscaledTime);
var lowest = serieData.GetCurrData(startDataIndex + 2, dataAddDuration, dataChangeDuration, yAxis.inverse, yMinValue, yMaxValue, unscaledTime);
var heighest = serieData.GetCurrData(startDataIndex + 3, dataAddDuration, dataChangeDuration, yAxis.inverse, yMinValue, yMaxValue, unscaledTime);
var isRise = yAxis.inverse ? close <= open : close >= open;
var isBodyRise = yAxis.inverse ? close <= open : close >= open;
var isColorRise = IsColorRise(showData, i, startDataIndex, open, close);
var borderWidth = open == 0 ? 0f :
(itemStyle.borderWidth == 0 ? theme.serie.candlestickBorderWidth :
itemStyle.borderWidth);
@@ -173,7 +174,7 @@ namespace XCharts.Runtime
Vector3 plb, plt, prt, prb, top;
var offset = 2 * borderWidth;
if (isRise)
if (isBodyRise)
{
plb = new Vector3(pX + gap + offset, pY + offset);
plt = new Vector3(pX + gap + offset, pY + currHig - offset);
@@ -199,10 +200,10 @@ namespace XCharts.Runtime
// }
serie.context.dataPoints.Add(top);
serie.context.dataIndexs.Add(serieData.index);
var areaColor = isRise ?
var areaColor = isColorRise ?
itemStyle.GetColor(theme.serie.candlestickColor) :
itemStyle.GetColor0(theme.serie.candlestickColor0);
var borderColor = isRise ?
var borderColor = isColorRise ?
itemStyle.GetBorderColor(theme.serie.candlestickBorderColor) :
itemStyle.GetBorderColor0(theme.serie.candlestickBorderColor0);
var itemWidth = Mathf.Abs(prt.x - plb.x);
@@ -235,7 +236,7 @@ namespace XCharts.Runtime
UGL.DrawBorder(vh, center, itemWidth, itemHeight, 2 * borderWidth, borderColor, 0,
itemStyle.cornerRadius, isYAxis, 0.5f);
}
if (isRise)
if (isBodyRise)
{
UGL.DrawLine(vh, openCenterPos, lowPos, borderWidth, borderColor);
UGL.DrawLine(vh, closeCenterPos, heighPos, borderWidth, borderColor);
@@ -261,5 +262,17 @@ namespace XCharts.Runtime
chart.RefreshPainter(serie);
}
}
private static bool IsColorRise(List<SerieData> showData, int dataIndex, int startDataIndex, double open, double close)
{
if (dataIndex > 0)
{
var prevSerieData = showData[dataIndex - 1];
var prevStartDataIndex = prevSerieData.data.Count > 4 ? 1 : 0;
var prevClose = prevSerieData.GetData(prevStartDataIndex + 1);
return close >= prevClose;
}
return close >= open;
}
}
}