/// <summary> /// 注销按钮点击 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void Button_Loginout_Click(object sender, EventArgs e) { ThostFtdcUserLogoutField pUserLogout = new ThostFtdcUserLogoutField(); pUserLogout.BrokerID = sBrokerID; pUserLogout.UserID = sUserID; if (this.TSS_MDLoginState.Text == "已连接") { CtpMDApi.ReqUserLogout(pUserLogout, nRequestID++); } if (this.TSS_TDLoginState.Text == "已连接") { CtpMDApi.ReqUserLogout(pUserLogout, nRequestID++); } CtpMDApi.Release(); CtpMDApi = null; CtpTDApi.Release(); CtpTDApi = null; this.TSS_MDConnState.Text = "已断开"; this.TSS_TDConnState.Text = "已断开"; this.TSS_MDLoginState.Text = "已断开"; this.TSS_TDLoginState.Text = "已断开"; Button_Loginout.Enabled = false; MemDB.CloseDB(); MemDB = null; }
/// <summary> /// 主窗体创建的时候相应动作 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void MainForm_Load(object sender, EventArgs e) { #region API初始化 CtpMDApi = new CTPMDAdapter(); CtpTDApi = new CTPTDAdapter(); sCtpMdApi = new CTPMDAPI(this); sCtpTdApi = new CTPTDAPI(this); #endregion #region 登录数据库初始化 this.InitConfig(); #endregion #region 消息队列初始化 Thread td_SendData = new Thread(SendData); td_SendData.IsBackground = true; td_SendData.Start(); #endregion 消息队列初始化 #region SQLite 入库线程启动 Queue_SQLite.bUse = true; Queue_SQLite.t = new Thread(sqlitedb); Queue_SQLite.t.IsBackground = true; Queue_SQLite.t.Start(this); #endregion SQLite 入库线程启动 #region GridView深度行情 string[] columnNames = { "品种名称", "交易日", "自然日", "时间", "毫秒", "最新价", "上次结算价", "昨收盘", "昨持仓", "开盘价", "最高价", "最低价", "数量", "成交金额", "持仓量", "收盘价", "结算价", "涨停板价", "跌停板价", "昨虚实度", "虚实度", "叫卖价", "叫卖量", "叫买价", "叫买量", "叫卖价2", "叫卖量2", "叫买价2", "叫买量2", "叫卖价3", "叫卖量3", "叫买价3", "叫买量3", "叫卖价4", "叫卖量4", "叫买价4", "叫买量4", "叫卖价5", "叫卖量5", "叫买价5", "叫买量5", "当日均价"}; foreach (string n in columnNames) { DT_DeepInstrumentRSP.Columns.Add(n, typeof(String)); } //建立主键 DataColumn[] cols = new DataColumn[] { DT_DeepInstrumentRSP.Columns["品种名称"] }; this.DT_DeepInstrumentRSP.PrimaryKey = cols; this.GridView_DeepInstrument.DataSource = this.DT_DeepInstrumentRSP; this.GridView_DeepInstrument.Columns["昨虚实度"].Visible = false; this.GridView_DeepInstrument.Columns["交易日"].Visible = false; this.GridView_DeepInstrument.Columns["最高价"].Visible = false; this.GridView_DeepInstrument.Columns["最低价"].Visible = false; this.GridView_DeepInstrument.Columns["开盘价"].Visible = false; this.GridView_DeepInstrument.Columns["虚实度"].Visible = false; this.GridView_DeepInstrument.Columns["结算价"].Visible = false; this.GridView_DeepInstrument.Columns["自然日"].Visible = false; this.GridView_DeepInstrument.Columns["上次结算价"].Visible = false; this.GridView_DeepInstrument.Columns["昨收盘"].Visible = false; this.GridView_DeepInstrument.Columns["昨持仓"].Visible = false; this.GridView_DeepInstrument.Columns["收盘价"].Visible = false; this.GridView_DeepInstrument.Columns["涨停板价"].Visible = false; this.GridView_DeepInstrument.Columns["跌停板价"].Visible = false; this.GridView_DeepInstrument.Columns["当日均价"].Visible = false; this.GridView_DeepInstrument.Columns["叫卖价2"].Visible = false; this.GridView_DeepInstrument.Columns["叫卖价3"].Visible = false; this.GridView_DeepInstrument.Columns["叫卖价4"].Visible = false; this.GridView_DeepInstrument.Columns["叫卖价5"].Visible = false; this.GridView_DeepInstrument.Columns["叫卖量2"].Visible = false; this.GridView_DeepInstrument.Columns["叫卖量3"].Visible = false; this.GridView_DeepInstrument.Columns["叫卖量4"].Visible = false; this.GridView_DeepInstrument.Columns["叫卖量5"].Visible = false; this.GridView_DeepInstrument.Columns["叫买价2"].Visible = false; this.GridView_DeepInstrument.Columns["叫买价3"].Visible = false; this.GridView_DeepInstrument.Columns["叫买价4"].Visible = false; this.GridView_DeepInstrument.Columns["叫买价5"].Visible = false; this.GridView_DeepInstrument.Columns["叫买量2"].Visible = false; this.GridView_DeepInstrument.Columns["叫买量3"].Visible = false; this.GridView_DeepInstrument.Columns["叫买量4"].Visible = false; this.GridView_DeepInstrument.Columns["叫买量5"].Visible = false; #endregion #region GridView可供订阅的品种 string[] columnNames1 = { "品种名称", "合约名称", "中文名", "交易所ID" }; foreach (string n in columnNames1) { DT_Instrument.Columns.Add(n, typeof(String)); } //建立主键 this.DT_Instrument.PrimaryKey = new DataColumn[] { DT_Instrument.Columns["品种名称"] }; this.GridView_RegistInstrument_Data.DataSource = this.DT_Instrument; this.GridView_RegistInstrument_Data.Columns["合约名称"].Visible = false; this.GridView_RegistInstrument_Data.Columns["交易所ID"].Visible = false; #endregion #region Gridview报单通知 string[] columnNames2 = { "报单引用", "会话标识", "前置机标识", "报单编号", "交易所", "品种名称", "买卖", "开平", "投机标志", "价格", "报单量", "今成交", "剩余量", "报单日期", "报单时间", "报单状态", "状态信息", "备注" }; foreach (string n in columnNames2) { this.DT_RtnOrder.Columns.Add(n, typeof(String)); } //建立主键 this.DT_RtnOrder.PrimaryKey = new DataColumn[] { DT_RtnOrder.Columns["报单引用"], DT_RtnOrder.Columns["会话标识"], DT_RtnOrder.Columns["前置机标识"] }; this.GridView_RtnOrder.DataSource = DT_RtnOrder; this.GridView_RtnOrder.Columns["会话标识"].Visible = false; this.GridView_RtnOrder.Columns["报单编号"].Visible = false; this.GridView_RtnOrder.Columns["报单引用"].Visible = false; this.GridView_RtnOrder.Columns["前置机标识"].Visible = false; this.GridView_RtnOrder.Columns["报单状态"].Visible = false; this.GridView_RtnOrder.Columns["交易所"].Visible = false; #endregion #region GridView持仓查询通知 string[] columnNames3 = { "合约代码", "开仓日期", "交易日", "持仓类型", "买卖", "数量", "开仓价", "投机标志", "成交编号", "结算编号", "成交类型", "昨结算价", "结算价", "平仓量", "平仓金额" }; foreach (string n in columnNames3) { this.DT_InvestorPositionDetail.Columns.Add(n, typeof(String)); } //建立主键 //this.sDT_InvestorPositionDetail.PrimaryKey = new DataColumn[] { sDT_InvestorPositionDetail.Columns["合约代码"] }; this.GridView_InvestorPositionDetail.DataSource = DT_InvestorPositionDetail; this.GridView_InvestorPositionDetail.Columns["结算编号"].Visible = false; this.GridView_InvestorPositionDetail.Columns["开仓日期"].Visible = false; this.GridView_InvestorPositionDetail.Columns["交易日"].Visible = false; this.GridView_InvestorPositionDetail.Columns["平仓量"].Visible = false; this.GridView_InvestorPositionDetail.Columns["平仓金额"].Visible = false; this.GridView_InvestorPositionDetail.Columns["成交编号"].Visible = false; #endregion }
/// <summary> /// 点击连接按钮连接前置机 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void Button_Connect_Click(object sender, EventArgs e) { sTDAddress = this.TextBox_TDADDRESS.Text; sMDAddress = this.TextBox_MDADDRESS.Text; sBrokerID = this.TextBox_BrokerID.Text; sUserID = this.TextBox_UserID.Text; sPassword = this.TextBox_PassWord.Text; sTableName = string.Empty; #region 数据库初始化 //内存数据库打开 if (this.radioButton_MemDB.Checked && MemDB == null) { MemDB = new SQLiteBase.SQLiteBase(); } else if (MemDB == null) { MemDB = new SQLiteBase.SQLiteBase("InstrmentDataBase.db"); } MemDB.OpenDB(); #endregion #region 交易初始化 CtpMDApi = new CTPMDAdapter("MDAPI", false); CtpMDApi.OnFrontConnected += new FrontConnected(sCtpMdApi.OnFrontConnected); CtpMDApi.OnFrontDisconnected += new FrontDisconnected(sCtpMdApi.OnFrontDisconnected); CtpMDApi.OnHeartBeatWarning += new HeartBeatWarning(sCtpMdApi.OnHeartBeatWarning); CtpMDApi.OnRspError += new RspError(sCtpMdApi.OnRspError); CtpMDApi.OnRspSubMarketData += new RspSubMarketData(sCtpMdApi.OnRspSubMarketData); CtpMDApi.OnRspUnSubMarketData += new RspUnSubMarketData(sCtpMdApi.OnRspUnSubMarketData); CtpMDApi.OnRspUserLogin += new RspUserLogin(sCtpMdApi.OnRspUserLogin); CtpMDApi.OnRspUserLogout += new RspUserLogout(sCtpMdApi.OnRspUserLogout); CtpMDApi.OnRtnDepthMarketData += new RtnDepthMarketData(sCtpMdApi.OnRtnDepthMarketData); //注册前置机 CtpMDApi.RegisterFront(sMDAddress); //初始化 CtpMDApi.Init(); #endregion 交易初始化 #region 行情初始化 CtpTDApi = new CTPTDAdapter("TDAPI"); CtpTDApi.OnFrontConnected += new FrontConnected(sCtpTdApi.OnFrontConnected); CtpTDApi.OnFrontDisconnected += new FrontDisconnected(sCtpTdApi.OnFrontDisconnected); CtpTDApi.OnHeartBeatWarning += new HeartBeatWarning(sCtpTdApi.OnHeartBeatWarning); CtpTDApi.OnRspError += new RspError(sCtpTdApi.OnRspError); CtpTDApi.OnRspUserLogin += new RspUserLogin(sCtpTdApi.OnRspUserLogin); CtpTDApi.OnRspOrderAction += new RspOrderAction(sCtpTdApi.OnRspOrderAction); CtpTDApi.OnRspOrderInsert += new RspOrderInsert(sCtpTdApi.OnRspOrderInsert); CtpTDApi.OnRspQryInstrument += new RspQryInstrument(sCtpTdApi.OnRspQryInstrument); CtpTDApi.OnRspQryInvestorPosition += new RspQryInvestorPosition(sCtpTdApi.OnRspQryInvestorPosition); CtpTDApi.OnRspQryInvestorPositionDetail += new RspQryInvestorPositionDetail(sCtpTdApi.OnRspQryInvestorPositionDetail); CtpTDApi.OnRspQryTradingAccount += new RspQryTradingAccount(sCtpTdApi.OnRspQryTradingAccount); CtpTDApi.OnRspSettlementInfoConfirm += new RspSettlementInfoConfirm(sCtpTdApi.OnRspSettlementInfoConfirm); CtpTDApi.OnRtnOrder += new RtnOrder(sCtpTdApi.OnRtnOrder); CtpTDApi.OnRtnTrade += new RtnTrade(sCtpTdApi.OnRtnTrade); //注册流 switch (comboBox_ResumeType.Text) { case "断线恢复": CtpTDApi.SubscribePublicTopic(EnumTeResumeType.THOST_TERT_RESUME); // 注册公有流 CtpTDApi.SubscribePrivateTopic(EnumTeResumeType.THOST_TERT_RESUME); // 注册私有流 break; case "当天全部": CtpTDApi.SubscribePublicTopic(EnumTeResumeType.THOST_TERT_RESTART); // 注册公有流 CtpTDApi.SubscribePrivateTopic(EnumTeResumeType.THOST_TERT_RESTART); // 注册私有流 break; default: CtpTDApi.SubscribePublicTopic(EnumTeResumeType.THOST_TERT_QUICK); // 注册公有流 CtpTDApi.SubscribePrivateTopic(EnumTeResumeType.THOST_TERT_QUICK); // 注册私有流 break; } //注册前置机 CtpTDApi.RegisterFront(sTDAddress); //初始化 CtpTDApi.Init(); #endregion 行情初始化 }