private static void GetNormalFormulaOutput(EMIndicator indicator, FmFormulaOutput output, int dataCount, int index, int selectIndex, MarketType2 Market, KLineCycle KLineCycle) { String nameTemp = output.fmOutput[index].name.Trim('\0'); List <float> outputList = new List <float>(0); double[] tempOutput = new double[1]; for (int j = 0; j < dataCount; j++) { IntPtr prt = new IntPtr(output.fmOutput[index].normaloutput.ToInt64() + sizeof(double) * j); Marshal.Copy(prt, tempOutput, 0, 1); float temp = Convert.ToSingle(tempOutput[0]); #region 数据特殊处理 if ((float.IsInfinity(temp) || float.IsNaN(temp)) && (indicator.IndicatorName == "VOL" || indicator.IndicatorName == "DDX" || indicator.IndicatorName == "DDY" || indicator.IndicatorName == "DDZ" || indicator.IndicatorName == "ZJBY" || indicator.IndicatorName == "ZJQS")) { temp = 0F; } //对财富通服务器成交量进行特殊处理 if (indicator.IndicatorName == "VOL") { temp = temp * 100F; } else if (indicator.IndicatorName == "ZJQS") { temp = temp / 10000F; } #endregion outputList.Add(temp); } using (QuoteDataStru quoteDataStru = new QuoteDataStru()) { quoteDataStru.QuoteName = nameTemp; quoteDataStru.QuoteDataList = outputList; if (index == selectIndex) { quoteDataStru.FlagQuoteDataSelected = true; } //根据FORMULA_LINETYPE获取对应的线型 quoteDataStru.QuotePicType = GetQuotePicType(output.fmOutput[index].dec.linetype); //为指标赋绘图颜色 if (Color.FromArgb((int)output.fmOutput[index].dec.clr) != Color.FromArgb(255, 255, 255)) { quoteDataStru.QuoteColor = Color.FromArgb(Convert.ToInt32(output.fmOutput[index].dec.clr)); } else { quoteDataStru.QuoteColor = IndicatorColors[index]; } indicator.QuoteData.Add(quoteDataStru); } }
private void GetFunctionFormulaOutput(EMIndicator indicator, FmFormulaOutput output, int dataCount, int index, int selectIndex) { QuoteDataStru quoteDataStru = new QuoteDataStru(); String nameTemp = output.fmOutput[index].name.Trim('\0'); quoteDataStru.QuoteName = nameTemp; try { IntPtr prt = new IntPtr(output.fmOutput[index].foutput.ToInt64()); FM_FORMULA_FUNCTION_OUTPUT outputtype = (FM_FORMULA_FUNCTION_OUTPUT)Marshal.PtrToStructure(prt, typeof(FM_FORMULA_FUNCTION_OUTPUT)); quoteDataStru.QuotePicType = GetFunctionQuotePicType(outputtype.type); switch (outputtype.type) { case FORMULA_FUNCTION_OUTPUT_TYPE.OUTPUT_TYPE_POLYLINE: PolyLineOutput tempPolyLine = new PolyLineOutput(); tempPolyLine.Price = new double[dataCount]; for (int j = 0; j < dataCount; j++) { IntPtr priceptr = new IntPtr(outputtype.polyline.price.ToInt64() + Marshal.SizeOf(typeof(double)) * j); tempPolyLine.Price[j] = Convert.ToDouble(Marshal.PtrToStructure(priceptr, typeof(double))); } quoteDataStru.QuoteFunctionList = tempPolyLine; break; case FORMULA_FUNCTION_OUTPUT_TYPE.OUTPUT_TYPE_DRAWLINE: DrawLineOutput tempDrawLine = new DrawLineOutput(); tempDrawLine.Price = new double[dataCount]; tempDrawLine.Expand = new double[dataCount]; for (int j = 0; j < dataCount; j++) { IntPtr priceptr = new IntPtr(outputtype.drawline.price.ToInt64() + Marshal.SizeOf(typeof(double)) * j); tempDrawLine.Price[j] = Convert.ToDouble(Marshal.PtrToStructure(priceptr, typeof(double))); IntPtr expandptr = new IntPtr(outputtype.drawline.expand.ToInt64() + Marshal.SizeOf(typeof(double)) * j); tempDrawLine.Expand[j] = Convert.ToDouble(Marshal.PtrToStructure(expandptr, typeof(double))); } quoteDataStru.QuoteFunctionList = tempDrawLine; break; case FORMULA_FUNCTION_OUTPUT_TYPE.OUTPUT_TYPE_DRAWKLINE: DrawKlineOutput tempDrawKLine = new DrawKlineOutput(); tempDrawKLine.High = new double[dataCount]; tempDrawKLine.Open = new double[dataCount]; tempDrawKLine.Low = new double[dataCount]; tempDrawKLine.Close = new double[dataCount]; for (int j = 0; j < dataCount; j++) { IntPtr highptr = new IntPtr(outputtype.drawkline.high.ToInt64() + Marshal.SizeOf(typeof(double)) * j); tempDrawKLine.High[j] = Convert.ToDouble(Marshal.PtrToStructure(highptr, typeof(double))); IntPtr openptr = new IntPtr(outputtype.drawkline.open.ToInt64() + Marshal.SizeOf(typeof(double)) * j); tempDrawKLine.Open[j] = Convert.ToDouble(Marshal.PtrToStructure(openptr, typeof(double))); IntPtr lowptr = new IntPtr(outputtype.drawkline.low.ToInt64() + Marshal.SizeOf(typeof(double)) * j); tempDrawKLine.Low[j] = Convert.ToDouble(Marshal.PtrToStructure(lowptr, typeof(double))); IntPtr closeptr = new IntPtr(outputtype.drawkline.close.ToInt64() + Marshal.SizeOf(typeof(double)) * j); tempDrawKLine.Close[j] = Convert.ToDouble(Marshal.PtrToStructure(closeptr, typeof(double))); } quoteDataStru.QuoteFunctionList = tempDrawKLine; break; case FORMULA_FUNCTION_OUTPUT_TYPE.OUTPUT_TYPE_STICKLINE: StickLineOutput tempStickLine = new StickLineOutput(); tempStickLine.Price1 = new double[dataCount]; tempStickLine.Price2 = new double[dataCount]; tempStickLine.Width = new double[dataCount]; tempStickLine.Empty = new double[dataCount]; for (int j = 0; j < dataCount; j++) { IntPtr price1ptr = new IntPtr(outputtype.stickline.price1.ToInt64() + Marshal.SizeOf(typeof(double)) * j); tempStickLine.Price1[j] = Convert.ToDouble(Marshal.PtrToStructure(price1ptr, typeof(double))); IntPtr price2ptr = new IntPtr(outputtype.stickline.price2.ToInt64() + Marshal.SizeOf(typeof(double)) * j); tempStickLine.Price2[j] = Convert.ToDouble(Marshal.PtrToStructure(price2ptr, typeof(double))); IntPtr widthptr = new IntPtr(outputtype.stickline.width.ToInt64() + Marshal.SizeOf(typeof(double)) * j); tempStickLine.Width[j] = Convert.ToDouble(Marshal.PtrToStructure(widthptr, typeof(double))); IntPtr emptyptr = new IntPtr(outputtype.stickline.empty.ToInt64() + Marshal.SizeOf(typeof(double)) * j); tempStickLine.Empty[j] = Convert.ToDouble(Marshal.PtrToStructure(emptyptr, typeof(double))); } quoteDataStru.QuoteFunctionList = tempStickLine; break; case FORMULA_FUNCTION_OUTPUT_TYPE.OUTPUT_TYPE_DRAWICON: DrawIconOutput tempDrawIcon = new DrawIconOutput(); tempDrawIcon.Price = new double[dataCount]; tempDrawIcon.Icon = new int[dataCount]; for (int j = 0; j < dataCount; j++) { IntPtr priceptr = new IntPtr(outputtype.drawicon.price.ToInt64() + Marshal.SizeOf(typeof(double)) * j); tempDrawIcon.Price[j] = Convert.ToDouble(Marshal.PtrToStructure(priceptr, typeof(double))); IntPtr iconptr = new IntPtr(outputtype.drawicon.icon.ToInt64() + Marshal.SizeOf(typeof(double)) * j); tempDrawIcon.Icon[j] = Convert.ToInt32(Marshal.PtrToStructure(iconptr, typeof(double))); } quoteDataStru.QuoteFunctionList = tempDrawIcon; break; case FORMULA_FUNCTION_OUTPUT_TYPE.OUTPUT_TYPE_DRAWTEXT: DrawTextOutput tempDrawText = new DrawTextOutput(); tempDrawText.Price = new double[dataCount]; for (int j = 0; j < dataCount; j++) { IntPtr priceptr = new IntPtr(outputtype.drawtext.price.ToInt64() + Marshal.SizeOf(typeof(double)) * j); tempDrawText.Price[j] = Convert.ToDouble(Marshal.PtrToStructure(priceptr, typeof(double))); } tempDrawText.Text = outputtype.drawtext.text; quoteDataStru.QuoteFunctionList = tempDrawText; break; case FORMULA_FUNCTION_OUTPUT_TYPE.OUTPUT_TYPE_DRAWNUMBER: DrawNumberOutput tempDrawNum = new DrawNumberOutput(); tempDrawNum.Price = new double[dataCount]; tempDrawNum.Number = new double[dataCount]; for (int j = 0; j < dataCount; j++) { IntPtr priceptr = new IntPtr(outputtype.drawnumber.price.ToInt64() + Marshal.SizeOf(typeof(double)) * j); tempDrawNum.Price[j] = Convert.ToDouble(Marshal.PtrToStructure(priceptr, typeof(double))); IntPtr numptr = new IntPtr(outputtype.drawnumber.number.ToInt64() + Marshal.SizeOf(typeof(double)) * j); tempDrawNum.Number[j] = Convert.ToDouble(Marshal.PtrToStructure(numptr, typeof(double))); } quoteDataStru.QuoteFunctionList = tempDrawNum; break; case FORMULA_FUNCTION_OUTPUT_TYPE.OUTPUT_TYPE_DRAWBAND: DrawBandOutput tempDrawBand = new DrawBandOutput(); tempDrawBand.Price1 = new double[dataCount]; tempDrawBand.Price2 = new double[dataCount]; tempDrawBand.BandColor = new Color[dataCount]; for (int j = 0; j < dataCount; j++) { IntPtr price1ptr = new IntPtr(outputtype.drawband.price1.ToInt64() + Marshal.SizeOf(typeof(double)) * j); tempDrawBand.Price1[j] = Convert.ToDouble(Marshal.PtrToStructure(price1ptr, typeof(double))); IntPtr price2ptr = new IntPtr(outputtype.drawband.price2.ToInt64() + Marshal.SizeOf(typeof(double)) * j); tempDrawBand.Price2[j] = Convert.ToDouble(Marshal.PtrToStructure(price2ptr, typeof(double))); IntPtr bandcolorptr = new IntPtr(outputtype.drawband.color.ToInt64() + Marshal.SizeOf(typeof(double)) * j); tempDrawBand.BandColor[j] = Color.FromArgb(Convert.ToInt32(Marshal.PtrToStructure(bandcolorptr, typeof(double)))); } quoteDataStru.QuoteFunctionList = tempDrawBand; break; case FORMULA_FUNCTION_OUTPUT_TYPE.OUTPUT_TYPE_DRAWFLOATRGN: DrawFloatRGNOutput tempFloatRGN = new DrawFloatRGNOutput(); tempFloatRGN.Width = new double[dataCount]; tempFloatRGN.Price = new double[dataCount]; for (int i = 0; i < dataCount; i++) { IntPtr widthptr = new IntPtr(outputtype.drawfloatrgn.width.ToInt64() + Marshal.SizeOf(typeof(double)) * i); tempFloatRGN.Width[i] = Convert.ToDouble(Marshal.PtrToStructure(widthptr, typeof(double))); IntPtr priceptr = new IntPtr(outputtype.drawfloatrgn.price.ToInt64() + Marshal.SizeOf(typeof(double)) * i); tempFloatRGN.Price[i] = Convert.ToDouble(Marshal.PtrToStructure(priceptr, typeof(double))); } tempFloatRGN.N = outputtype.drawfloatrgn.n; tempFloatRGN.para = new FloatRGNPara[outputtype.drawfloatrgn.n]; for (int i = 0; i < outputtype.drawfloatrgn.n; i++) { FloatRGNPara para = new FloatRGNPara(); para.Cond = new int[dataCount]; para.FloatRGNColor = new Color[dataCount]; for (int j = 0; j < dataCount; j++) { try { IntPtr conPtr = new IntPtr(outputtype.drawfloatrgn.para[i].cond.ToInt64() + Marshal.SizeOf(typeof(double)) * j); para.Cond[j] = Convert.ToInt32(Marshal.PtrToStructure(conPtr, typeof(double))); IntPtr colorPtr = new IntPtr(outputtype.drawfloatrgn.para[i].color.ToInt64() + Marshal.SizeOf(typeof(double)) * j); para.FloatRGNColor[j] = Color.FromArgb(Convert.ToInt32(Marshal.PtrToStructure(colorPtr, typeof(double)))); } catch (Exception e) { } } tempFloatRGN.para[i] = para; } quoteDataStru.QuoteFunctionList = tempFloatRGN; break; case FORMULA_FUNCTION_OUTPUT_TYPE.OUTPUT_TYPE_DRAWTWR: DrawTWROutput tempDrawTWR = new DrawTWROutput(); tempDrawTWR.data = new DrawTWRData[dataCount]; for (int i = 0; i < dataCount; i++) { DrawTWRData tempdata = new DrawTWRData(); DRAWTWR_DATA tempRawData; IntPtr rawdataptr = new IntPtr(outputtype.drawtwr.data.ToInt64() + Marshal.SizeOf(typeof(DRAWTWR_DATA)) * i); tempRawData = (DRAWTWR_DATA)Marshal.PtrToStructure(rawdataptr, typeof(DRAWTWR_DATA)); tempdata.Up = Convert.ToChar(tempRawData.up); tempdata.Top = tempRawData.top; tempdata.Center = tempRawData.center; tempdata.Bottom = tempRawData.bottom; tempDrawTWR.data[i] = tempdata; } quoteDataStru.QuoteFunctionList = tempDrawTWR; break; case FORMULA_FUNCTION_OUTPUT_TYPE.OUTPUT_TYPE_DRAWFILLRGN: FillRGNOutput tempFillRGN = new FillRGNOutput(); tempFillRGN.Price1 = new double[dataCount]; tempFillRGN.Price2 = new double[dataCount]; tempFillRGN.FillRGNColor = new Color[dataCount]; for (int i = 0; i < dataCount; i++) { IntPtr price1ptr = new IntPtr(outputtype.drawfillrgn.price1.ToInt64() + Marshal.SizeOf(typeof(double)) * i); tempFillRGN.Price1[i] = Convert.ToDouble(Marshal.PtrToStructure(price1ptr, typeof(double))); IntPtr price2ptr = new IntPtr(outputtype.drawfillrgn.price2.ToInt64() + Marshal.SizeOf(typeof(double)) * i); tempFillRGN.Price2[i] = Convert.ToDouble(Marshal.PtrToStructure(price2ptr, typeof(double))); IntPtr colorptr = new IntPtr(outputtype.drawfillrgn.color.ToInt64() + Marshal.SizeOf(typeof(double)) * i); tempFillRGN.FillRGNColor[i] = Color.FromArgb(Convert.ToInt32(Marshal.PtrToStructure(colorptr, typeof(double)))); } tempFillRGN.N = outputtype.drawfillrgn.n; tempFillRGN.Para = new FillRGNPara[outputtype.drawfillrgn.n]; for (int i = 0; i < outputtype.drawfillrgn.n; i++) { FillRGNPara para = new FillRGNPara(); para.Cond = new int[dataCount]; para.FillRGNColor = new Color[dataCount]; for (int j = 0; j < dataCount; j++) { IntPtr conPtr = new IntPtr(outputtype.drawfillrgn.para[i].cond.ToInt64() + Marshal.SizeOf(typeof(double)) * j); para.Cond[j] = Convert.ToInt32(Marshal.PtrToStructure(conPtr, typeof(double))); IntPtr colorPtr = new IntPtr(outputtype.drawfillrgn.para[i].color.ToInt64() + Marshal.SizeOf(typeof(double)) * j); para.FillRGNColor[j] = Color.FromArgb(Convert.ToInt32(Marshal.PtrToStructure(colorPtr, typeof(double)))); } tempFillRGN.Para[i] = para; } quoteDataStru.QuoteFunctionList = tempFillRGN; break; case FORMULA_FUNCTION_OUTPUT_TYPE.OUTPUT_TYPE_DRAWGBK: DrawGBKOutput tempGBK = new DrawGBKOutput(); tempGBK.DrawGBKColor = new Color[dataCount]; for (int j = 0; j < dataCount; j++) { IntPtr gbkcolorptr = new IntPtr(outputtype.drawgbk.color.ToInt64() + Marshal.SizeOf(typeof(double)) * j); tempGBK.DrawGBKColor[j] = Color.FromArgb(Convert.ToInt32(Marshal.PtrToStructure(gbkcolorptr, typeof(double)))); } quoteDataStru.QuoteFunctionList = tempGBK; break; } } catch (Exception e) { } if (index == selectIndex) { quoteDataStru.FlagQuoteDataSelected = true; } indicator.QuoteData.Add(quoteDataStru); }