internal override void OnReceiveRealData(_DKHOpenAPIEvents_OnReceiveRealDataEvent e) { if (Connect.HoldingStock.TryGetValue(e.sRealKey, out Holding hs)) { var param = base.OnReceiveRealData(e, fid); if (e.sRealKey[1] == '0' && double.TryParse(param[0].StartsWith("-") ? param[0].Substring(1) : param[0], out double current) && double.TryParse(param[1].StartsWith("-") ? param[1].Substring(1) : param[1], out double offer) && double.TryParse(param[2].StartsWith("-") ? param[2].Substring(1) : param[2], out double bid)) { hs.Current = current; hs.Offer = offer; hs.Bid = bid; } else if (int.TryParse(param[0].StartsWith("-") ? param[0].Substring(1) : param[0], out int price) && int.TryParse(param[1].StartsWith("-") ? param[1].Substring(1) : param[1], out int sq) && int.TryParse(param[2].StartsWith("-") ? param[2].Substring(1) : param[2], out int bq)) { hs.Current = price; hs.Offer = sq; hs.Bid = bq; } } }
internal override void OnReceiveRealData(_DKHOpenAPIEvents_OnReceiveRealDataEvent e) { if (Connect.GetInstance().StocksHeld.TryGetValue(e.sRealKey, out Analysis analysis)) { var data = e.sRealData.Split('\t'); if (int.TryParse(data[0][0] is '-' ? data[0][1..] : data[0], out int current) && int.TryParse(data[3][0] is '-' ? data[3][1..] : data[3], out int offer) && int.TryParse(data[4][0] is '-' ? data[4][1..] : data[4], out int bid))
private void API_OnReceiveRealData(object sender, _DKHOpenAPIEvents_OnReceiveRealDataEvent e) { if (e.sRealType == "주식체결") { string stockCode = e.sRealKey; string stockPrice = Int32.Parse(axKHOpenAPI.GetCommRealData(e.sRealType, 10).Trim()).ToString(); string stock전일대비 = axKHOpenAPI.GetCommRealData(e.sRealType, 11).Trim(); string stock등락율 = axKHOpenAPI.GetCommRealData(e.sRealType, 12).Trim().ToPersentage(); if (ConditionResultStockList.Where(x => x.종목코드.Equals(stockCode)).ToList()[0].현재가.Equals(stockPrice)) { return; } ConditionResultStockList.Where(x => x.종목코드.Equals(stockCode)).ToList().ForEach(i => { i.현재가 = stockPrice; i.전일대비 = stock전일대비; i.등락율 = stock등락율; }); this.dataGridViewStockInfo.DataSource = ConditionResultStockList.Select(x => new { x.종목코드, x.종목명, x.현재가, x.전일대비, x.등락율 }).ToList(); foreach (DataGridViewRow row in this.dataGridViewStockInfo.Rows) { if (row.Cells[0].Value.Equals(stockCode)) { this.dataGridViewStockInfo.Rows[row.Index].Selected = true; break; } } } }
private void OpenApi_ReceivedRealData(_DKHOpenAPIEvents_OnReceiveRealDataEvent real) { DateTime now = DateTime.Now; //DateTime time; //var strTime = OpenApi.GetRealData(real.sRealKey, 21); //if (DateTime.TryParseExact(strTime, // "HHmmss", CultureInfo.CurrentCulture, DateTimeStyles.None, out time)) //{ // now = new DateTime(now.Year, now.Month, now.Day, time.Hour, time.Minute, time.Second); //} var askingPrice = new AskingPrice(now); for (int i = 0; i < OpenApi.RealPriceCount; ++i) { askingPrice.Sell.Add(new Asking { Price = Math.Abs(OpenApi.GetRealData(real.sRealKey, i + 41).ToInt()), Quantity = OpenApi.GetRealData(real.sRealKey, i + 61).ToInt(), }); askingPrice.Buy.Add(new Asking { Price = Math.Abs(OpenApi.GetRealData(real.sRealKey, i + 51).ToInt()), Quantity = OpenApi.GetRealData(real.sRealKey, i + 71).ToInt(), }); } if (_trader != null) { _trader.SetAskingPrice(real.sRealKey, askingPrice); } }
internal override void OnReceiveRealData(_DKHOpenAPIEvents_OnReceiveRealDataEvent e) { if (Connect.HoldingStock.TryGetValue(e.sRealKey, out Holding hs)) { var param = base.OnReceiveRealData(e, fid); if (e.sRealKey[1].Equals('0') && double.TryParse(param[1].StartsWith("-") ? param[1].Substring(1) : param[1], out double offer) && double.TryParse(param[2].StartsWith("-") ? param[2].Substring(1) : param[2], out double bid)) { hs.Offer = offer; hs.Bid = bid; } else if (int.TryParse(param[1].StartsWith("-") ? param[1].Substring(1) : param[1], out int sOffer) && int.TryParse(param[2].StartsWith("-") ? param[2].Substring(1) : param[2], out int sBid)) { hs.Offer = sOffer; hs.Bid = sBid; } } if (Connect.Futures != null && Connect.Futures.TryGetValue(e.sRealKey, out Analysis.OpenAPI.Collect collect)) { int i = 0; var time = API.GetCommRealData(e.sRealKey, fid[i]); if (string.Compare(time, initiate) > i && string.Compare(time, closing) < i) { var sb = new StringBuilder(); for (i = 0; i < 0x30; i++) { sb.Append(API.GetCommRealData(e.sRealKey, fid[i + 3])).Append(';'); } collect.ToCollect(time, sb.Remove(sb.Length - 1, 1)); } } }
internal override void OnReceiveRealData(_DKHOpenAPIEvents_OnReceiveRealDataEvent e) { var param = base.OnReceiveRealData(e, Fid); var operation = Enum.ToObject(typeof(Operation), int.TryParse(param[0], out int number) ? number : char.TryParse(param[0], out char initial) ? initial : null); switch (operation) { case Operation.장시작전: if (reservation.Equals(param[1])) { Delay.Milliseconds = 0xE7; } break; case Operation.장시작: Delay.Milliseconds = 0xC9; break; case Operation.옵_장마감전_동시호가_종료: Delay.Milliseconds = 0xE01; break; case Operation.장마감: Delay.Milliseconds = 0xE11; break; } if (string.IsNullOrEmpty(param[2]) is false && string.IsNullOrEmpty(param[1]) is false && string.IsNullOrEmpty(param[0]) is false) { if (operation is not null) { Send?.Invoke(this, new SendSecuritiesAPI((Operation)operation, param[1], param[^ 1]));
private static void AxKHOpenAPI1_OnReceiveRealData(object sender, _DKHOpenAPIEvents_OnReceiveRealDataEvent e) { if (ReceivedRealData != null) { ReceivedRealData(e); } }
internal override void OnReceiveRealData(_DKHOpenAPIEvents_OnReceiveRealDataEvent e) { var data = e.sRealData.Split('\t'); if (string.IsNullOrEmpty(data[6]) is false && string.IsNullOrEmpty(data[1]) is false && string.IsNullOrEmpty(data[0]) is false) { if (Connect.GetInstance().StocksHeld.TryGetValue(e.sRealKey, out Analysis analysis) && int.TryParse(data[4][0] is '-' ? data[4][1..] : data[4], out int offer) && int.TryParse(data[5][0] is '-' ? data[5][1..] : data[5], out int bid))
private void OnReceiveRealData(object sender, _DKHOpenAPIEvents_OnReceiveRealDataEvent e) { sb = new StringBuilder(512); int index = Array.FindIndex(Enum.GetNames(typeof(IRealType.RealType)), o => o.Equals(e.sRealType)); foreach (int fid in type.Catalog[index]) { sb.Append(axAPI.GetCommRealData(e.sRealKey, fid)).Append(';'); } switch (index) { case 1: if (e.sRealKey.Substring(0, 3).Equals("101")) { SendDatum?.Invoke(this, new Datum(sb)); } break; case 5: string[] find = sb.ToString().Split(';'); OptionsCalling[e.sRealKey] = double.Parse(find[1].Contains("-") ? find[1].Substring(1) : find[1]); break; case 7: if (sb.ToString().Substring(0, 1).Equals("e") && DeadLine == false) { DeadLine = true; Delay.delay = 4150; Request(Code[0].Substring(0, 8)); } break; } }
internal override void OnReceiveRealData(_DKHOpenAPIEvents_OnReceiveRealDataEvent e) { var param = base.OnReceiveRealData(e, Fid); if (char.TryParse(param[0], out char operation)) { switch (operation) { case '0': if (reservation.Equals(param[1])) { Delay.Milliseconds = 0xE7; } break; case '3': Delay.Milliseconds = 0xC9; break; case 'e': Delay.Milliseconds = 0xE17; break; case '8': Delay.Milliseconds = 0xE11; break; } } if (string.IsNullOrEmpty(param[2]) == false && string.IsNullOrEmpty(param[1]) == false && string.IsNullOrEmpty(param[0]) == false) { Server.WriteLine(string.Concat(e.sRealType, '|', e.sRealKey, '|', param[0], ';', param[1], ';', param[^ 1]));
internal override void OnReceiveRealData(_DKHOpenAPIEvents_OnReceiveRealDataEvent e) { if (Connect.HoldingStock.TryGetValue(e.sRealKey, out Holding hs)) { var param = base.OnReceiveRealData(e, fid); new Task(() => hs.OnReceiveEvent(param)).Start(); } }
internal override void OnReceiveRealData(_DKHOpenAPIEvents_OnReceiveRealDataEvent e) { string time = API.GetCommRealData(e.sRealKey, Fid[0]), current = API.GetCommRealData(e.sRealKey, Fid[1]), volume = API.GetCommRealData(e.sRealKey, Fid[6]); if (string.IsNullOrEmpty(volume) == false && string.IsNullOrEmpty(current) == false && string.IsNullOrEmpty(time) == false) { Server.WriteLine(string.Concat(e.sRealType, '|', e.sRealKey, '|', time, ';', current, ';', volume)); } }
internal override void OnReceiveRealData(_DKHOpenAPIEvents_OnReceiveRealDataEvent e) { string price = API.GetCommRealData(e.sRealKey, Fid[0]), offer = API.GetCommRealData(e.sRealKey, Fid[3]), bid = API.GetCommRealData(e.sRealKey, Fid[4]); if (string.IsNullOrEmpty(price) == false && string.IsNullOrEmpty(offer) == false && string.IsNullOrEmpty(bid) == false) { Server.WriteLine(string.Concat(e.sRealType, '|', e.sRealKey, '|', price, ';', offer, ';', bid)); } }
internal override void OnReceiveRealData(_DKHOpenAPIEvents_OnReceiveRealDataEvent e) { var param = base.OnReceiveRealData(e, Fid); if (string.IsNullOrEmpty(param[0]) == false && string.IsNullOrEmpty(param[1]) == false) { Server.WriteLine(string.Concat(e.sRealType, '|', e.sRealKey, '|', param[0], ';', param[1])); } }
public void UpdateRealData(_DKHOpenAPIEvents_OnReceiveRealDataEvent realEvent) { switch (realEvent.sRealType) { case "주식호가잔량": SetRealOrderBookInfo(realEvent.sRealType); break; } }
protected internal virtual string[] OnReceiveRealData(_DKHOpenAPIEvents_OnReceiveRealDataEvent e, int[] fid) { var param = new string[fid.Length]; for (int i = 0; i < fid.Length; i++) { param[i] = API.GetCommRealData(e.sRealKey, fid[i]); } return(param); }
public void OnReceiveRealDataEventHandler(object sender, _DKHOpenAPIEvents_OnReceiveRealDataEvent e) { if (OnReceiveRealDataUri != null) { JObject body = new JObject(); body["sRealKey"] = e.sRealKey; body["sRealType"] = e.sRealType; body["sRealData"] = e.sRealData; HttpContent content = new StringContent(body.ToString(), Encoding.UTF8, "application/json"); client.PostAsync(OnReceiveRealDataUri, content); } }
internal override void OnReceiveRealData(_DKHOpenAPIEvents_OnReceiveRealDataEvent e) { var data = e.sRealData.Split('\t'); if (string.IsNullOrEmpty(data[0]) is false && string.IsNullOrEmpty(data[1]) is false && string.IsNullOrEmpty(data[2]) is false) { if (Lite) { Server.WriteLine(string.Concat(e.sRealType, '|', e.sRealKey, '|', data[0], ';', data[1], ';', data[2])); } } }
private void OnReceiveRealData(object sender, _DKHOpenAPIEvents_OnReceiveRealDataEvent e) { sb = new StringBuilder(512); if (e.sRealType.Equals("선물시세")) { foreach (int fid in new 물시세()) { sb.Append(axAPI.GetCommRealData(e.sRealKey, fid)).Append(','); } Send?.Invoke(this, new Datum(sb)); return; } if (e.sRealType.Equals("선물호가잔량")) { foreach (int fid in new 물호가잔량()) { sb.Append(axAPI.GetCommRealData(e.sRealKey, fid)).Append(','); } string[] fg = sb.ToString().Split(','); if (int.Parse(fg[0]) > 153459) { if (fg[52].Contains("-")) { fg[52] = fg[52].Substring(1); } Send?.Invoke(this, new Datum(false, fg[0], double.Parse(fg[52]))); } return; } if (e.sRealType.Equals("장시작시간")) { foreach (int fid in new 장시작시간()) { sb.Append(axAPI.GetCommRealData(e.sRealKey, fid)).Append(','); } string[] tg = sb.ToString().Split(','); if (tg[0].Equals("e") && DeadLine == false) { DeadLine = true; Request(); } } }
internal override void OnReceiveRealData(_DKHOpenAPIEvents_OnReceiveRealDataEvent e) { if (Connect.HoldingStock.TryGetValue(e.sRealKey, out Holding hs)) { var param = base.OnReceiveRealData(e, fid); if (int.TryParse(param[0].StartsWith("-") ? param[0].Substring(1) : param[0], out int offer) && int.TryParse(param[1].StartsWith("-") ? param[1].Substring(1) : param[1], out int bid)) { hs.Offer = offer; hs.Bid = bid; } } }
internal override void OnReceiveRealData(_DKHOpenAPIEvents_OnReceiveRealDataEvent e) { if (Connect.HoldingStock.TryGetValue(e.sRealKey, out Holding hs)) { var param = base.OnReceiveRealData(e, fid); if (double.TryParse(param[1][0] == '-' ? param[1].Substring(1) : param[1], out double offer) && double.TryParse(param[2][0] == '-' ? param[2].Substring(1) : param[2], out double bid)) { hs.Offer = offer; hs.Bid = bid; } } }
internal override void OnReceiveRealData(_DKHOpenAPIEvents_OnReceiveRealDataEvent e) { string time = API.GetCommRealData(e.sRealKey, Fid[0]), current = API.GetCommRealData(e.sRealKey, Fid[1]), volume = API.GetCommRealData(e.sRealKey, Fid[6]); if (string.IsNullOrEmpty(volume) is false && string.IsNullOrEmpty(current) is false && string.IsNullOrEmpty(time) is false) { if (Connect.GetInstance().StocksHeld.TryGetValue(e.sRealKey, out Analysis analysis) && analysis.Trend is not null && analysis.Trend.Count > 0) { analysis.OnReceiveEvent(time, current, volume); } Server.WriteLine(string.Concat(e.sRealType, '|', e.sRealKey, '|', time, ';', current, ';', volume)); } }
internal override void OnReceiveRealData(_DKHOpenAPIEvents_OnReceiveRealDataEvent e) { var index = 0; var sb = new StringBuilder(API.GetCommRealData(e.sRealKey, Fid[index])); for (index = 0; index < 0x30; index++) { sb.Append(';').Append(API.GetCommRealData(e.sRealKey, Fid[index + 3])); } if (sb.Length > 0x1F) { Server.WriteLine(string.Concat(e.sRealType, '|', e.sRealKey, '|', sb)); } }
private void OnReceiveRealData(object sender, _DKHOpenAPIEvents_OnReceiveRealDataEvent e) { sb = new StringBuilder(512); foreach (int fid in Array.Find(catalog, o => o.ToString().Contains(e.sRealType))) { sb.Append(axAPI.GetCommRealData(e.sRealKey, fid)).Append(','); } if (e.sRealType.Equals(sRealType[0])) { SendTick?.Invoke(this, new TickEvent(sb)); SendDay?.Invoke(this, new DayEvent(sb)); return; } if (e.sRealType.Equals(sRealType[1]) && int.Parse(sb.ToString().Substring(0, 6)) > 153459) { string[] fg = sb.ToString().Split(','); if (fg[52].Contains("-")) { fg[52] = fg[52].Substring(1); } double price = double.Parse(fg[52]); SendTick?.Invoke(this, new TickEvent(false, fg[0], price, 0)); SendDay?.Invoke(this, new DayEvent(false, price)); return; } if (e.sRealType.Equals(sRealType[2])) { string[] tg = sb.ToString().Split(','); if (tg[0].Equals("e") && Deadline == false) { Deadline = true; Request(); SendExit?.Invoke(this, new ForceQuit(0)); } return; } sb = null; }
internal override void OnReceiveRealData(_DKHOpenAPIEvents_OnReceiveRealDataEvent e) { if (Connect.HoldingStock.TryGetValue(e.sRealKey, out Holding hs)) { var param = base.OnReceiveRealData(e, fid); if (int.TryParse(param[3][0] == '-' ? param[3].Substring(1) : param[3], out int offer) && int.TryParse(param[4][0] == '-' ? param[4].Substring(1) : param[4], out int bid) && int.TryParse(param[0][0] == '-' ? param[0].Substring(1) : param[0], out int current)) { hs.Current = current; hs.Offer = offer; hs.Bid = bid; } } }
internal override void OnReceiveRealData(_DKHOpenAPIEvents_OnReceiveRealDataEvent e) { var param = base.OnReceiveRealData(e, fid); int arg = int.MinValue; if (int.TryParse(param[1].Substring(0, 2), out int conclusion)) { switch (param[0]) { case "0": if (param[1].Equals(reservation)) { arg = (int)Operation.장시작전; Delay.Milliseconds = 0xE7; } break; case "3": foreach (var holding in Connect.HoldingStock) { holding.Value.WaitOrder = true; } arg = (int)Operation.장시작; DeadLine = true; Delay.Milliseconds = 0xC9; break; case "e" when DeadLine: arg = (int)Operation.옵_장마감전_동시호가_종료; DeadLine = false; Delay.Milliseconds = 0xE11; break; case "8": arg = (int)Operation.장마감; DeadLine = false; Delay.Milliseconds = 0xE12; break; } if (arg > int.MinValue) { Send?.Invoke(this, new SendSecuritiesAPI(arg, conclusion)); } } SendMessage(string.Concat(DeadLine, '_', param[0], '_', param[1], '_', param[2])); }
internal override void OnReceiveRealData(_DKHOpenAPIEvents_OnReceiveRealDataEvent e) { if (Connect.HoldingStock.TryGetValue(e.sRealKey, out Holding hs)) { var param = base.OnReceiveRealData(e, fid); new Task(() => hs.OnReceiveEvent(param)).Start(); } if (Connect.Futures != null && Connect.Futures.TryGetValue(e.sRealKey, out Analysis.OpenAPI.Collect collect)) { string temp = API.GetCommRealData(e.sRealKey, fid[6]), time = API.GetCommRealData(e.sRealKey, fid[0]); if (string.Compare(time, initiate) > 0 && string.Compare(time, closing) < 0 && int.TryParse(temp, out int volume) && volume != 0) { collect.ToCollect(time, new StringBuilder(API.GetCommRealData(e.sRealKey, fid[1])).Append(';').Append(temp)); } } }
private void API_OnReceiveRealData(object sender, _DKHOpenAPIEvents_OnReceiveRealDataEvent e) { sw.Reset(); sw.Start(); //e.sReadlData 는 참고용이므로 이걸 가지고 데이터를 만들면 안됨, GetCommRealData를 반드시 사용해야 함 var type = e.sRealType; //TypeName(ex,주식체결) var code = e.sRealKey; //종목코드 long Codeticks = sw.ElapsedTicks; long BeforeRealeticks = 0; long AfterRealeticks = 0; var Check = _instanceCollection.ContainsKey(type); var Check1 = _instanceCollection.ContainsKey(code); if (_instanceCollection.ContainsKey(type) && _instanceCollection[type].ContainsKey(code)) { var instance = _instanceCollection[type][code].Item1; var invoker = _instanceCollection[type][code].Item2; //GetRealData의 return은 Real_주식체결 Entity이다 // 이거 어케 동작하는지 해석 해야 함 // GetRealData함수 안에서 GetCommRealData호출하여 각종 FID정보 얻어내고 이걸 instance에 전부 매핑함 BeforeRealeticks = sw.ElapsedTicks; invoker?.Invoke(APIContext.API.GetRealData(instance)); AfterRealeticks = sw.ElapsedTicks; } long Instanceticks = sw.ElapsedTicks; //Debug.WriteLine($"[{type}({code})] : {e.sRealData}"); Console.WriteLine($"[{type}({code})] :: {e.sRealData}"); // sRealData는 참고용,정확도 떨어지므로 GetCommRealData로 가지고 와야 함 OnUpdateRealDataInfo(sender, null); sw.Stop(); long Resultticks = sw.ElapsedTicks; double us_Code = 1000000.0 * (double)Codeticks / Stopwatch.Frequency; double us_Before = 1000000.0 * (double)BeforeRealeticks / Stopwatch.Frequency; double us_After = 1000000.0 * (double)AfterRealeticks / Stopwatch.Frequency; double us_Instance = 1000000.0 * (double)Instanceticks / Stopwatch.Frequency; double us_Result = 1000000.0 * (double)Resultticks / Stopwatch.Frequency; Console.WriteLine($"Elapsed Time :: Code {us_Code}, BeforeGetRealData {us_Before}, AfterGetRealData {us_After} us_Instance {us_Instance}, Result {us_Result} us"); Console.WriteLine(""); //Console.WriteLine("End Time :: " + sw..ElapsedMilliseconds.ToString() + "msec"); }
private void OnReceiveRealData(object sender, _DKHOpenAPIEvents_OnReceiveRealDataEvent e) { sb = new StringBuilder(512); int index = Array.FindIndex(Enum.GetNames(typeof(IRealType.RealType)), o => o.Equals(e.sRealType)); foreach (int fid in type.Catalog[index]) { sb.Append(axAPI.GetCommRealData(e.sRealKey, fid)).Append(';'); } switch (index) { case 1: if (e.sRealKey.Substring(0, 3).Equals("101")) { SendDatum?.Invoke(this, new Datum(sb)); } break; case 5: string[] find = sb.ToString().Split(';'); OptionsCalling[e.sRealKey] = double.Parse(find[1].Contains("-") ? find[1].Substring(1) : find[1]); break; case 7: if (sb.ToString().Substring(0, 1).Equals("e") && DeadLine == false) { DeadLine = true; Delay.delay = 4150; if (RemainingDate.Equals(DateTime.Now.ToString("yyyyMMdd"))) { Squence = 0; axAPI.SetRealRemove("ALL", axAPI.GetFutureCodeByIndex(1)); RemainingDay(axAPI.GetFutureCodeByIndex(0)); TimerBox.Show("Futures Options Expiration Date.\n\nThe Data can be Mixed.", "Caution", MessageBoxButtons.OK, MessageBoxIcon.Exclamation, 7651); } Request(Code[0].Substring(0, 8)); new TheOld().ForsakeOld(Path.Combine(Application.StartupPath, @"..\Log\")); } break; } }
internal override void OnReceiveRealData(_DKHOpenAPIEvents_OnReceiveRealDataEvent e) { var data = e.sRealData.Split('\t'); var index = 0; if (Lite) { var sb = new StringBuilder(data[index]); for (index = 0; index < 0x30; index++) { sb.Append(';').Append(data[index + 3]); } if (sb.Length > 0x1F) { Server.WriteLine(string.Concat(e.sRealType, '|', e.sRealKey, '|', sb)); } } }