private void button8_Click(object sender, EventArgs e) { if (TraderApi != null) { TraderApi.Dispose(); TraderApi = null; } }
private void button8_Click(object sender, EventArgs e) { if (TraderApi != null) { TraderApi.Dispose(); TraderApi = null; Console.WriteLine("Disconnected."); } }
void TraderApi_OnRspEvent(object sender, OnRspEventArgs e) { bool err = IsError(e.RspInfo, e.EventType.ToString()); switch (e.EventType) { case EnumOnRspType.OnRspAuthenticate: if (err) { Console.WriteLine("认证失败!!!"); } else { Console.WriteLine("认证成功!!!"); if (chkSubmitUserSystemInfo.Checked) { RegSystemInfo(); } ReqUserLogin(); } break; case EnumOnRspType.OnRspUserLogin: if (err) { Console.WriteLine("登录失败"); } else { Console.WriteLine("登录成功"); var fld = Conv.P2S <ThostFtdcRspUserLoginField>(e.Param); Console.WriteLine("TradingDay is " + fld.TradingDay); Console.WriteLine("CTP Version " + FtdcTdAdapter.GetApiVersion()); ThostFtdcSettlementInfoConfirmField req = new ThostFtdcSettlementInfoConfirmField(); req.BrokerID = this.txtBrokerID.Text; req.InvestorID = this.txtUserID.Text; TraderApi.ReqSettlementInfoConfirm(req, ++this.iRequestID); } break; case EnumOnRspType.OnRspQryInstrument: if (e.Param != IntPtr.Zero) { var fld = Conv.P2S <ThostFtdcInstrumentField>(e.Param); Console.WriteLine("=====> {0}, {1}, isLast {2}", e.EventType, fld.InstrumentID, e.IsLast); } break; } }
void RegSystemInfo() { byte[] buffer = new byte[512]; int nLen = 0; int res = FtdcTdAdapter.CTP_GetSystemInfo(buffer, ref nLen); if (res != 0 || nLen == 0) { Console.WriteLine("CTP_GetSystemInfo() 失败, 错误代码 {0}, nLen = {1}", res, nLen); return; } var field = new ThostFtdcUserSystemInfoField(); field.BrokerID = txtBrokerID.Text; field.UserID = txtUserID.Text; Array.Copy(buffer, 0, field.ClientSystemInfo, 0, nLen); field.ClientPublicIP = "127.0.0.1"; field.ClientIPPort = 65535; field.ClientLoginTime = "11:28:28"; field.ClientAppID = "Q7"; int result = TraderApi.RegisterUserSystemInfo(field); if (result == 0) { Console.WriteLine("RegisterUserSystemInfo() 成功"); } else { Console.WriteLine("RegisterUserSystemInfo() 失败, 错误代码 {0}", result); } /* RegisterUserSystemInfo 错误代码 * 0 正确 * -1 字段长度不对 * -2 非CTP采集的终端信息 * -3 当前终端类型非多对多中继 * -5 字段中存在非法字符或者长度超限 * -6 采集结果字段错误 */ }
private void button5_Click(object sender, EventArgs e) { if (TraderApi == null) { if (CheckInput() == false) { return; } TraderApi = new FtdcTdAdapter(""); TraderApi.OnFrontEvent += TraderApi_OnFrontEvent; TraderApi.OnRspEvent += TraderApi_OnRspEvent; TraderApi.OnRtnEvent += TraderApi_OnRtnEvent; TraderApi.OnErrRtnEvent += TraderApi_OnErrRtnEvent; TraderApi.SubscribePublicTopic(EnumTeResumeType.THOST_TERT_QUICK); TraderApi.SubscribePrivateTopic(EnumTeResumeType.THOST_TERT_QUICK); TraderApi.RegisterFront(txtFrontTD.Text); TraderApi.Init(); } }
public void Init() { if (FrontAddrs == null || FrontAddrs.Length == 0) { HandleErrorInternal("CTP交易输入前置机地址不能为空!"); return; } if (trader == null) { trader = new FtdcTdAdapter(".\\trade"); } // 创建trade目录存放流文件,避免与行情流文件冲突 // 回调函数 trader.OnFrontEvent += TraderApi_OnFrontEvent; trader.OnRspEvent += TraderApi_OnRspEvent; trader.OnErrRtnEvent += TraderApi_OnErrRtnEvent; trader.OnRtnEvent += TraderApi_OnRtnEvent; // 订阅私有流 trader.SubscribePrivateTopic(EnumTeResumeType.THOST_TERT_RESUME); // 订阅公共流 trader.SubscribePublicTopic(EnumTeResumeType.THOST_TERT_RESUME); try { foreach (var frontAddr in FrontAddrs) { trader.RegisterFront(frontAddr); } trader.Init(); } catch (Exception ex) { HandleErrorInternal("CTP连接前置机发生错误:" + ex.Message); } }
private void Form1_Load(object sender, EventArgs e) { Console.WriteLine("Platform is {0}", Environment.Is64BitProcess ? "x64" : "x86"); Console.WriteLine("TradeApi version {0}", FtdcTdAdapter.GetApiVersion()); Console.WriteLine("DataApi version {0}", FtdcMdAdapter.GetApiVersion()); }