protected internal override void OnReceiveRealData(string szTrCode) { string[] arr = Enum.GetNames(typeof(CMO)), temp = new string[arr.Length]; for (int i = 0; i < arr.Length - 1; i++) { temp[i] = GetFieldData(OutBlock, arr[i]); } if (temp[8].Equals(Enum.GetName(typeof(TR), TR.CONET801)) && double.TryParse(temp[60], out double price)) { switch (temp[55]) { case sell: API.SellOrder[temp[45]] = price; break; case buy: API.BuyOrder[temp[45]] = price; break; } API.OnReceiveBalance = true; SendState?.Invoke(this, new State(API.OnReceiveBalance, API.SellOrder.Count, API.Quantity, API.BuyOrder.Count, API.AvgPurchase, API.MaxAmount)); } }
void Quotes10Click(object sender, EventArgs e) { if (quotes10.ForeColor.Equals(Color.Gold) == false) { SendState?.Invoke(this, new EventHandler.XingAPI.OnReceiveOperatingState(quotes10.ForeColor)); if (quotes10.Text.Length == 0) { quotes10.Text = chapterOperatingHours; } } }
void OnReceiveMsg(object sender, _DKHOpenAPIEvents_OnReceiveMsgEvent e) { if (Array.Exists(basic, o => o.Equals(e.sMsg.Substring(9)))) { var temp = e.sMsg.Substring(9); if ((temp.Equals(basic[2]) || temp.Equals(basic[6]) || temp.Equals(basic[8])) && OnReceiveBalance == false) { OnReceiveBalance = request.QueueCount == 0 ? true : false; } if (e.sMsg.Contains("모의투자")) { temp = temp.Replace("모의투자 ", string.Empty); } if (e.sMsg.Last().Equals('다') || e.sMsg.Last().Equals('요')) { temp = string.Concat(temp, "."); } SendState?.Invoke(this, new State(OnReceiveBalance, SellOrder.Count, Quantity, BuyOrder.Count, ScreenNumber)); SendCount?.Invoke(this, new NotifyIconText(temp)); return; } if (e.sMsg.Equals(TR)) { SendMemorize?.Invoke(this, new Memorize("Clear")); Request(GetRandomCode(new Random().Next(0, CodeList.Count))); return; } if (e.sMsg.Equals(Failure)) { Process.Start("shutdown.exe", "-r"); Dispose(); return; } if (e.sMsg.Contains(Response) && TimerBox.Show(string.Concat(Response, "."), GoblinBat, MessageBoxButtons.OKCancel, MessageBoxIcon.Information, MessageBoxDefaultButton.Button2, 1375).Equals(DialogResult.OK)) { return; } if (e.sMsg.Substring(9).Equals(LookUp)) { return; } new ExceptionMessage(e.sMsg); }
protected internal override void OnReceiveData(string szTrCode) { var enumerable = GetOutBlocks(); var temp = new string[enumerable.Count]; while (enumerable.Count > 0) { var param = enumerable.Dequeue(); for (int i = 0; i < GetBlockCount(param.Block); i++) { temp[temp.Length - enumerable.Count - 1] = GetFieldData(param.Block, param.Field, i); } } SendState?.Invoke(this, new State(API.OnReceiveBalance, API.SellOrder.Count, API.Quantity, API.BuyOrder.Count, API.AvgPurchase, API.MaxAmount)); }
protected internal override void OnReceiveRealData(string szTrCode) { API.OnReceiveBalance = false; string[] arr = Enum.GetNames(typeof(C1)), temp = new string[arr.Length]; for (int i = 0; i < arr.Length - 1; i++) { temp[i] = GetFieldData(OutBlock, arr[i]); } if (uint.TryParse(temp[9], out uint number)) { switch (temp[20]) { case sell: if (int.TryParse(temp[14], out int sq) && double.TryParse(temp[13], out double sp) && API.SellOrder.Remove(number.ToString())) { if (API.Quantity <= 0) { API.AvgPurchase = ((sp * sq - double.Parse(API.AvgPurchase) * API.Quantity) / (sq - API.Quantity)).ToString("F2"); } API.Quantity -= sq; } break; case buy: if (int.TryParse(temp[14], out int bq) && double.TryParse(temp[13], out double bp) && API.BuyOrder.Remove(number.ToString())) { if (API.Quantity >= 0) { API.AvgPurchase = ((double.Parse(API.AvgPurchase) * API.Quantity + bp * bq) / (bq + API.Quantity)).ToString("F2"); } API.Quantity += bq; } break; } } if (API.Quantity == 0) { API.AvgPurchase = avg; } API.OnReceiveBalance = true; SendState?.Invoke(this, new State(API.OnReceiveBalance, API.SellOrder.Count, API.Quantity, API.BuyOrder.Count, API.AvgPurchase, API.MaxAmount)); }
protected internal override void OnReceiveRealData(string szTrCode) { string[] arr = Enum.GetNames(typeof(CMO)), temp = new string[arr.Length]; for (int i = 0; i < arr.Length - 1; i++) { temp[i] = GetFieldData(OutBlock, arr[i]); } if (temp[56].Equals(sell) && uint.TryParse(temp[45], out uint number) && uint.TryParse(temp[47], out uint org) && double.TryParse(temp[60], out double price)) { switch (temp[55]) { case sell: if (API.SellOrder.Remove(org.ToString())) { API.SellOrder[number.ToString()] = price; } break; case buy: if (API.BuyOrder.Remove(org.ToString())) { API.BuyOrder[number.ToString()] = price; } break; } } else if (temp[56].Equals(buy) && uint.TryParse(temp[47], out uint ord)) { switch (temp[55]) { case sell: API.SellOrder.Remove(ord.ToString()); break; case buy: API.BuyOrder.Remove(ord.ToString()); break; } } API.OnReceiveBalance = true; SendState?.Invoke(this, new State(API.OnReceiveBalance, API.SellOrder.Count, API.Quantity, API.BuyOrder.Count, API.AvgPurchase, API.MaxAmount)); }
private void TimerHandler(object obj) { ParallelLoopResult result = Parallel.ForEach(_liveAuctions, (x) => { x.Value.Ticks--; if (x.Value.Ticks >= 0) { SendState?.Invoke(x.Value.AuctionId, x.Value.Ticks, x.Value.CurrentPrice, x.Value.LastUser); } else { SetWinner?.Invoke(x.Value.AuctionId, x.Value.Ticks, x.Value.CurrentPrice, x.Value.LastUser); _waitedAuctions.Remove(x.Value.AuctionId); } }); }
void OnReceiveChejanData(object sender, _DKHOpenAPIEvents_OnReceiveChejanDataEvent e) { var sb = new StringBuilder(256); var index = int.Parse(e.sGubun); foreach (int fid in catalogReal[index]) { sb.Append(API.GetChejanData(fid)).Append(';'); } var param = sb.ToString().Split(';'); switch (index) { case 0: if (param[3].Equals(Code)) { switch (param[5]) { case "체결": if (param[14].Equals("1") ? SellOrder.Remove(param[1]) : BuyOrder.Remove(param[1])) { OnReceiveBalance = false; } break; case "접수": if (int.Parse(param[11]) == 0) { OnReceiveBalance = request.QueueCount == 0; } break; case "확인": if (param[12].Substring(3).Equals("취소") || param[12].Substring(3).Equals("정정")) { OnReceiveBalance = request.QueueCount == 0; } break; } SendState?.Invoke(this, new State(OnReceiveBalance, SellOrder.Count, Quantity, BuyOrder.Count, ScreenNumber)); } return; case 1: return; case 4: if (param[1].Equals(Code)) { Quantity = param[9].Equals("1") ? -int.Parse(param[4]) : int.Parse(param[4]); AvgPurchase = param[5]; OnReceiveBalance = request.QueueCount == 0; SendState?.Invoke(this, new State(OnReceiveBalance, SellOrder.Count, Quantity, BuyOrder.Count, ScreenNumber)); } return; } }
void OnReceiveTrData(object sender, _DKHOpenAPIEvents_OnReceiveTrDataEvent e) { int index = Array.FindIndex(catalogTR, o => o.ToString().Contains(e.sTrCode.Substring(1))); if (index < 1) { new ExceptionMessage(e.sTrCode); return; } if (index < 5 && index > 0) { var temp = API.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++) { var 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.Split(';')[1].Equals(ts[x, y].Substring(2))) { sb = Exists; e.sPrevNext = "0"; break; } sb.Append(ts[x, y]).Append(';'); } if (Exists.Equals(sb) == false) { SendMemorize?.Invoke(this, new Memorize(sb)); continue; } if (Exists.Equals(sb)) { break; } } if (DeadLine && (e.sRQName.Split(';')[1].Length == 8 || e.sRQName.Split(';')[1].Equals("DoesNotExist")) && e.sPrevNext.Equals("2")) { request.RequestTrData(new Task(() => InputValueRqData(new Opt10081 { Value = e.sRQName.Split(';')[0], RQName = e.sRQName, PrevNext = 2 }))); return; } if (DeadLine == false && e.sRQName.Split(';')[0].Length == 6 && e.sPrevNext.Equals("2")) { request.RequestTrData(new Task(() => InputValueRqData(new Opt10079 { Value = e.sRQName.Split(';')[0], RQName = e.sRQName, PrevNext = 2 }))); return; } if (DeadLine == false && e.sRQName.Substring(5, 3).Equals("000") && e.sPrevNext.Equals("2")) { request.RequestTrData(new Task(() => InputValueRqData(new Opt50028 { Value = e.sRQName.Substring(0, 8), RQName = e.sRQName, PrevNext = 2 }))); return; } if (DeadLine == false && e.sRQName.Split(';')[0].Length == 8 && 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.Split(';')[0])); } } SetScreenNumber(9000, 9031); SendMemorize?.Invoke(this, new Memorize("Clear")); Request(GetRandomCode(new Random().Next(0, CodeList.Count))); return; } var str = new StringBuilder(512); int i, cnt = API.GetRepeatCnt(e.sTrCode, e.sRQName); for (i = 0; i < (cnt > 0 ? cnt : cnt + 1); i++) { foreach (string item in Array.Find(catalogTR, o => o.ToString().Contains(e.sTrCode.Substring(1)))) { str.Append(API.GetCommData(e.sTrCode, e.sRQName, i, item).Trim()).Append(';'); } if (cnt > 0) { str.Append("*"); } } switch (Array.FindIndex(catalogTR, o => o.ToString().Contains(e.sTrCode.Substring(1)))) { case 5: FixUp(str.ToString().Split(';'), e.sRQName); return; case 6: foreach (string info in str.ToString().Split('*')) { FixUp(info.Split(';')); } return; case 7: case 8: if (str.Length > 1 && e.sRQName.Equals("DoNotRollOver") == false) { if (e.sScrNo.Substring(0, 1).Equals("1")) { SellOrder[str.ToString().Split(';')[0]] = double.Parse(e.sRQName.Split(';')[0]); } else if (e.sScrNo.Substring(0, 1).Equals("2")) { BuyOrder[str.ToString().Split(';')[0]] = double.Parse(e.sRQName.Split(';')[0]); } } SendState?.Invoke(this, new State(OnReceiveBalance, SellOrder.Count, Quantity, BuyOrder.Count, ScreenNumber)); return; case 9: SendState?.Invoke(this, new State(OnReceiveBalance, SellOrder.Count, Quantity, BuyOrder.Count, ScreenNumber)); return; case 10: SendDeposit?.Invoke(this, new Deposit(str.ToString().Split(';'))); break; case 11: new Task(() => { var temporary = str.ToString().Split('*'); for (i = 0; i < temporary.Length; i++) { if (temporary[i].Length > 0 && temporary[i].Substring(0, 8).Equals(API.GetFutureCodeByIndex(0))) { var quantity = temporary[i].Split(';'); Quantity = quantity[2].Equals("1") ? -int.Parse(quantity[3]) : int.Parse(quantity[3]); AvgPurchase = (double.Parse(quantity[4]) / 100).ToString("F2"); } } SendBalance?.Invoke(this, new Balance(temporary)); }).Start(); break; } }