Пример #1
0
        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);
            }
        }
Пример #2
0
        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);
        }