private void idLoginMenuItem_Click(object sender, EventArgs e) { LoginForm login = new LoginForm(); login.TradeServerLogged += new EventHandler( (object s, EventArgs args) => { //可增加其他监听处理 //比如多账户:traderList.Add(s as CTPTrader); //处理登录成功事件 ShowMessage("交易账户登录成功,开始初始化信息..."); CTPTrader trader = s as CTPTrader; RegisterTraderResponseHandler(trader); trader.QueryInstrument(); trader.QueryOrder(); trader.QueryTrade(); trader.QueryInvestorPositionDetail(); trader.QueryTradingAccount(); //确认结算单 trader.SettlementInfoConfirm(); }); if (login.ShowDialog() == System.Windows.Forms.DialogResult.OK) { this.trader = login.Trader; this.quote = login.Quote; RegisterQuoteResponseHandler(this.quote); } }
/// <summary> /// 行情数据回调 /// </summary> /// <param name="pDepthMarketData">深度行情</param> private void OnRtnDepthMarketData(ref CThostFtdcDepthMarketDataField pDepthMarketData) { CTPMarketData marketData = new CTPMarketData() { InstrmentID = pDepthMarketData.InstrumentID, ExchangeID = pDepthMarketData.ExchangeInstID, LastPrice = ConvertToDecimal(pDepthMarketData.LastPrice), PreSettlementPrice = ConvertToDecimal(pDepthMarketData.PreSettlementPrice), PreClosePrice = ConvertToDecimal(pDepthMarketData.PreClosePrice), PreOpenInterest = ConvertToDecimal(pDepthMarketData.PreOpenInterest), OpenPrice = ConvertToDecimal(pDepthMarketData.OpenPrice), HighestPrice = ConvertToDecimal(pDepthMarketData.HighestPrice), LowestPrice = ConvertToDecimal(pDepthMarketData.LowestPrice), Volume = pDepthMarketData.Volume, Turnover = ConvertToDecimal(pDepthMarketData.Turnover), OpenInterest = ConvertToDecimal(pDepthMarketData.OpenInterest), ClosePrice = ConvertToDecimal(pDepthMarketData.ClosePrice), SettlementPrice = ConvertToDecimal(pDepthMarketData.SettlementPrice), UpperLimitPrice = ConvertToDecimal(pDepthMarketData.UpperLimitPrice), LowerLimitPrice = ConvertToDecimal(pDepthMarketData.LowerLimitPrice), BidPrice1 = ConvertToDecimal(pDepthMarketData.BidPrice1), BidPrice2 = ConvertToDecimal(pDepthMarketData.BidPrice2), BidPrice3 = ConvertToDecimal(pDepthMarketData.BidPrice3), BidPrice4 = ConvertToDecimal(pDepthMarketData.BidPrice4), BidPrice5 = ConvertToDecimal(pDepthMarketData.BidPrice5), BidVolume1 = pDepthMarketData.BidVolume1, BidVolume2 = pDepthMarketData.BidVolume2, BidVolume3 = pDepthMarketData.BidVolume3, BidVolume4 = pDepthMarketData.BidVolume4, BidVolume5 = pDepthMarketData.BidVolume5, AskPrice1 = ConvertToDecimal(pDepthMarketData.AskPrice1), AskPrice2 = ConvertToDecimal(pDepthMarketData.AskPrice2), AskPrice3 = ConvertToDecimal(pDepthMarketData.AskPrice3), AskPrice4 = ConvertToDecimal(pDepthMarketData.AskPrice4), AskPrice5 = ConvertToDecimal(pDepthMarketData.AskPrice5), AskVolume1 = pDepthMarketData.AskVolume1, AskVolume2 = pDepthMarketData.AskVolume2, AskVolume3 = pDepthMarketData.AskVolume3, AskVolume4 = pDepthMarketData.AskVolume4, AskVolume5 = pDepthMarketData.AskVolume5, }; if (marketData.LastPrice > 0 && marketData.PreClosePrice > 0) { marketData.AdvanceDeclineAmount = marketData.LastPrice - marketData.PreClosePrice; marketData.AdvanceDecline = Math.Round(marketData.AdvanceDeclineAmount / marketData.PreClosePrice, 4, MidpointRounding.AwayFromZero); } if (OnMarketDataChanged != null) { OnMarketDataChanged.Invoke(marketData); } }
void RegisterQuoteResponseHandler(CTPMarketData quote) { quote.DepthMarketDataResponse += new EventHandler <CTPEventArgs <CThostFtdcDepthMarketDataField> >(quote_DepthMarketDataResponse); }
private void OnData(CTPMarketData market) { Global.AddInfo("Ticker: {0}, Price: {1}, Volume: {2}", market.InstrmentID, market.LastPrice, market.Volume); }