internal override void OnReceiveTrData(_DKHOpenAPIEvents_OnReceiveTrDataEvent e) { var temp = base.OnReceiveTrData(single, multiple, e); if (temp.Item1 != null) { for (int i = 0; i < temp.Item1.Length; i++) { SendMessage(single[i], temp.Item1[i]); } } while (temp.Item2?.Count > 0) { var futures = temp.Item2.Dequeue(); if (int.TryParse(futures[4], out int purchase) && int.TryParse(futures[5], out int current)) { var param = new SendSecuritiesAPI(new string[] { futures[0], futures[1].Split('F')[0].Trim().Replace("_", string.Empty), futures[2], string.Empty, futures[3], futures[0][1].Equals('0') ? futures[4].Insert(futures[4].Length - 2, ".") : futures[4].Remove(futures[4].Length - 2, 2), futures[0][1].Equals('0') ? futures[5].Insert(futures[5].Length - 2, ".") : futures[5].Remove(futures[5].Length - 2, 2), string.Empty, futures[6], ((current / (double)purchase - 1) * 0x64).ToString("F5") }); if (param.Convey is Tuple <string, string, int, dynamic, dynamic, long, double> balance && Connect.HoldingStock.TryGetValue(balance.Item1, out Holding hs)) { hs.Code = balance.Item1; hs.Quantity = balance.Item3; hs.Purchase = futures[0][1].Equals('0') ? (double)balance.Item4 : (int)balance.Item4; hs.Current = futures[0][1].Equals('0') ? (double)balance.Item5 : (int)balance.Item5; hs.Revenue = balance.Item6; hs.Rate = balance.Item3 > 0 ? balance.Item7 : -balance.Item7; Connect.HoldingStock[balance.Item1] = hs; } Send?.Invoke(this, param); } } }
internal override void OnReceiveTrData(_DKHOpenAPIEvents_OnReceiveTrDataEvent e) { var order = API.GetCommData(e.sTrCode, e.sRQName, 0, ordNo); Send?.Invoke(this, new SendSecuritiesAPI(order)); SendMessage(order, e.sScrNo); }
internal override void OnReceiveTrData(_DKHOpenAPIEvents_OnReceiveTrDataEvent e) { var temp = base.OnReceiveTrData(single, e.sRQName.Equals(name) ? multi : null, e); var code = e.sRQName.Split(';')[1]; if (temp.Item1 != null) { if (code.StartsWith("2") || code.StartsWith("3")) { Send?.Invoke(this, new SendSecuritiesAPI(code, temp.Item1[0x48].Trim(), temp.Item1[0x3F].Trim().Substring(2), temp.Item1[0x33].Trim(), 0)); } else if (code[0].Equals('1')) { SendMessage(temp.Item1[0x48].Trim(), Count.ToString("N0")); } } while (temp.Item2?.Count > 0) { foreach (var pop in temp.Item2.Dequeue()) { SendMessage(e.sRQName, pop); } } }
private void onReceiveTrData(object sender, _DKHOpenAPIEvents_OnReceiveTrDataEvent e) { //MessageBox.Show("요청 결과가 전달되었습니다."); MessageBox.Show(e.sRQName + " ||| " + e.sTrCode); if (e.sRQName.Equals("계좌잔고평가내역")) { int 변수총매입금액 = int.Parse(axKHOpenAPI1.GetCommData(e.sTrCode, e.sRQName, 0, "총매입금액")); int 변수추정예탁자산 = int.Parse(axKHOpenAPI1.GetCommData(e.sTrCode, e.sRQName, 0, "추정예탁자산")); int 변수총평가금액 = int.Parse(axKHOpenAPI1.GetCommData(e.sTrCode, e.sRQName, 0, "총평가금액")); int 변수총평가손익금액 = int.Parse(axKHOpenAPI1.GetCommData(e.sTrCode, e.sRQName, 0, "총평가손익금액")); 예수금.Text = String.Format("{0:0,0}", 변수추정예탁자산); 총매입금.Text = String.Format("{0:0,0}", 변수총매입금액); 총평가금.Text = String.Format("{0:0,0}", 변수총평가금액); 총손익금.Text = String.Format("{0:0,0}", 변수총평가손익금액); //멀티 데이터 int count = axKHOpenAPI1.GetRepeatCnt(e.sTrCode, e.sRQName); for (int i = 0; i < count; i++) { string 종목번호1 = axKHOpenAPI1.GetCommData(e.sTrCode, e.sRQName, i, "종목번호").TrimStart('0'); string 종목명1 = axKHOpenAPI1.GetCommData(e.sTrCode, e.sRQName, i, "종목명").Trim(); double 보유수량1 = double.Parse(axKHOpenAPI1.GetCommData(e.sTrCode, e.sRQName, i, "보유수량")); double 매입가1 = double.Parse(axKHOpenAPI1.GetCommData(e.sTrCode, e.sRQName, i, "매입가")); double 현재가1 = double.Parse(axKHOpenAPI1.GetCommData(e.sTrCode, e.sRQName, i, "현재가")); double 평가손익1 = double.Parse(axKHOpenAPI1.GetCommData(e.sTrCode, e.sRQName, i, "평가손익")); double 수익률1 = double.Parse(axKHOpenAPI1.GetCommData(e.sTrCode, e.sRQName, i, "수익률(%)")); StockBalance stockBalance = new StockBalance(종목번호1, 종목명1, 보유수량1, 매입가1, 현재가1, 평가손익1, 수익률1); stockBalances.Add(stockBalance); } balanceDataGridView.DataSource = stockBalances; } }
public void UpdateTrData(_DKHOpenAPIEvents_OnReceiveTrDataEvent trEvent) { switch (trEvent.sRQName) { case "주식일봉차트조회": case "주식주봉차트조회": case "주식월봉차트조회": case "주식분봉차트조회": case "주식틱봉차트조회": SetChartInfo(trEvent.sTrCode, trEvent.sRQName); break; case "주식기본정보요청": SetBaseStockInfo(trEvent.sTrCode, trEvent.sRQName); break; case "주식호가정보요청": SetOrderBookInfo(trEvent.sTrCode, trEvent.sRQName); break; case "계좌평가현황요청": SetAssetListView(trEvent.sTrCode, trEvent.sRQName); break; case "조건검색종목": SetConditionStocks(trEvent); break; //case "계좌평가잔고내역요청": // SetTotalAssetView(trEvent.sTrCode, trEvent.sRQName); // break; } }
internal override void OnReceiveTrData(_DKHOpenAPIEvents_OnReceiveTrDataEvent e) { var temp = base.OnReceiveTrData(single, e.sRQName.Equals(name) ? multi : null, e); var code = e.sRQName.Split(';')[1]; if (temp.Item1 is not null) { Send?.Invoke(this, new SendSecuritiesAPI(code, temp.Item1[0x48].Trim(), temp.Item1[0x3F].Trim()[2..], temp.Item1[0x33].Trim(), 0));
internal override void OnReceiveTrData(_DKHOpenAPIEvents_OnReceiveTrDataEvent e) { var temp = base.OnReceiveTrData(single, null, e); if (temp.Item1 != null) { Send?.Invoke(this, new SendSecuritiesAPI(temp.Item1[0x12], temp.Item1[7])); } }
internal override void OnReceiveTrData(_DKHOpenAPIEvents_OnReceiveTrDataEvent e) { var response = base.OnReceiveTrData(null, multiple, e); if (response.Item2 is Queue <string[]> && response.Item2.Count > 0) { Send?.Invoke(this, new SendSecuritiesAPI(response.Item2, name)); } }
private static void AxKHOpenAPI1_OnReceiveTrData(object sender, _DKHOpenAPIEvents_OnReceiveTrDataEvent e) { Debug.Info(e.sRQName + ":" + e.sTrCode + ":" + e.sMessage); if (_trs.TryGetValue(e.sTrCode, out TrCallback callback)) { _trs.Remove(e.sTrCode); callback(e); } }
internal override void OnReceiveTrData(_DKHOpenAPIEvents_OnReceiveTrDataEvent e) { var param = base.OnReceiveTrData(null, multi, e).Item2; while (param.Count > 0) { var str = param.Dequeue(); var code = str[0].Trim(); Send?.Invoke(this, new SendSecuritiesAPI(code, str[1].Trim(), API.GetMasterStockState(str[0].Trim()), str[3].Trim(), API.KOA_Functions(info, code).Split(';')[0].Contains(market) ? 1 : 2)); } }
internal override void OnReceiveTrData(_DKHOpenAPIEvents_OnReceiveTrDataEvent e) { var temp = base.OnReceiveTrData(opSingle, opMultiple, e); if (temp.Item1 != null) { Send?.Invoke(this, new SendSecuritiesAPI(temp.Item1[15], temp.Item1[2], temp.Item1[7])); } if (temp.Item2 != null && temp.Item2.Count > 0) { Send?.Invoke(this, new SendSecuritiesAPI(temp.Item2)); } }
private void API_OnReceiveTrDataMulti <TOut>(object sender, _DKHOpenAPIEvents_OnReceiveTrDataEvent e) where TOut : GatherTickData.Presenters.EntityBase { Console.WriteLine("[OnReceivTrData:e.sRQName]=" + e.sRQName); Console.WriteLine("[OnReceivTrData:e.sTrCode]=" + e.sTrCode); if (e.sRQName == "주식기본정보요청") { Console.WriteLine(" [싱글데이터][종목명]: " + APIContext.API.GetCommData(e.sTrCode, e.sRQName, 0, "종목명").Trim()); Console.WriteLine(" [싱글데이터][액면가]: " + APIContext.API.GetCommData(e.sTrCode, e.sRQName, 0, "액면가").Trim()); } //OPT10001_주식기본정보 result = APIContext.API.GetSingleData<OPT10001_주식기본정보>(); // GetSingleData 수정 // e를 파라미터로 받아서, GetSingleData안에서 e.name이나 이런걸로 type으로 outputinstance를 생성하여 entity 매핑!!!!!!!! MultiOutput = APIContext.API.GetMultiData <TOut>() as IList <EntityBase>; //_autoResetEvent.Set(); _asyncWait.Set(); }
public void OnReceiveTrDataEventHandler(object sender, _DKHOpenAPIEvents_OnReceiveTrDataEvent e) { if (OnReceiveTrDataUri != null) { JObject body = new JObject(); body["sScrNo"] = e.sScrNo; body["sRQName"] = e.sRQName; body["sTrCode"] = e.sTrCode; body["sRecordName"] = e.sRecordName; body["sPrevNext"] = e.sPrevNext; body["nDataLength"] = e.nDataLength; body["sErrorCode"] = e.sErrorCode; body["sMessage"] = e.sMessage; body["sSplmMsg"] = e.sSplmMsg; HttpContent content = new StringContent(body.ToString(), Encoding.UTF8, "application/json"); client.PostAsync(OnReceiveTrDataUri, content); } }
internal override void OnReceiveTrData(_DKHOpenAPIEvents_OnReceiveTrDataEvent e) { var temp = base.OnReceiveTrData(single, multiple, e); if (temp.Item1 is not null) { Send?.Invoke(this, new SendSecuritiesAPI(single, temp.Item1)); } if (temp.Item2 is not null && temp.Item2.Count > 0) { var queue = new Queue <ShareInvest.Catalog.OpenAPI.OPW00004>(); while (temp.Item2.TryDequeue(out string[] dequeue)) { if (int.TryParse(dequeue[0xE], out int sales) && int.TryParse(dequeue[0xD], out int pur) && int.TryParse(dequeue[0xC], out int pre_sales) && int.TryParse(dequeue[0xB], out int pre_purchase) && long.TryParse(dequeue[0xA], out long balance) && long.TryParse(dequeue[9], out long purchase) && double.TryParse(dequeue[7].Insert(dequeue[7].Length - 6, "."), out double rate) && long.TryParse(dequeue[6], out long amount) && long.TryParse(dequeue[5], out long evaluation) && int.TryParse(dequeue[4], out int current) && int.TryParse(dequeue[3], out int average) && int.TryParse(dequeue[2], out int quantity)) { queue.Enqueue(new ShareInvest.Catalog.OpenAPI.OPW00004 { Account = Value.Split(';')[0], Code = dequeue[0], Name = dequeue[1], Quantity = quantity, Average = average, Current = current, Evaluation = evaluation, Amount = amount, Rate = rate, Loan = dequeue[8], Purchase = purchase, Balance = balance, PreviousPurchaseQuantity = pre_purchase, PreviousSalesQuantity = pre_sales, PurchaseQuantity = pur, SalesQuantity = sales }); } } if (queue.Count > 0) { Send?.Invoke(this, new SendSecuritiesAPI(queue)); } } }
internal override void OnReceiveTrData(_DKHOpenAPIEvents_OnReceiveTrDataEvent e) { if (int.TryParse(e.sPrevNext, out int next)) { var temp = base.OnReceiveTrData(opSingle, opMutiple, e); var tr = Connect.TR.First(o => o.GetType().Name.Substring(1).Equals(e.sTrCode.Substring(1)) && o.RQName.Equals(e.sRQName)); while (temp.Item2?.Count > 0) { var param = temp.Item2.Dequeue(); var date = DateTime.Now.AddYears(-1).ToString(format); if (string.IsNullOrEmpty(param[8]) == false && param[4].CompareTo(date) > 0 && int.TryParse(param[8], out int revise) && param[9].Equals("0.00") == false) { storage.Push(new ShareInvest.Catalog.OpenAPI.RevisedStockPrice { Code = temp.Item1[0], Name = API.GetMasterCodeName(temp.Item1[0]), Revise = Enum.GetName(typeof(ShareInvest.Catalog.Request.RevisedStockPrice), revise), Rate = param[9], Date = param[4].Substring(2), Price = param[1] }); } else if (param[4].CompareTo(date) < 0) { next = 0; } } if (next > 0) { tr.PrevNext = next; SendMessage(e.sScrNo, e.sRQName); Connect.GetInstance(API).InputValueRqData(tr); } else { Send?.Invoke(this, new SendSecuritiesAPI(storage, temp.Item1[0])); } } }
internal override void OnReceiveTrData(_DKHOpenAPIEvents_OnReceiveTrDataEvent e) { var temp = base.OnReceiveTrData(single, multi, e); if (temp.Item1 != null) { foreach (var str in temp.Item1) { Send?.Invoke(this, new SendSecuritiesAPI(str)); } } while (temp.Item2?.Count > 0) { foreach (var pop in temp.Item2.Dequeue()) { SendMessage(code, pop); } } }
internal override void OnReceiveTrData(_DKHOpenAPIEvents_OnReceiveTrDataEvent e) { if (int.TryParse(e.sPrevNext, out int next)) { var temp = OnReceiveTrData(opSingle, opMutiple, e); var tr = Connect.TR.First(o => o.GetType().Name.Substring(1).Equals(e.sTrCode.Substring(1)) && o.RQName.Equals(e.sRQName)); while (temp.Item2?.Count > 0) { var param = temp.Item2.Dequeue(); storage.Push(string.Concat(param[2].Substring(2), ";", param[0], ";", param[1])); } if (next > 0 && temp.Item1[1].Equals(e.sRQName) == false) { tr.PrevNext = next; SendMessage(e.sScrNo, e.sRQName); Connect.GetInstance(API).InputValueRqData(tr); } else { Send?.Invoke(this, new SendSecuritiesAPI(temp.Item1[0].Trim(), storage)); } } }
//public void SetTotalAssetView(string trCode, string rqName) //{ // long totalBuyingAmount = long.Parse(apiModel.GetCommData(trCode, rqName, 0, "총매입금액")); // long totalEstimatedAmount = long.Parse(apiModel.GetCommData(trCode, rqName, 0, "총평가금액")); // long totalEarningAmount = long.Parse(apiModel.GetCommData(trCode, rqName, 0, "총평가손익금액")); // float totalEarningPercent = float.Parse(apiModel.GetCommData(trCode, rqName, 0, "총수익률(%)")); //} public void SetConditionStocks(_DKHOpenAPIEvents_OnReceiveTrDataEvent e) { apiModel.SetRequestType(e.sTrCode, e.sRQName); int count = apiModel.GetRepeatCnt(e.sTrCode, e.sRQName); mainView.StockList.BeginUpdate(); mainView.StockList.Items.Clear(); for (int i = 0; i < count; i++) { string stockCode = apiModel.GetRequestValue <string>("종목코드", i); string stockName = apiModel.GetRequestValue <string>("종목명", i); string upDownRate = apiModel.GetRequestValue <string>("등락율", i) + '%'; string volume = apiModel.GetRequestValue <string>("거래량", i); ListViewItem viewItem = new ListViewItem(stockCode); viewItem.SubItems.Add(stockName); viewItem.SubItems.Add(upDownRate); viewItem.SubItems.Add(volume); viewItem.ImageIndex = 0; mainView.StockList.Items.Add(viewItem); } mainView.StockList.EndUpdate(); }
internal override void OnReceiveTrData(_DKHOpenAPIEvents_OnReceiveTrDataEvent e) { var temp = base.OnReceiveTrData(opSingle, opMultiple, e); if (temp.Item1 != null) { Send?.Invoke(this, new SendSecuritiesAPI(temp.Item1[15], temp.Item1[2], temp.Item1[7])); } if (long.TryParse(temp.Item1[7], out long available)) { Connect.Cash = available; var now = DateTime.Now; while (temp.Item2?.Count > 0) { var param = new SendSecuritiesAPI(temp.Item2.Dequeue()); if (param.Convey is Tuple <string, string, int, dynamic, dynamic, long, double> balance && Connect.HoldingStock.TryGetValue(balance.Item1, out Holding hs) && API.GetMasterStockState(balance.Item1).Contains(transactionSuspension) == false) { if (hs.Quantity == 0 && Connect.Cash > 0 && now.Hour == 8 && now.Minute > 0x35) { int sell, buy, upper, lower, bPrice, sPrice; uint quantity = (uint)balance.Item3, price = uint.TryParse(API.GetMasterLastPrice(hs.Code), out uint before) ? before : 0; var stock = API.KOA_Functions(info, hs.Code).Split(';')[0].Contains(market); var connect = Connect.GetInstance(API); var account = Value.Split(';')[0]; switch (hs.FindStrategics) { case SatisfyConditionsAccordingToTrends sc: upper = (int)(price * 1.3); lower = (int)(price * 0.7); if (sc.ReservationSellQuantity > 0) { sell = (int)(balance.Item4 * (1 + sc.ReservationSellRate)); sPrice = hs.GetStartingPrice(sell, stock); sPrice = sPrice < lower ? lower + hs.GetQuoteUnit(sPrice, stock) : sPrice; hs.SellPrice = sPrice; while (sPrice < upper && quantity-- > 0) { SendMessage(sPrice.ToString("C0"), string.Empty); connect.SendOrder(new SendOrder { RQName = balance.Item2, ScreenNo = connect.LookupScreenNo, AccNo = account, OrderType = (int)OpenOrderType.신규매도, Code = hs.Code, Qty = sc.ReservationSellQuantity, Price = sPrice, HogaGb = ((int)HogaGb.지정가).ToString("D2"), OrgOrderNo = string.Empty }); for (int i = 0; i < sc.ReservationSellUnit; i++) { sPrice += hs.GetQuoteUnit(sPrice, stock); } } } if (sc.ReservationBuyQuantity > 0) { buy = (int)(balance.Item4 * (1 - sc.ReservationBuyRate)); hs.BuyPrice = hs.GetStartingPrice(buy, stock); bPrice = hs.GetStartingPrice(lower, stock); while (bPrice < upper && bPrice < buy && Connect.Cash > bPrice * (1.5e-4 + 1)) { connect.SendOrder(new SendOrder { RQName = balance.Item2, ScreenNo = connect.LookupScreenNo, AccNo = account, OrderType = (int)OpenOrderType.신규매수, Code = hs.Code, Qty = sc.ReservationBuyQuantity, Price = bPrice, HogaGb = ((int)HogaGb.지정가).ToString("D2"), OrgOrderNo = string.Empty }); for (int i = 0; i < sc.ReservationBuyUnit; i++) { bPrice += hs.GetQuoteUnit(bPrice, stock); } Connect.Cash -= (long)(bPrice * (1.5e-4 + 1)); SendMessage(bPrice.ToString("C0"), Connect.Cash.ToString("C0")); } } break; case TrendsInValuation tv: upper = (int)(price * 1.3); lower = (int)(price * 0.7); if (tv.ReservationSubtractionalQuantity > 0) { sell = (int)(balance.Item4 * (1 + tv.Subtraction)); sPrice = hs.GetStartingPrice(sell, stock); sPrice = sPrice < lower ? lower + hs.GetQuoteUnit(sPrice, stock) : sPrice; while (sPrice < upper && quantity-- > 0) { SendMessage(sPrice.ToString("C0"), string.Empty); connect.SendOrder(new SendOrder { RQName = balance.Item2, ScreenNo = connect.LookupScreenNo, AccNo = account, OrderType = (int)OpenOrderType.신규매도, Code = hs.Code, Qty = tv.ReservationSubtractionalQuantity, Price = sPrice, HogaGb = ((int)HogaGb.지정가).ToString("D2"), OrgOrderNo = string.Empty }); for (int i = 0; i < tv.SubtractionalUnit; i++) { sPrice += hs.GetQuoteUnit(sPrice, stock); } } } if (tv.ReservationAddtionalQuantity > 0) { buy = (int)(balance.Item4 * (1 - tv.Addition)); bPrice = hs.GetStartingPrice(lower, stock); while (bPrice < upper && bPrice < buy && Connect.Cash > bPrice * (1.5e-4 + 1)) { connect.SendOrder(new SendOrder { RQName = balance.Item2, ScreenNo = connect.LookupScreenNo, AccNo = account, OrderType = (int)OpenOrderType.신규매수, Code = hs.Code, Qty = tv.ReservationAddtionalQuantity, Price = bPrice, HogaGb = ((int)HogaGb.지정가).ToString("D2"), OrgOrderNo = string.Empty }); for (int i = 0; i < tv.AdditionalUnit; i++) { bPrice += hs.GetQuoteUnit(bPrice, stock); } Connect.Cash -= (long)(bPrice * (1.5e-4 + 1)); SendMessage(bPrice.ToString("C0"), Connect.Cash.ToString("C0")); } } break; case TrendToCashflow tc when tc.ReservationQuantity > 0: sell = (int)(balance.Item4 * (1 + tc.ReservationRevenue)); buy = (int)(balance.Item4 * (1 - tc.Addition)); upper = (int)(price * 1.3); lower = (int)(price * 0.7); bPrice = hs.GetStartingPrice(lower, stock); sPrice = hs.GetStartingPrice(sell, stock); sPrice = sPrice < lower ? lower + hs.GetQuoteUnit(sPrice, stock) : sPrice; while (sPrice < upper && quantity-- > 0) { SendMessage(sPrice.ToString("C0"), string.Empty); connect.SendOrder(new SendOrder { RQName = balance.Item2, ScreenNo = connect.LookupScreenNo, AccNo = account, OrderType = (int)OpenOrderType.신규매도, Code = hs.Code, Qty = tc.ReservationQuantity, Price = sPrice, HogaGb = ((int)HogaGb.지정가).ToString("D2"), OrgOrderNo = string.Empty }); for (int i = 0; i < tc.Unit; i++) { sPrice += hs.GetQuoteUnit(sPrice, stock); } } while (bPrice < upper && bPrice < buy && Connect.Cash > bPrice * (1.5e-4 + 1)) { connect.SendOrder(new SendOrder { RQName = balance.Item2, ScreenNo = connect.LookupScreenNo, AccNo = account, OrderType = (int)OpenOrderType.신규매수, Code = hs.Code, Qty = tc.ReservationQuantity, Price = bPrice, HogaGb = ((int)HogaGb.지정가).ToString("D2"), OrgOrderNo = string.Empty }); for (int i = 0; i < tc.Unit; i++) { bPrice += hs.GetQuoteUnit(bPrice, stock); } Connect.Cash -= (long)(bPrice * (1.5e-4 + 1)); SendMessage(bPrice.ToString("C0"), Connect.Cash.ToString("C0")); } break; case TrendsInStockPrices ts when ts.Setting.Equals(Setting.Reservation): sell = (int)(balance.Item4 * (1 + ts.RealizeProfit)); buy = (int)(balance.Item4 * (1 - ts.AdditionalPurchase)); upper = (int)(price * 1.3); lower = (int)(price * 0.7); bPrice = hs.GetStartingPrice(lower, stock); sPrice = hs.GetStartingPrice(sell, stock); sPrice = sPrice < lower ? lower + hs.GetQuoteUnit(sPrice, stock) : sPrice; while (sPrice < upper && quantity-- > 0) { SendMessage(sPrice.ToString("C0"), string.Empty); connect.SendOrder(new SendOrder { RQName = balance.Item2, ScreenNo = connect.LookupScreenNo, AccNo = account, OrderType = (int)OpenOrderType.신규매도, Code = hs.Code, Qty = ts.Quantity, Price = sPrice, HogaGb = ((int)HogaGb.지정가).ToString("D2"), OrgOrderNo = string.Empty }); for (int i = 0; i < ts.QuoteUnit; i++) { sPrice += hs.GetQuoteUnit(sPrice, stock); } } while (bPrice < upper && bPrice < buy && Connect.Cash > bPrice * (1.5e-4 + 1)) { connect.SendOrder(new SendOrder { RQName = balance.Item2, ScreenNo = connect.LookupScreenNo, AccNo = account, OrderType = (int)OpenOrderType.신규매수, Code = hs.Code, Qty = ts.Quantity, Price = bPrice, HogaGb = ((int)HogaGb.지정가).ToString("D2"), OrgOrderNo = string.Empty }); for (int i = 0; i < ts.QuoteUnit; i++) { bPrice += hs.GetQuoteUnit(bPrice, stock); } Connect.Cash -= (long)(bPrice * (1.5e-4 + 1)); SendMessage(bPrice.ToString("C0"), Connect.Cash.ToString("C0")); } break; } } hs.Code = balance.Item1; hs.Quantity = balance.Item3; hs.Purchase = (int)balance.Item4; hs.Current = (int)balance.Item5; hs.Revenue = balance.Item6; hs.Rate = balance.Item7; Connect.HoldingStock[balance.Item1] = hs; } Send?.Invoke(this, param); } } }
public void OnTrData(object sender, _DKHOpenAPIEvents_OnReceiveTrDataEvent e) { //MessageBox.Show("ok!!"+e.sRQName+e.sTrCode); if (e.sRQName == "계좌잔고평가내역") { int buyingPrice2 = int.Parse(axKHOpenAPI1.GetCommData(e.sTrCode, e.sRQName, 0, "총매입금액")); int ballanceAsset = int.Parse(axKHOpenAPI1.GetCommData(e.sTrCode, e.sRQName, 0, "추정예탁자산")); int estimatePrice2 = int.Parse(axKHOpenAPI1.GetCommData(e.sTrCode, e.sRQName, 0, "총평가금액")); int estimateProfit = int.Parse(axKHOpenAPI1.GetCommData(e.sTrCode, e.sRQName, 0, "총평가손익금액")); buyingPriceLab.Text = buyingPrice2.ToString(); ballanceAssetLab.Text = ballanceAsset.ToString(); estimatePriceLab.Text = estimatePrice2.ToString(); estimateProfitLab.Text = estimateProfit.ToString(); /// int count = axKHOpenAPI1.GetRepeatCnt(e.sTrCode, e.sRQName); for (int i = 0; i < count; ++i) { double amount = double.Parse(axKHOpenAPI1.GetCommData(e.sTrCode, e.sRQName, i, "보유수량"));//TrimStart('0'); string itemName = axKHOpenAPI1.GetCommData(e.sTrCode, e.sRQName, i, "종목명").Trim(); double buyingPrice = double.Parse(axKHOpenAPI1.GetCommData(e.sTrCode, e.sRQName, i, "매입가")); double currentPrice = double.Parse(axKHOpenAPI1.GetCommData(e.sTrCode, e.sRQName, i, "현재가")); double estimateProfit2 = double.Parse(axKHOpenAPI1.GetCommData(e.sTrCode, e.sRQName, i, "평가금액")); double profitRate = double.Parse(axKHOpenAPI1.GetCommData(e.sTrCode, e.sRQName, i, "수익률(%)")); StockGrid stockGrid = new StockGrid(itemName, amount, buyingPrice, currentPrice, estimateProfit2, profitRate); stockGridList.Add(stockGrid); } dataGridView2.DataSource = stockGridList; } //주문정보 추가 코드 else if (e.sRQName.Equals("주문종목정보")) { try { string 종목명 = axKHOpenAPI1.GetCommData(e.sTrCode, e.sRQName, 0, "종목명").Trim(); int 현재가 = int.Parse(axKHOpenAPI1.GetCommData(e.sTrCode, e.sRQName, 0, "현재가")); codeNameLab.Text = 종목명; if (현재가 < 0) { 현재가 = -현재가; } numericUpDown1.Value = 현재가; } catch (Exception ex) { Console.WriteLine(ex.Message.ToString()); } } else if (e.sRQName.Equals("실시간미체결요청")) //필드만들것 { int count = axKHOpenAPI1.GetRepeatCnt(e.sTrCode, e.sRQName); for (int i = 0; i < count; ++i) { string 주문번호 = axKHOpenAPI1.GetCommData(e.sTrCode, e.sRQName, i, "주문번호").Trim(); string 종목코드 = axKHOpenAPI1.GetCommData(e.sTrCode, e.sRQName, i, "종목코드").Trim(); string 종목명 = axKHOpenAPI1.GetCommData(e.sTrCode, e.sRQName, i, "종목명").Trim(); int 주문수량 = int.Parse(axKHOpenAPI1.GetCommData(e.sTrCode, e.sRQName, i, "주문수량")); int 가격 = int.Parse(axKHOpenAPI1.GetCommData(e.sTrCode, e.sRQName, i, "가격")); int 현재가 = int.Parse(axKHOpenAPI1.GetCommData(e.sTrCode, e.sRQName, i, "현재가")); int 미체결수량 = int.Parse(axKHOpenAPI1.GetCommData(e.sTrCode, e.sRQName, i, "미체결수량")); string 주문구분 = axKHOpenAPI1.GetCommData(e.sTrCode, e.sRQName, i, "매매구분").Trim(); string 시간 = axKHOpenAPI1.GetCommData(e.sTrCode, e.sRQName, i, "시간").Trim(); outStandingOrderList.Add(new OutStandingOrder(주문번호, 종목코드, 종목명, 주문수량, 가격, 현재가, 미체결수량, 주문구분, 시간)); } dataGridView3.DataSource = outStandingOrderList; } }
private void OnReceiveTrData(object sender, _DKHOpenAPIEvents_OnReceiveTrDataEvent e) { var temp = axAPI.GetCommDataEx(e.sTrCode, e.sRQName); if (temp != null) { string[,] ts = new string[((object[, ])temp).GetUpperBound(0) + 1, ((object[, ])temp).GetUpperBound(1) + 1]; int x, y, lx = ((object[, ])temp).GetUpperBound(0), ly = ((object[, ])temp).GetUpperBound(1); for (x = 0; x <= lx; x++) { sb = new StringBuilder(64); for (y = 0; y <= ly; y++) { ts[x, y] = (string)((object[, ])temp)[x, y]; if (ts[x, y].Length > 13 && !e.sTrCode.Equals("opt50001") && Retention.Equals(ts[x, y].Substring(2))) { sb = new StringBuilder(it); e.sPrevNext = "0"; break; } sb.Append(ts[x, y]); if (y != ly) { sb.Append(","); } } if (!e.sTrCode.Equals("opt50001") && sb.ToString() != it) { SendMemorize?.Invoke(this, new Memorize(sb)); continue; } if (sb.ToString() == it) { break; } if (e.sTrCode.Equals("opt50001")) { Remaining = axAPI.GetCommData(e.sTrCode, e.sRQName, 0, "잔존일수").Trim(); return; } } if (e.sPrevNext.Equals("2") && !e.sTrCode.Equals("opt50001")) { request.RequestTrData(new Task(() => InputValueRqData(new Opt50028 { Value = Code, RQName = Code + Retention, PrevNext = 2 }))); return; } if (e.sPrevNext.Equals("0") && !e.sTrCode.Equals("opt50001")) { SendMemorize?.Invoke(this, new Memorize(e.sPrevNext)); } } }
void OnReceiveTrData(object sender, _DKHOpenAPIEvents_OnReceiveTrDataEvent e) => (API as Connect)?.TR.FirstOrDefault(o
private void OnReceiveTrData(object sender, _DKHOpenAPIEvents_OnReceiveTrDataEvent e) { if (e.sTrCode.Equals("opt50028") || e.sTrCode.Equals("opt50066")) { var temp = axAPI.GetCommDataEx(e.sTrCode, e.sRQName); if (temp != null) { string[,] ts = new string[((object[, ])temp).GetUpperBound(0) + 1, ((object[, ])temp).GetUpperBound(1) + 1]; int x, y, lx = ((object[, ])temp).GetUpperBound(0), ly = ((object[, ])temp).GetUpperBound(1); for (x = 0; x <= lx; x++) { sb = new StringBuilder(64); for (y = 0; y <= ly; y++) { ts[x, y] = (string)((object[, ])temp)[x, y]; if (ts[x, y].Length > 13 && e.sRQName.Substring(8).Equals(ts[x, y].Substring(2))) { sb = new StringBuilder(it); e.sPrevNext = "0"; break; } sb.Append(ts[x, y]).Append(';'); } if (!it.Equals(sb.ToString())) { SendMemorize?.Invoke(this, new Memorize(sb)); continue; } if (it.Equals(sb.ToString())) { break; } } if (e.sRQName.Substring(0, 3).Equals("101") && e.sPrevNext.Equals("2")) { request.RequestTrData(new Task(() => InputValueRqData(new Opt50028 { Value = e.sRQName.Substring(0, 8), RQName = e.sRQName, PrevNext = 2 }))); return; } if (e.sPrevNext.Equals("2")) { request.RequestTrData(new Task(() => InputValueRqData(new Opt50066 { Value = e.sRQName.Substring(0, 8), RQName = e.sRQName, PrevNext = 2 }))); return; } if (e.sPrevNext.Equals("0")) { SendMemorize?.Invoke(this, new Memorize(e.sPrevNext, e.sRQName.Substring(0, 8))); } } Request(e.sRQName); return; } if (e.sTrCode.Contains("KOA")) { return; } sb = new StringBuilder(512); int i, cnt = axAPI.GetRepeatCnt(e.sTrCode, e.sRQName); for (i = 0; i < (cnt > 0 ? cnt : cnt + 1); i++) { foreach (string item in Array.Find(catalog, o => o.ToString().Contains(e.sTrCode.Substring(1)))) { sb.Append(axAPI.GetCommData(e.sTrCode, e.sRQName, i, item).Trim()).Append(';'); } if (cnt > 0) { sb.Append("*"); if (DeadLine && sb.ToString().Substring(0, 3).Equals("101")) { string[] temp = sb.ToString().Split(';'); Quantity = temp[2].Equals("1") ? -int.Parse(temp[3]) : int.Parse(temp[3]); DeadLine = false; } } } switch (Array.FindIndex(catalog, o => o.ToString().Contains(e.sTrCode.Substring(1)))) { case 0: FixUp(sb.ToString().Split(';'), e.sRQName); break; case 1: SendDeposit?.Invoke(this, new Deposit(sb)); break; case 2: SendHolding?.Invoke(this, new Holding(sb.ToString())); break; } }
protected internal override (string[], Queue <string[]>) OnReceiveTrData(string[] single, string[] multi, _DKHOpenAPIEvents_OnReceiveTrDataEvent e) { var sTemp = single != null ? new string[single.Length] : null; if (single != null) { for (int i = 0; i < single.Length; i++) { sTemp[i] = API.GetCommData(e.sTrCode, e.sRQName, 0, single[i]); } } if (multi != null) { var temp = API.GetCommDataEx(e.sTrCode, e.sRQName); if (temp != null) { int x, y, lx = ((object[, ])temp).GetUpperBound(0), ly = ((object[, ])temp).GetUpperBound(1); var catalog = new Queue <string[]>(); for (x = 0; x <= lx; x++) { var str = new string[ly + 1]; for (y = 0; y <= ly; y++) { str[y] = (string)((object[, ])temp)[x, y]; } if (string.IsNullOrEmpty(e.sRQName) == false && (string.Compare(str[2][2..], e.sRQName) > 0 || e.sRQName.Equals(rqName)))
protected internal override (string[], Queue <string[]>) OnReceiveTrData(string[] single, string[] multi, _DKHOpenAPIEvents_OnReceiveTrDataEvent e) { var sTemp = single is null ? null : new string[single.Length]; if (single is not null) { for (int i = 0; i < single.Length; i++) { sTemp[i] = API.GetCommData(e.sTrCode, e.sRQName, 0, single[i]).Trim(); } } if (multi is not null) { var temp = API.GetCommDataEx(e.sTrCode, e.sRQName); if (temp is not null) { int x, y, lx = ((object[, ])temp).GetUpperBound(0), ly = ((object[, ])temp).GetUpperBound(1); var catalog = new Queue <string[]>(); for (x = 0; x <= lx; x++) { var str = new string[ly + 1]; for (y = 0; y <= ly; y++) { str[y] = ((string)((object[, ])temp)[x, y]).Trim(); } if (string.IsNullOrEmpty(e.sRQName) is false && (e.sRQName.Equals(rqName) || string.Compare(str[4], e.sRQName) < 0)) { catalog.Enqueue(str); } } return(sTemp, catalog); } } return(sTemp, null); }
internal override void OnReceiveTrData(_DKHOpenAPIEvents_OnReceiveTrDataEvent e) { if (int.TryParse(e.sPrevNext, out int next)) { var temp = base.OnReceiveTrData(null, op_mutiple, e); var tr = Connect.GetInstance().TR.First(o => o.GetType().Name[1..].Equals(e.sTrCode[1..]) && o.RQName.Equals(e.sRQName));
void OnReceiveTrData(object sender, _DKHOpenAPIEvents_OnReceiveTrDataEvent e) => Connect.TR.FirstOrDefault(o => (o.RQName != null ? o.RQName.Equals(e.sRQName) : o.PrevNext.ToString().Equals(e.sPrevNext)) && o.GetType().Name.Substring(1).Equals(e.sTrCode.Substring(1)))? .OnReceiveTrData(e);
private void API_OnReceiveTrData(object sender, _DKHOpenAPIEvents_OnReceiveTrDataEvent e) { if (e.sRQName.Equals("계좌평가잔고내역요청")) { #region 계좌평가잔고내역요청 this.dataGridViewAccount.DataSource = null; int multiCount = 0; List <OPW00018_계좌평가결과> dataSingleList = new List <OPW00018_계좌평가결과>(); OPW00018_계좌평가결과 dataSingle = new OPW00018_계좌평가결과(); dataSingle.총매입금액 = axKHOpenAPI.GetCommData(e.sTrCode, e.sRQName, 0, "총매입금액").Trim(); dataSingle.총수익률 = axKHOpenAPI.GetCommData(e.sTrCode, e.sRQName, 0, "총수익률(%)").Trim(); dataSingle.총평가손익금액 = axKHOpenAPI.GetCommData(e.sTrCode, e.sRQName, 0, "총평가손익금액").Trim(); dataSingle.총평가금액 = axKHOpenAPI.GetCommData(e.sTrCode, e.sRQName, 0, "총평가금액").Trim(); dataSingle.총대주금액 = axKHOpenAPI.GetCommData(e.sTrCode, e.sRQName, 0, "총대주금액").Trim(); dataSingle.총대출금 = axKHOpenAPI.GetCommData(e.sTrCode, e.sRQName, 0, "총대출금").Trim(); dataSingle.총융자금액 = axKHOpenAPI.GetCommData(e.sTrCode, e.sRQName, 0, "총융자금액").Trim(); dataSingle.추정예탁자산 = axKHOpenAPI.GetCommData(e.sTrCode, e.sRQName, 0, "추정예탁자산").Trim(); dataSingle.조회건수 = axKHOpenAPI.GetCommData(e.sTrCode, e.sRQName, 0, "조회건수").Trim(); dataSingleList.Add(dataSingle); dataGridViewAccount.DataSource = dataSingleList; if (string.IsNullOrEmpty(dataSingle.조회건수)) { return; } multiCount = Int32.Parse(dataSingle.조회건수); List <OPW00018_계좌평가잔고개별합산> dataMultiList = new List <OPW00018_계좌평가잔고개별합산>(); for (int i = 0; i < multiCount; i++) { OPW00018_계좌평가잔고개별합산 dataMulti = new OPW00018_계좌평가잔고개별합산(); dataMulti.금일매도수량 = axKHOpenAPI.GetCommData(e.sTrCode, e.sRQName, i, "금일매도수량").Trim(); dataMulti.금일매수수량 = axKHOpenAPI.GetCommData(e.sTrCode, e.sRQName, i, "금일매수수량").Trim(); dataMulti.대출일 = axKHOpenAPI.GetCommData(e.sTrCode, e.sRQName, i, "대출일").Trim(); dataMulti.매입가 = axKHOpenAPI.GetCommData(e.sTrCode, e.sRQName, i, "매입가").Trim(); dataMulti.매입금액 = axKHOpenAPI.GetCommData(e.sTrCode, e.sRQName, i, "매입금액").Trim(); dataMulti.매입수수료 = axKHOpenAPI.GetCommData(e.sTrCode, e.sRQName, i, "매입수수료").Trim(); dataMulti.보유비중 = axKHOpenAPI.GetCommData(e.sTrCode, e.sRQName, i, "보유비중(%)").Trim(); dataMulti.보유수량 = axKHOpenAPI.GetCommData(e.sTrCode, e.sRQName, i, "보유수량").Trim(); dataMulti.세금 = axKHOpenAPI.GetCommData(e.sTrCode, e.sRQName, i, "세금").Trim(); dataMulti.수수료합 = axKHOpenAPI.GetCommData(e.sTrCode, e.sRQName, i, "수수료합").Trim(); dataMulti.수익률 = axKHOpenAPI.GetCommData(e.sTrCode, e.sRQName, i, "수익률(%)").Trim(); dataMulti.신용구분 = axKHOpenAPI.GetCommData(e.sTrCode, e.sRQName, i, "신용구분").Trim(); dataMulti.신용구분명 = axKHOpenAPI.GetCommData(e.sTrCode, e.sRQName, i, "신용구분명").Trim(); dataMulti.전일매도수량 = axKHOpenAPI.GetCommData(e.sTrCode, e.sRQName, i, "전일매도수량").Trim(); dataMulti.전일매수수량 = axKHOpenAPI.GetCommData(e.sTrCode, e.sRQName, i, "전일매수수량").Trim(); dataMulti.전일종가 = axKHOpenAPI.GetCommData(e.sTrCode, e.sRQName, i, "전일종가").Trim(); dataMulti.종목명 = axKHOpenAPI.GetCommData(e.sTrCode, e.sRQName, i, "종목명").Trim(); dataMulti.종목번호 = axKHOpenAPI.GetCommData(e.sTrCode, e.sRQName, i, "종목번호").Trim(); dataMulti.평가금액 = axKHOpenAPI.GetCommData(e.sTrCode, e.sRQName, i, "평가금액").Trim(); dataMulti.평가손익 = axKHOpenAPI.GetCommData(e.sTrCode, e.sRQName, i, "평가손익").Trim(); dataMulti.평가수수료 = axKHOpenAPI.GetCommData(e.sTrCode, e.sRQName, i, "평가수수료").Trim(); dataMulti.현재가 = axKHOpenAPI.GetCommData(e.sTrCode, e.sRQName, i, "현재가").Trim(); dataMulti.매매가능수량 = axKHOpenAPI.GetCommData(e.sTrCode, e.sRQName, i, "매매가능수량").Trim(); dataMultiList.Add(dataMulti); } this.dataGridViewAccountStock.DataSource = dataMultiList; foreach (DataGridViewColumn col in dataGridViewAccount.Columns) { col.SortMode = DataGridViewColumnSortMode.NotSortable; } dataGridViewAccount.SelectedRows[0].Selected = false; foreach (DataGridViewColumn col in dataGridViewAccountStock.Columns) { col.SortMode = DataGridViewColumnSortMode.NotSortable; } dataGridViewAccountStock.SelectedRows[0].Selected = false; Logger(Log.조회, "계좌평가잔고 완료"); #endregion } else if (e.sRQName.Equals("조건검색주식기본정보")) { #region 조건검색결과 int count = axKHOpenAPI.GetRepeatCnt(e.sTrCode, e.sRQName); string stockList = ""; ConditionResultStockList.Clear(); for (int i = 0; i < count; i++) { this.dataGridViewStockInfo.DataSource = null; OPT10001_주식기본정보 data = new OPT10001_주식기본정보(); data.종목코드 = axKHOpenAPI.GetCommData(e.sTrCode, e.sRQName, i, "종목코드").Trim(); data.종목명 = axKHOpenAPI.GetCommData(e.sTrCode, e.sRQName, i, "종목명").Trim(); data.현재가 = axKHOpenAPI.GetCommData(e.sTrCode, e.sRQName, i, "현재가").Trim(); data.등락율 = axKHOpenAPI.GetCommData(e.sTrCode, e.sRQName, i, "등락율").Trim(); data.전일대비 = axKHOpenAPI.GetCommData(e.sTrCode, e.sRQName, i, "전일대비").Trim(); ConditionResultStockList.Add(data); if (i == count - 1) { stockList += data.종목코드; } else { stockList += data.종목코드 + ";"; } } this.dataGridViewStockInfo.DataSource = ConditionResultStockList.Select(x => new { x.종목코드, x.종목명, x.현재가, x.전일대비, x.등락율 }).ToList(); this.dataGridViewStockInfo.SelectedRows[0].Selected = false; Logger(Log.조회, "조건검색결과 완료"); long lRet = axKHOpenAPI.SetRealReg(GetScreenNum(), // 화면번호 stockList, // 종콕코드 리스트 "10;12", //FID번호 "0"); // 0 : 마지막에 등록한 종목만 실시간 #endregion } else if (e.sRQName.Equals("계좌평가현황요청")) { #region 계좌평가현황요청 this.dataGridViewAccountStock.DataSource = null; List <OPW00004_계좌평가현황요청_Single> OPW00004SingleDataList = new List <OPW00004_계좌평가현황요청_Single>(); OPW00004_계좌평가현황요청_Single singleData = new OPW00004_계좌평가현황요청_Single(); singleData.예수금 = this.axKHOpenAPI.GetCommData(e.sTrCode, e.sRQName, 0, "예수금").Trim(); singleData.예탁자산평가액 = this.axKHOpenAPI.GetCommData(e.sTrCode, e.sRQName, 0, "예탁자산평가액").Trim(); singleData.가잔고평가액 = this.axKHOpenAPI.GetCommData(e.sTrCode, e.sRQName, 0, "유가잔고평가액").Trim(); singleData.총매입금액 = this.axKHOpenAPI.GetCommData(e.sTrCode, e.sRQName, 0, "총매입금액").Trim(); singleData.추정예탁자산 = this.axKHOpenAPI.GetCommData(e.sTrCode, e.sRQName, 0, "추정예탁자산").Trim(); OPW00004SingleDataList.Add(singleData); this.dataGridViewAccount.DataSource = OPW00004SingleDataList; int count = axKHOpenAPI.GetRepeatCnt(e.sTrCode, e.sRQName); List <OPW00004_계좌평가현황요청_Multi> OPW00004_dataList = new List <OPW00004_계좌평가현황요청_Multi>(); for (int i = 0; i < count; i++) { OPW00004_계좌평가현황요청_Multi multiData = new OPW00004_계좌평가현황요청_Multi(); multiData.종목코드 = axKHOpenAPI.GetCommData(e.sTrCode, e.sRQName, i, "종목코드").Trim(); multiData.종목명 = axKHOpenAPI.GetCommData(e.sTrCode, e.sRQName, i, "종목명").Trim(); multiData.보유수량 = axKHOpenAPI.GetCommData(e.sTrCode, e.sRQName, i, "보유수량").Trim(); multiData.평균단가 = axKHOpenAPI.GetCommData(e.sTrCode, e.sRQName, i, "평균단가").Trim(); multiData.현재가 = axKHOpenAPI.GetCommData(e.sTrCode, e.sRQName, i, "현재가").Trim(); multiData.평가금액 = axKHOpenAPI.GetCommData(e.sTrCode, e.sRQName, i, "평가금액").Trim(); multiData.손익금액 = axKHOpenAPI.GetCommData(e.sTrCode, e.sRQName, i, "손익금액").Trim(); multiData.손익율 = axKHOpenAPI.GetCommData(e.sTrCode, e.sRQName, i, "손익율").Trim(); multiData.대출일 = axKHOpenAPI.GetCommData(e.sTrCode, e.sRQName, i, "대출일").Trim(); multiData.매입금액 = axKHOpenAPI.GetCommData(e.sTrCode, e.sRQName, i, "매입금액").Trim(); OPW00004_dataList.Add(multiData); } this.dataGridViewAccountStock.DataSource = OPW00004_dataList; foreach (DataGridViewColumn col in dataGridViewAccountStock.Columns) { col.SortMode = DataGridViewColumnSortMode.NotSortable; } if (dataGridViewAccountStock.SelectedRows.Count > 0) { dataGridViewAccountStock.SelectedRows[0].Selected = false; } Logger(Log.조회, "계좌정보 조회 성공"); #endregion } else if (e.sRQName.Equals("증거금율별주문가능수량조회요청")) { this.tb매수주문수량.Text = Int32.Parse(this.axKHOpenAPI.GetCommData(e.sTrCode, e.sRQName, 0, "증거금100주문가능수량").Trim()).ToString(); Logger(Log.조회, "증거금율별주문가능수량조회요청 성공"); } else if (e.sRQName.Equals("신용보증금율별주문가능수량조회요청")) { this.tb매수주문수량.Text = Int32.Parse(this.axKHOpenAPI.GetCommData(e.sTrCode, e.sRQName, 0, "보증금40주문가능수량").Trim()).ToString(); Logger(Log.조회, "신용보증금율별주문가능수량조회요청 성공"); } else if (e.sRQName.Equals("실시간미체결요청")) { //MessageBox.Show("들어오나?"); int count = axKHOpenAPI.GetRepeatCnt(e.sTrCode, e.sRQName); if (count < 1) { MessageBox.Show("미체결주문이 없습니다."); return; } List <OPT10075_실시간미체결> OPT10075_dataList = new List <OPT10075_실시간미체결>(); for (int i = 0; i < count; i++) { OPT10075_실시간미체결 multiData = new OPT10075_실시간미체결(); multiData.계좌번호 = axKHOpenAPI.GetCommData(e.sTrCode, e.sRQName, i, "계좌번호").Trim(); multiData.주문번호 = axKHOpenAPI.GetCommData(e.sTrCode, e.sRQName, i, "주문번호").Trim(); multiData.관리사번 = axKHOpenAPI.GetCommData(e.sTrCode, e.sRQName, i, "관리사번").Trim(); multiData.종목코드 = axKHOpenAPI.GetCommData(e.sTrCode, e.sRQName, i, "종목코드").Trim(); multiData.업무구분 = axKHOpenAPI.GetCommData(e.sTrCode, e.sRQName, i, "업무구분").Trim(); multiData.주문상태 = axKHOpenAPI.GetCommData(e.sTrCode, e.sRQName, i, "주문상태").Trim(); multiData.종목명 = axKHOpenAPI.GetCommData(e.sTrCode, e.sRQName, i, "종목명").Trim(); multiData.주문수량 = axKHOpenAPI.GetCommData(e.sTrCode, e.sRQName, i, "주문수량").Trim(); multiData.주문가격 = axKHOpenAPI.GetCommData(e.sTrCode, e.sRQName, i, "주문가격").Trim(); multiData.미체결수량 = axKHOpenAPI.GetCommData(e.sTrCode, e.sRQName, i, "미체결수량").Trim(); multiData.체결누계금액 = axKHOpenAPI.GetCommData(e.sTrCode, e.sRQName, i, "체결누계금액").Trim(); multiData.원주문번호 = axKHOpenAPI.GetCommData(e.sTrCode, e.sRQName, i, "원주문번호").Trim(); multiData.주문구분 = axKHOpenAPI.GetCommData(e.sTrCode, e.sRQName, i, "주문구분").Trim(); multiData.매매구분 = axKHOpenAPI.GetCommData(e.sTrCode, e.sRQName, i, "매매구분").Trim(); multiData.시간 = axKHOpenAPI.GetCommData(e.sTrCode, e.sRQName, i, "시간").Trim(); multiData.체결번호 = axKHOpenAPI.GetCommData(e.sTrCode, e.sRQName, i, "체결번호").Trim(); multiData.체결가 = axKHOpenAPI.GetCommData(e.sTrCode, e.sRQName, i, "체결가").Trim(); multiData.체결량 = axKHOpenAPI.GetCommData(e.sTrCode, e.sRQName, i, "체결량").Trim(); multiData.현재가 = axKHOpenAPI.GetCommData(e.sTrCode, e.sRQName, i, "현재가").Trim(); multiData.매도호가 = axKHOpenAPI.GetCommData(e.sTrCode, e.sRQName, i, "매도호가").Trim(); multiData.매수호가 = axKHOpenAPI.GetCommData(e.sTrCode, e.sRQName, i, "매수호가").Trim(); multiData.단위체결가 = axKHOpenAPI.GetCommData(e.sTrCode, e.sRQName, i, "단위체결가").Trim(); multiData.단위체결량 = axKHOpenAPI.GetCommData(e.sTrCode, e.sRQName, i, "단위체결량").Trim(); multiData.당일매매수수료 = axKHOpenAPI.GetCommData(e.sTrCode, e.sRQName, i, "당일매매수수료").Trim(); multiData.당일매매세금 = axKHOpenAPI.GetCommData(e.sTrCode, e.sRQName, i, "당일매매세금").Trim(); multiData.개인투자자 = axKHOpenAPI.GetCommData(e.sTrCode, e.sRQName, i, "개인투자자").Trim(); OPT10075_dataList.Add(multiData); } NotConclude nc = new NotConclude(this, OPT10075_dataList); nc.Show(); //this.dataGridViewAccountStock.DataSource = OPW00004_dataList; //foreach (DataGridViewColumn col in dataGridViewAccountStock.Columns) //{ // col.SortMode = DataGridViewColumnSortMode.NotSortable; //} //if (dataGridViewAccountStock.SelectedRows.Count > 0) // dataGridViewAccountStock.SelectedRows[0].Selected = false; Logger(Log.조회, "실시간미체결요청 성공"); } }
protected internal virtual (string[], Queue <string[]>) OnReceiveTrData(string[] single, string[] multi, _DKHOpenAPIEvents_OnReceiveTrDataEvent e) { int i, j; var sTemp = single != null ? new string[single.Length] : null; if (single != null) { for (i = 0; i < single.Length; i++) { sTemp[i] = API.GetCommData(e.sTrCode, e.sRQName, 0, single[i]).Trim(); } } if (multi != null) { var catalog = new Queue <string[]>(); for (j = 0; j < API.GetRepeatCnt(e.sTrCode, e.sRQName); j++) { var temp = new string[multi.Length]; for (i = 0; i < multi.Length; i++) { temp[i] = API.GetCommData(e.sTrCode, e.sRQName, j, multi[i]).Trim(); } catalog.Enqueue(temp); } return(sTemp, catalog); } return(sTemp, null); }
internal abstract void OnReceiveTrData(_DKHOpenAPIEvents_OnReceiveTrDataEvent e);