Esempio n. 1
0
        private bool isCallBackDataValid(QuantEvent quantEvent)
        {
            //检查错误消息
            if (quantEvent.ErrCode < 0)
            {
                string msg = this._windapi.WErr(quantEvent.ErrCode, eLang.eCHN);
                MessageManager.GetInstance().Add(MessageType.Error, msg);
                return(false);
            }

            //解释字段
            if (quantEvent.quantData == null)
            {
                MessageManager.GetInstance().Add(MessageType.Error, "QuantEvent没有数据");
                return(false);
            }

            return(true);
        }
Esempio n. 2
0
        private int QuantCallback(QuantEvent quantEvent)
        {
            //switch (quantEvent.EventID)
            //{
            //    case 0: //initial
            //    case 1: //login
            //        break;
            //    case 2:
            //        break;
            //    default:
            //        break;
            //}
            //string s = System.String.Format("Received event: type={0}, err={1}, reqid={2}, evtid={3}.",
            //quantEvent.EventType, quantEvent.ErrCode, quantEvent.RequestID, quantEvent.EventID);

            //s += Environment.NewLine;

            //QuantData data = quantEvent.quantData;
            //if (data != null)
            //{
            //    int codenum = data.ArrWindCode.Length;
            //    int indnum = data.ArrWindFields.Length;
            //    int timenum = data.ArrDateTime.Length;
            //    s += "Windcode = " + Environment.NewLine;
            //    foreach (String code in data.ArrWindCode)
            //        s += "  " + code + Environment.NewLine;
            //    s += "Indicators = " + Environment.NewLine;
            //    foreach (String field in data.ArrWindFields)
            //        s += "  " + field + Environment.NewLine;
            //    s += "Times = " + Environment.NewLine;
            //    foreach (DateTime time in data.ArrDateTime)
            //        s += "  " + time.ToString() + Environment.NewLine;

            //s += "Data = " + Environment.NewLine;
            //s += MatrixDataToString(data.MatrixData, codenum, indnum, timenum);
            //s += Environment.NewLine;
            //}
            return(0);
        }
Esempio n. 3
0
        private static int QuantCallbackDataSet(QuantEvent quantEvent)
        {
            if (quantEvent.ErrCode != 0)
            {
                Debug.Print("获取期权列表时出错:" + quantEvent.ErrCode);
                return(-1);
            }

            if (quantEvent.quantData == null)
            {
                Debug.Print("期权列表没有数据:quantEvent.quantData == null");
                return(-1);
            }

            object[] data;
            data = (object[])quantEvent.quantData.MatrixData;

            List <Option> list = new List <Option>();

            for (int i = 0; i < data.Length / 13; i++)
            {
                string code = data[3 + i * 13].ToString();
                if (code.Contains("."))
                {
                    code = code.Substring(0, code.IndexOf("."));   //转换Wind代码和交易代码
                }
                Option o = new Option(code, Exchange.SH);
                o.underlying = data[0 + i * 13].ToString();
                o.name       = data[4 + i * 13].ToString();
                list.Add(o);
            }

            if (list.Count > 0 && !htOptionSets.Contains(list[0].underlying))
            {
                htOptionSets.Add(list[0].underlying, list);
            }

            return(0);
        }
Esempio n. 4
0
        //Wind callback
        public int QuantCallbackRealtime(QuantEvent quantEvent)
        {
            //public class QuantEvent
            //{
            //  public eWQErr ErrCode; // 错误码
            //  public long EventID; // 流水号
            //  public eWQEventType EventType; // Event类型
            //  public QuantData quantData; // 包含的数据
            //  public long RequestID; // 对应的request ID
            //  public int Version; // 版本号,以备今后扩充
            //  public QuantEvent();
            //}

            //public class QuantData
            //{
            //    public DateTime[] ArrDateTime;
            //    public string[] ArrWindCode;
            //    public string[] ArrWindFields;
            //    public object MatrixData;
            //    public QuantData();
            //}

            if (quantEvent.ErrCode != 0)
            {
                Debug.Print("更新订单簿时出错:" + quantEvent.ErrCode);
                return(-1);
            }

            if (quantEvent.quantData == null)
            {
                Debug.Print("订单簿没有数据:quantEvent.quantData == null");
                return(-1);
            }

            this.bidaskbook.Update(quantEvent.quantData.ArrWindCode[0], quantEvent.quantData.ArrWindFields, quantEvent.quantData.MatrixData);

            return(0);
        }
