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); }
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); }
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); }
//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); }
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); }
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); }