protected override void FindMaxAndMinIndex() { if (coordinateType != CoordinateType.Percentage) { double max = double.MinValue, min = double.MaxValue; for (int i = iStartPosition; i < iStartPosition + points.Length; i++) { StockValuesItem item = Items[i] as StockValuesItem; if (!IsItemValid(Items[i])) { continue; } if (IsValueValid(item.Value)) { if (item.High > max) { iMaxPosition = i - iStartPosition; iMaxPositionInner = -1; max = item.High; } if (item.Low < min) { iMinPosition = i - iStartPosition; iMinPositionInner = -1; min = item.Low; } } for (int j = 0; j < item.Values.Count; j++) { var value = item.Values[j]; if (IsValueValid(value)) { if (value > max) { iMaxPosition = i - iStartPosition; iMaxPositionInner = j; max = value; } if (value < min) { iMinPosition = i - iStartPosition; iMinPositionInner = j; min = value; } } } } } else { FindMaxMin4PercentageCoordiate(); } }
public override ChartItem CopyAndAdjustItemValue(ChartItem item, CoordinateType coordinateType) { StockValuesItem sItem = item as StockValuesItem; if (sItem == null) { return(sItem); } StockValuesItem copyItem = null; if ((coordinateType == CoordinateType.Log10 && IsValueValid(sItem.Value))) { copyItem = new StockValuesItem() { Value = Math.Pow(10, sItem.Value), High = Math.Pow(10, sItem.High), Low = Math.Pow(10, sItem.Low), Open = Math.Pow(10, sItem.Open), CloseChange = sItem.CloseChange, Date = sItem.Date, ExtraData = sItem.ExtraData, Values = new List <double>(iValuePointLength), ValueChanges = sItem.ValueChanges != null ? new List <double>(iValuePointLength) : null }; } else { copyItem = new StockValuesItem() { Value = sItem.Value, High = sItem.High, Low = sItem.Low, Open = sItem.Open, CloseChange = sItem.CloseChange, Date = sItem.Date, ExtraData = sItem.ExtraData, Values = new List <double>(iValuePointLength), ValueChanges = sItem.ValueChanges != null ? new List <double>(iValuePointLength) : null }; } for (int j = 0; j < iValuePointLength; j++) { copyItem.Values.Add((coordinateType == CoordinateType.Log10 && IsValueValid(sItem.Values[j])) ? Math.Pow(10, sItem.Values[j]) : sItem.Values[j]); if (sItem.ValueChanges != null) { copyItem.ValueChanges.Add(sItem.ValueChanges[j]); } } return(copyItem); }
private StockValuesItem GetStartItem(int j) { StockValuesItem resukltItem = null; if (j == -1) { for (int i = iStartPosition; i < iStartPosition + points.Length; i++) { StockValuesItem item = Items[i] as StockValuesItem; if (!IsItemValid(Items[i])) { continue; } if (IsValueValid(item.Value)) { resukltItem = item; break; } } } else { for (int i = iStartPosition; i < iStartPosition + points.Length; i++) { StockValuesItem item = Items[i] as StockValuesItem; if (!IsItemValid(Items[i])) { continue; } if (IsValueValid(item.Values[j])) { resukltItem = item; break; } } } return(resukltItem); }
protected override void ConvertChartItemPow10(ChartItem item) { StockValuesItem sItem = item as StockValuesItem; if (IsValueValid(sItem.Value)) { sItem.Value = Math.Pow(10, sItem.Value); sItem.High = Math.Pow(10, sItem.High); sItem.Low = Math.Pow(10, sItem.Low); sItem.Open = Math.Pow(10, sItem.Open); } for (int j = 0; j < iValuePointLength; j++) { if (IsValueValid(sItem.Values[j])) { sItem.Values[j] = Math.Pow(10, sItem.Values[j]); } } }
public override ChartItem ConvertFrom(QueryItem queryItem) { StockValuesItem item = new StockValuesItem() { Date = queryItem.Date }; if (queryItem.Close != null) { item.Close = queryItem.Close.Value; } if (queryItem.High != null) { item.High = queryItem.High.Value; } if (queryItem.Low != null) { item.Low = queryItem.Low.Value; } if (queryItem.Open != null) { item.Open = queryItem.Open.Value; } if (queryItem.Close != null) { item.Value = queryItem.Close.Value; } if (queryItem.Values != null) { item.Values = new List <double>(queryItem.Values.Length); item.Values.AddRange(queryItem.Values); } return(item); }
private void FindMaxMin4PercentageCoordiate() { int iMax = -1; double max = double.MinValue, min = double.MaxValue; int[] iMaxs = new int[iValuePointLength]; for (int i = 0; i < iMaxs.Length; i++) { iMaxs[i] = -1; } double[] maxs = new double[iValuePointLength]; for (int i = 0; i < maxs.Length; i++) { maxs[i] = double.MinValue; } int iMin = -1; int[] iMins = new int[iValuePointLength]; for (int i = 0; i < iMins.Length; i++) { iMins[i] = -1; } double[] mins = new double[iValuePointLength]; for (int i = 0; i < mins.Length; i++) { mins[i] = double.MaxValue; } for (int i = iStartPosition; i < iStartPosition + points.Length; i++) { StockValuesItem item = Items[i] as StockValuesItem; if (!IsItemValid(Items[i])) { continue; } if (IsValueValid(item.Value)) { if (item.High > max) { iMax = i - iStartPosition; max = item.High; } if (item.Low < min) { iMin = i - iStartPosition; min = item.Low; } } for (int j = 0; j < item.Values.Count; j++) { var value = item.Values[j]; if (IsValueValid(value)) { if (value > maxs[j]) { iMaxs[j] = i - iStartPosition; maxs[j] = value; } if (value < mins[j]) { iMins[j] = i - iStartPosition; mins[j] = value; } } } } var itemStart = GetStartItem(-1); if (itemStart != null) { max = (max - itemStart.Value) / itemStart.Value; min = (min - itemStart.Value) / itemStart.Value; iMaxPosition = iMax; iMaxPositionInner = -1; iMinPosition = iMin; iMinPositionInner = -1; } for (int j = 0; j < iValuePointLength; j++) { itemStart = GetStartItem(j); var jMax = (maxs[j] - itemStart.Values[j]) / itemStart.Values[j]; var jMin = (mins[j] - itemStart.Values[j]) / itemStart.Values[j]; if (jMax > max) { max = jMax; iMaxPosition = iMaxs[j]; iMaxPositionInner = j; } if (jMin < min) { min = jMin; iMinPosition = iMins[j]; iMinPositionInner = j; } } }