Esempio n. 5
0
        private int callBackOnSubscribeBidAskBook(QuantEvent quantEvent)
        {
            //////////////////////////////////
            //异步订阅:htSubscribeObject
            //////////////////////////////////
            if (!this.htSubscribe.Contains(quantEvent.RequestID))
            {
                MessageManager.GetInstance().Add(MessageType.Error, string.Format("没有找到订阅对象:id={0}", quantEvent.RequestID));
                return(-1);
            }

            if (!isCallBackDataValid(quantEvent))
            {
                return(-1);
            }

            BidAskBook babook = (BidAskBook)this.htSubscribe[quantEvent.RequestID];

            double[] data;
            data = (double[])quantEvent.quantData.MatrixData;

            #region 更新BidAskBook
            for (int i = 0; i < data.Length; i++)
            {
                string field = quantEvent.quantData.ArrWindFields[i].ToLower();
                switch (field)
                {
                case "rt_time":
                    babook.tradetime = data[i].ToString().Substring(0, 6);
                    break;

                case "rt_pre_settle":
                    babook.presettle = data[i];
                    break;

                case "rt_pre_close":
                    babook.preclose = data[i];
                    break;

                case "rt_open":
                    babook.open = data[i];
                    break;

                case "rt_high":
                    babook.high = data[i];
                    break;

                case "rt_low":
                    babook.low = data[i];
                    break;

                case "rt_last":
                    babook.last      = data[i];
                    babook.lasttrade = babook.last;
                    break;

                default:
                    int idx = -1;
                    if (field.IndexOf("rt_ask") == 0)
                    {
                        idx = Convert.ToInt16(field.Substring(6));
                        babook.ask[idx - 1] = data[i];
                    }
                    else if (field.IndexOf("rt_bid") == 0)
                    {
                        idx = Convert.ToInt16(field.Substring(6));
                        babook.bid[idx - 1] = data[i];
                    }
                    else if (field.IndexOf("rt_asize") == 0)
                    {
                        idx = Convert.ToInt16(field.Substring(8));
                        babook.asksize[idx - 1] = (int)data[i];
                    }
                    else if (field.IndexOf("rt_bsize") == 0)
                    {
                        idx = Convert.ToInt16(field.Substring(8));
                        babook.bidsize[idx - 1] = (int)data[i];
                    }
                    break;
                }
            }
            #endregion

            babook.DebugPrint();
            return((int)quantEvent.ErrCode);
        }
Esempio n. 6
0
        private int callBackOnGetOptionSet(QuantEvent quantEvent)
        {
            //////////////////////////////////
            //同步调用:htSyncWaiting
            //////////////////////////////////

            //检查等待列表,首次未找到则等待一会儿
            if (!this.htSyncWaiting.Contains(quantEvent.RequestID))
            {
                Thread.Sleep(100);
            }
            if (!this.htSyncWaiting.Contains(quantEvent.RequestID))
            {
                return(-1);
            }

            if (!isCallBackDataValid(quantEvent))
            {
                //解除主进程等待
                this.htSyncWaiting[quantEvent.RequestID] = quantEvent.ErrCode;

                //退出
                return(-1);
            }

            object[] data;
            data = (object[])quantEvent.quantData.MatrixData;

            List <Option> optionlist = new List <Option>();

            for (int i = 0; i < data.Length / 13; i++)
            {
                string underlyingwindcode = data[0 + i * 13].ToString();
                string underlyingname     = data[1 + i * 13].ToString();
                string optionwindcode     = data[3 + i * 13].ToString();
                //转换Wind代码和交易代码
                string   optioncode     = optionwindcode;
                Exchange exchange       = ASecurity.GetExchange(optionwindcode, ref optioncode);
                string   underlyingcode = underlyingwindcode;
                ASecurity.GetExchange(underlyingwindcode, ref underlyingcode);

                //读取期权信息
                Option o = new Option(optioncode, exchange);
                #region 期权信息
                o.name            = data[4 + i * 13].ToString();
                o.strike          = Convert.ToDouble(data[6 + i * 13]);
                o.exercisedate    = Utility.ConvertToDateTime(data[10 + i * 13].ToString(), "");
                o.daystoexercise  = (o.exercisedate - DateTime.Today).Days;
                o.yearstoexercise = o.daystoexercise / 365.0;
                string typename = data[8 + i * 13].ToString();
                if (typename == "认购")
                {
                    o.type = OptionType.CALL;
                }
                else
                {
                    o.type = OptionType.PUT;
                }
                #endregion

                #region 标的信息
                SecurityCategory category = ASecurity.GetSecurityCategory(underlyingcode, exchange);
                o.underlying      = ASecurity.GetSecurity(category, underlyingcode, exchange);
                o.underlying.name = underlyingname;
                #endregion

                optionlist.Add(o);
            }

            if (!htOptionSets.Contains(optionlist[0].underlying.code))
            {
                htOptionSets.Add(optionlist[0].underlying.code, optionlist);
            }
            else
            {
                htOptionSets[optionlist[0].underlying.code] = optionlist;
            }

            //解除主进程等待
            this.htSyncWaiting[quantEvent.RequestID] = quantEvent.ErrCode;
            return((int)quantEvent.ErrCode);
        }