Ejemplo n.º 1
0
        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));
            }
        }
Ejemplo n.º 2
0
        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;
                }
            }
        }
Ejemplo n.º 3
0
        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);
        }
Ejemplo n.º 4
0
        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));
        }
Ejemplo n.º 5
0
        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));
        }
Ejemplo n.º 6
0
        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));
        }
Ejemplo n.º 7
0
        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);
                }
            });
        }
Ejemplo n.º 8
0
        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;
            }
        }
Ejemplo n.º 9
0
        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;
            }
        }