Exemplo n.º 1
0
        private void ReceiveRealData_OMG(XARealClass myXARealClass)
        {
            label1.Text = string.Format("{0:0#:##:##}", int.Parse(myXARealClass.GetFieldData("OutBlock", "chetime")));
            DataRow row;
            string  code = myXARealClass.GetFieldData("OutBlock", "optcode");

            if (code.Contains("201"))
            {
                row = CallTable.Rows[CallCodeList.IndexOf(code)];
            }
            else
            {
                row = PutTable.Rows[PutCodeList.IndexOf(code)];
            }

            row["iv"]   = myXARealClass.GetFieldData("OutBlock", "impv");               //내재변동성
            row["delt"] = myXARealClass.GetFieldData("OutBlock", "delt");               //델타(블랙숄즈)
            row["gama"] = myXARealClass.GetFieldData("OutBlock", "gama");               //감마(블랙숄즈)
            row["vega"] = myXARealClass.GetFieldData("OutBlock", "vega");               //베가(블랙숄즈)
            row["ceta"] = myXARealClass.GetFieldData("OutBlock", "ceta");               //세타(블랙숄즈)
            row["rhox"] = myXARealClass.GetFieldData("OutBlock", "rhox");               //로우(블랙숄즈)

            row["ceta"]        = myXARealClass.GetFieldData("OutBlock", "ceta");        //세타(블랙숄즈)
            row["theoryprice"] = myXARealClass.GetFieldData("OutBlock", "theoryprice"); //이론가(블랙숄즈)
        }
Exemplo n.º 2
0
        private void ReceveRealData_OC0(XARealClass myXARealClass)
        {
            double 현재가  = double.Parse(myXARealClass.GetFieldData("OutBlock", "price"));
            string Code = myXARealClass.GetFieldData("OutBlock", "optcode").Trim();

            손익계산(Code, 현재가);
        }
Exemplo n.º 3
0
        void S3__ReceiveRealData(string szTrCode)
        {
            string 단축코드 = S3_.GetFieldData("OutBlock", "shcode").Trim();
            string 현재가  = S3_.GetFieldData("OutBlock", "price");

            foreach (DataRow row in table_잔고현황.Select("종목코드 = '" + 단축코드 + "'"))
            {
                row["현재가"] = 현재가;
                평가손익계산(row);
            }
        }
Exemplo n.º 4
0
        void SC3_ReceiveRealData(string szTrCode)                 //주식주문취소
        {
            string accno = SC3.GetFieldData("OutBlock", "accno"); //계좌번호

            if (계좌번호 != accno)
            {
                return;
            }

            string code       = from표준to단축(SC3.GetFieldData("OutBlock", "Isuno").Trim());       //종목코드
            string orgordno   = int.Parse(SC3.GetFieldData("OutBlock", "orgordno")).ToString(); //원주문번호
            string canccnfqty = SC3.GetFieldData("OutBlock", "canccnfqty");                     //취소확인수량
            string bnstp      = "매도";

            if (SC3.GetFieldData("OutBlock", "bnstp") == "2")//매도수구분 1 매도, 2 매수
            {
                bnstp = "매수";
            }

            for (int i = table_미체결현황.Rows.Count - 1; i >= 0; i--)
            {
                if (int.Parse(table_미체결현황.Rows[i]["주문번호"].ToString()) == int.Parse(orgordno))//주문번호와 원주문 번호를 비교 해야 함.
                {
                    int 미체결수량 = int.Parse(table_미체결현황.Rows[i]["미체결수량"].ToString());
                    if (미체결수량 > int.Parse(canccnfqty))//일부 취소
                    {
                        table_미체결현황.Rows[i]["미체결수량"] = 미체결수량 - int.Parse(canccnfqty);
                    }
                    else//전부 취소
                    {
                        table_미체결현황.Rows.RemoveAt(i);
                    }

                    //매도취소 ==> 잔고현황의 매도가능수량에대한 복구
                    //if (table_미체결현황.Rows[i]["매매구분"].ToString() == "매도")
                    if (bnstp == "매도")
                    {
                        foreach (DataRow row in table_잔고현황.Select("종목코드 = '" + code + "'"))
                        {
                            row["매도가능수량"] = int.Parse(row["매도가능수량"].ToString()) + int.Parse(canccnfqty);
                        }
                    }

                    break;
                }
            }
        }
Exemplo n.º 5
0
        private void ReceiveRealData_OH0(XARealClass myXARealClass)
        {
            label1.Text = string.Format("{0:0#:##:##}", int.Parse(myXARealClass.GetFieldData("OutBlock", "hotime")));
            DataRow row;
            string  code = myXARealClass.GetFieldData("OutBlock", "optcode");

            if (code.Contains("201"))
            {
                row = CallTable.Rows[CallCodeList.IndexOf(code)];
            }
            else
            {
                row = PutTable.Rows[PutCodeList.IndexOf(code)];
            }

            row["offerrem1"] = myXARealClass.GetFieldData("OutBlock", "offerrem1"); //매도호가수량1
            row["bidrem1"]   = myXARealClass.GetFieldData("OutBlock", "bidrem1");   //매수호가수량1
        }
Exemplo n.º 6
0
        private void ReceveRealData_C01(XARealClass myXARealClass)//선물주문체결(Real)--주문 체결 과 관련된 처리를 함.
        {
            if (cmb_AccNum.SelectedItem.ToString().Trim() != myXARealClass.GetFieldData("OutBlock", "accno").Trim())
            {
                return;
            }
            string  ordno = myXARealClass.GetFieldData("OutBlock", "ordno");//주문번호
            DataRow row   = table.Select("ordno = '" + ordno + "'")[0];

            double cheprice = double.Parse(myXARealClass.GetFieldData("OutBlock", "cheprice")); //체결가격
            double chevol   = double.Parse(myXARealClass.GetFieldData("OutBlock", "chevol"));   //체결수량
            double 체결량      = double.Parse(row["cheqty"].ToString());
            double 체결가      = double.Parse(row["cheprice"].ToString());
            double 미체결량     = double.Parse(row["ordrem"].ToString());

            row["cheprice"] = Math.Round((cheprice * chevol + 체결가 * 체결량) / (체결량 + chevol), 4);//체결량 가중평균
            row["cheqty"]   = Math.Round(체결량 + chevol, 0);
            row["ordrem"]   = Math.Round(미체결량 - chevol, 0);
            row["status"]   = "완료";
            Grid표시();
        }
Exemplo n.º 7
0
        void SC2_ReceiveRealData(string szTrCode)                 //주식주문정정
        {
            string accno = SC2.GetFieldData("OutBlock", "accno"); //계좌번호

            if (계좌번호 != accno)
            {
                return;
            }

            string ordno    = int.Parse(SC2.GetFieldData("OutBlock", "ordno")).ToString();    //주문번호
            string orgordno = int.Parse(SC2.GetFieldData("OutBlock", "orgordno")).ToString(); //원주문번호
            string code     = from표준to단축(SC2.GetFieldData("OutBlock", "Isuno").Trim());       //종목코드
            string 종목명      = SC2.GetFieldData("OutBlock", "Isunm");
            string dosugb   = "매도";

            if (SC2.GetFieldData("OutBlock", "bnstp") == "2")//매도수구분 1 매도, 2 매수
            {
                dosugb = "매수";
            }
            string mdfycnfqty = SC2.GetFieldData("OutBlock", "mdfycnfqty"); //정정확인수량
            string mdfycnfprc = SC2.GetFieldData("OutBlock", "mdfycnfprc"); //정정확인가격

            for (int i = table_미체결현황.Rows.Count - 1; i >= 0; i--)
            {
                if (int.Parse(table_미체결현황.Rows[i]["주문번호"].ToString()) == int.Parse(orgordno))//주문번호와 원주문 번호를 비교 해야 함.
                {
                    int 미체결수량 = int.Parse(table_미체결현황.Rows[i]["미체결수량"].ToString());
                    if (미체결수량 > int.Parse(mdfycnfqty))//일부 정정
                    {
                        table_미체결현황.Rows[i]["미체결수량"] = 미체결수량 - int.Parse(mdfycnfqty);
                    }
                    else//전부 정정
                    {
                        table_미체결현황.Rows.RemoveAt(i);
                    }

                    DataRow newrow = table_미체결현황.NewRow();
                    newrow["주문번호"]  = ordno;
                    newrow["종목코드"]  = code;
                    newrow["종목명"]   = 종목명;
                    newrow["매매구분"]  = dosugb;
                    newrow["주문가격"]  = mdfycnfprc;
                    newrow["주문수량"]  = mdfycnfqty;
                    newrow["미체결수량"] = mdfycnfqty;
                    table_미체결현황.Rows.InsertAt(newrow, 0);

                    break;
                }
            }
        }
Exemplo n.º 8
0
        private void ReceveRealData_H01(XARealClass myXARealClass)//선물주문정정취소(Real)--정정/취소 확인 부분만 처리됨
        {
            if (cmb_AccNum.SelectedItem.ToString().Trim() != myXARealClass.GetFieldData("OutBlock", "accno").Trim())
            {
                return;
            }

            if (myXARealClass.GetFieldData("OutBlock", "trcode").Trim() == "TTRODP11301" && (myXARealClass.GetFieldData("OutBlock", "mocagb").Trim() == "2" || myXARealClass.GetFieldData("OutBlock", "mocagb").Trim() == "3"))
            {
                string ordno    = int.Parse(myXARealClass.GetFieldData("OutBlock", "ordno")).ToString();    //주문번호
                string orgordno = int.Parse(myXARealClass.GetFieldData("OutBlock", "orgordno")).ToString(); //원주문번호
                string qty      = myXARealClass.GetFieldData("OutBlock", "qty");                            //실정정취소수량

                DataRow row_원주문 = table.Select("ordno = '" + orgordno + "'")[0];
                row_원주문["ordrem"] = int.Parse(row_원주문["ordrem"].ToString()) - int.Parse(qty);

                DataRow row_주문 = table.Select("ordno = '" + ordno + "'")[0];
                row_주문["status"] = row_주문["status"].ToString().Replace("주문", "확인");
                if (myXARealClass.GetFieldData("OutBlock", "mocagb") == "3")//정정취소구분 1 신규, 2 정정, 3 취소
                {
                    row_주문["ordrem"] = 0;
                }
            }

            Grid표시();
        }
Exemplo n.º 9
0
        void SC0_ReceiveRealData(string szTrCode)                 //주식주문접수
        {
            string accno = SC0.GetFieldData("OutBlock", "accno"); //계좌번호

            if (계좌번호 != accno)
            {
                return;
            }

            string trcode = SC0.GetFieldData("OutBlock", "trcode"); //TRCODE  //SONAT000:신규주문, SONAT001:정정주문, SONAT002:취소주문

            if (trcode != "SONAT000")                               //신규주문 접수에 대해서만 처리한다.
            {
                return;
            }

            string ordno   = int.Parse(SC0.GetFieldData("OutBlock", "ordno")).ToString();     //주문번호
            string shtcode = SC0.GetFieldData("OutBlock", "shtcode").Replace("A", "").Trim(); //단축종목번호
            string hname   = SC0.GetFieldData("OutBlock", "hname");                           //종목명
            string bnstp   = "매도";

            if (SC0.GetFieldData("OutBlock", "bnstp") == "2")//매매구분 1:매도, 2:매수
            {
                bnstp = "매수";
            }
            string ordqty   = SC0.GetFieldData("OutBlock", "ordqty");   //주문수량
            string ordprice = SC0.GetFieldData("OutBlock", "ordprice"); //주문가격

            //잔고현황의 매도가능수량 갱신
            if (bnstp == "매도")
            {
                foreach (DataRow row in table_잔고현황.Select("종목코드 = '" + shtcode + "'"))
                {
                    row["매도가능수량"] = int.Parse(row["매도가능수량"].ToString()) - int.Parse(ordqty);
                }
            }

            //미체결 현황 갱신.
            DataRow newrow = table_미체결현황.NewRow();

            newrow["주문번호"]  = ordno;
            newrow["종목코드"]  = shtcode;
            newrow["종목명"]   = hname;
            newrow["매매구분"]  = bnstp;
            newrow["주문가격"]  = ordprice;
            newrow["주문수량"]  = ordqty;
            newrow["미체결수량"] = ordqty;
            table_미체결현황.Rows.InsertAt(newrow, 0);
        }
Exemplo n.º 10
0
        void SC1_ReceiveRealData(string szTrCode)//주식주문체결
        {
            string 계좌번호 = SC1.GetFieldData("OutBlock", "accno");

            if (계좌번호 != this.계좌번호)
            {
                return;
            }
            string 주문번호 = int.Parse(SC1.GetFieldData("OutBlock", "ordno")).ToString();
            string 종목코드 = from표준to단축(SC1.GetFieldData("OutBlock", "Isuno").Trim());
            string 종목명  = SC1.GetFieldData("OutBlock", "Isunm");
            string 체결가격 = SC1.GetFieldData("OutBlock", "execprc");
            string 체결수량 = SC1.GetFieldData("OutBlock", "execqty");
            string 매매구분 = "매도";

            if (SC1.GetFieldData("OutBlock", "bnstp") == "2")
            {
                매매구분 = "매수";
            }

            //잔고현황 갱신
            bool 처리완료 = false;

            for (int i = table_잔고현황.Rows.Count - 1; i >= 0; i--)
            {
                if (table_잔고현황.Rows[i]["종목코드"].ToString() == 종목코드)
                {
                    처리완료 = true;

                    if (매매구분 == "매수")//추가진입
                    {
                        table_잔고현황.Rows[i]["평균단가"] = (double.Parse(table_잔고현황.Rows[i]["평균단가"].ToString()) * double.Parse(table_잔고현황.Rows[i]["잔고수량"].ToString()) + double.Parse(체결가격) * double.Parse(체결수량)) / (double.Parse(table_잔고현황.Rows[i]["잔고수량"].ToString()) + double.Parse(체결수량));

                        table_잔고현황.Rows[i]["잔고수량"]   = int.Parse(table_잔고현황.Rows[i]["잔고수량"].ToString()) + int.Parse(체결수량);
                        table_잔고현황.Rows[i]["매도가능수량"] = int.Parse(table_잔고현황.Rows[i]["매도가능수량"].ToString()) + int.Parse(체결수량);
                    }
                    else//청산
                    {
                        table_잔고현황.Rows[i]["잔고수량"] = int.Parse(table_잔고현황.Rows[i]["잔고수량"].ToString()) - int.Parse(체결수량);
                        if (int.Parse(table_잔고현황.Rows[i]["잔고수량"].ToString()) == 0)//전부청산
                        {
                            table_잔고현황.Rows.RemoveAt(i);
                            현재가요청해제(종목코드);
                        }
                    }
                }
            }
            if (!처리완료)
            {
                DataRow newrow = table_잔고현황.NewRow();
                newrow["종목코드"]   = 종목코드;
                newrow["종목명"]    = 종목명;
                newrow["잔고수량"]   = 체결수량;
                newrow["매도가능수량"] = 체결수량;
                newrow["평균단가"]   = 체결가격;
                newrow["현재가"]    = "";
                newrow["평가손익"]   = "";
                table_잔고현황.Rows.Add(newrow);

                현재가요청(종목코드);
            }

            string 주문수량 = "";
            string 주문가격 = "";

            //미체결현황 갱신
            처리완료 = false;
            for (int i = table_미체결현황.Rows.Count - 1; i >= 0; i--)
            {
                if (int.Parse(table_미체결현황.Rows[i]["주문번호"].ToString()) == int.Parse(주문번호))
                {
                    처리완료 = true;
                    주문수량 = table_미체결현황.Rows[i]["주문수량"].ToString();
                    주문가격 = table_미체결현황.Rows[i]["주문가격"].ToString();
                    table_미체결현황.Rows[i]["미체결수량"] = int.Parse(table_미체결현황.Rows[i]["미체결수량"].ToString()) - int.Parse(체결수량);
                    if (int.Parse(table_미체결현황.Rows[i]["미체결수량"].ToString()) <= 0)
                    {
                        table_미체결현황.Rows.RemoveAt(i);
                    }
                    break;
                }
            }
            if (!처리완료)
            {
                MessageBox.Show("미체결현황에 없는 주문체결임(주문번호 : " + 주문번호 + ", 종목명 : " + 종목명 + ")");
            }

            //체결현황 갱신
            처리완료 = false;
            for (int i = 0; i < table_체결현황.Rows.Count; i++)
            {
                if (int.Parse(table_체결현황.Rows[i]["주문번호"].ToString()) == int.Parse(주문번호))
                {
                    처리완료 = true;
                    table_체결현황.Rows[i]["체결가격"] = (double.Parse(table_체결현황.Rows[i]["체결가격"].ToString()) * double.Parse(table_체결현황.Rows[i]["체결수량"].ToString()) + double.Parse(체결가격) * double.Parse(체결수량)) / (double.Parse(table_체결현황.Rows[i]["체결수량"].ToString()) + double.Parse(체결수량));
                    table_체결현황.Rows[i]["체결수량"] = int.Parse(table_체결현황.Rows[i]["체결수량"].ToString()) + int.Parse(체결수량);
                    break;
                }
            }

            if (!처리완료)
            {
                DataRow newrow = table_체결현황.NewRow();
                newrow["주문번호"] = 주문번호;
                newrow["종목코드"] = 종목코드;
                newrow["종목명"]  = 종목명;
                newrow["매매구분"] = 매매구분;
                newrow["주문가격"] = 주문가격;
                newrow["주문수량"] = 주문수량;
                newrow["체결가격"] = 체결가격;
                newrow["체결수량"] = 체결수량;
                table_체결현황.Rows.InsertAt(newrow, 0);
            }
        }
Exemplo n.º 11
0
        private void ReceveRealData_O01(XARealClass myXARealClass)//선물접수(Real)--매도/매수/정정/취소 주문 접수 처리됨
        {
            if (cmb_AccNum.SelectedItem.ToString().Trim() != myXARealClass.GetFieldData("OutBlock", "accno").Trim())
            {
                return;
            }

            DataRow newrow = table.NewRow();

            newrow["ordno"]    = myXARealClass.GetFieldData("OutBlock", "ordno");    //주문번호
            newrow["orgordno"] = myXARealClass.GetFieldData("OutBlock", "orgordno"); //원주문번호
            newrow["expcode"]  = myXARealClass.GetFieldData("OutBlock", "fnoIsuno"); //선물옵션종목번호

            string bnstp = myXARealClass.GetFieldData("OutBlock", "bnstp");          //매매구분  //1:매도 2:매수

            if (bnstp == "1")
            {
                bnstp = "매도";
            }
            else if (bnstp == "2")
            {
                bnstp = "매수";
            }

            string trcode = myXARealClass.GetFieldData("OutBlock", "trcode");//TRCODE  //SONBT001:신규주문  SONBT002:정정주문  SONBT003:취소주문

            if (trcode == "SONBT002")
            {
                trcode = "정정";
            }
            else if (trcode == "SONBT003")
            {
                trcode = "취소";
            }
            else
            {
                trcode = "";
            }

            newrow["medosu"] = bnstp + trcode;

            string hogatype = myXARealClass.GetFieldData("OutBlock", "hogatype");   //호가유형코드

            switch (hogatype)
            {
            case "00":
                hogatype = "지정가";
                break;

            case "03":
                hogatype = "시장가";
                break;

            case "05":
                hogatype = "조건부지정가";
                break;

            case "06":
                hogatype = "최유리지정가";
                break;

            case "10":
                hogatype = "지정가(IOC)";
                break;

            case "20":
                hogatype = "지정가(FOK)";
                break;

            case "13":
                hogatype = "시장가(IOC)";
                break;

            case "23":
                hogatype = "시장가(FOK)";
                break;

            case "16":
                hogatype = "최유리지정가(IOC)";
                break;

            case "26":
                hogatype = "최유리지정가(FOK)";
                break;
            }

            newrow["ordgb"] = hogatype;

            newrow["qty"]   = myXARealClass.GetFieldData("OutBlock", "ordqty");      //주문수량
            newrow["price"] = myXARealClass.GetFieldData("OutBlock", "ordprc");      //주문가격

            newrow["cheqty"]   = myXARealClass.GetFieldData("OutBlock", "execqty");  //체결수량
            newrow["cheprice"] = myXARealClass.GetFieldData("OutBlock", "execprc");  //체결가격
            newrow["ordrem"]   = myXARealClass.GetFieldData("OutBlock", "unercqty"); //미체결수량

            string trcode1 = myXARealClass.GetFieldData("OutBlock", "trcode1");      //tr코드

            switch (trcode1)
            {
            case "FO01":
                trcode1 = "접수";    //정상주문
                break;

            case "FO02":
                trcode1 = "정정주문";
                break;

            case "FO03":
                trcode1 = "취소주문";
                break;

            case "HO01":
                trcode1 = "확인";
                break;

            case "CH01":
                trcode1 = "체결";
                break;
            }
            newrow["status"]  = trcode1;
            newrow["ordtime"] = myXARealClass.GetFieldData("OutBlock", "trxtime");//처리시각

            table.Rows.InsertAt(newrow, 0);

            Grid표시();
        }
Exemplo n.º 12
0
        void H01_ReceiveRealData(string szTrCode)                 //정정/취소
        {
            string accno = H01.GetFieldData("OutBlock", "accno"); //계좌번호

            if (계좌번호 != accno)
            {
                return;
            }

            string trcode   = H01.GetFieldData("OutBlock", "trcode");                         //trcode  회원처리호가  (정상) : TTRODP11301, (거부) : TTRODP11321, (자동취소) : TTRODP11303
            string ordno    = int.Parse(H01.GetFieldData("OutBlock", "ordno")).ToString();    //주문번호
            string orgordno = int.Parse(H01.GetFieldData("OutBlock", "orgordno")).ToString(); //원주문번호
            string code     = from표준to단축(H01.GetFieldData("OutBlock", "expcode"));            //종목코드
            string 종목명      = 종목명불러오기(code);
            string dosugb   = "매도";

            if (H01.GetFieldData("OutBlock", "dosugb") == "2")//매도수구분 1 매도, 2 매수
            {
                dosugb = "매수";
            }
            string mocagb  = H01.GetFieldData("OutBlock", "mocagb");  //정정취소구분 1 신규, 2 정정, 3 취소
            string qty2    = H01.GetFieldData("OutBlock", "qty2");    //호가수량
            string price   = H01.GetFieldData("OutBlock", "price");   //호가가격
            string qty     = H01.GetFieldData("OutBlock", "qty");     //실정정취소수량
            string rejcode = H01.GetFieldData("OutBlock", "rejcode"); //거부사유

            if (trcode == "TTRODP11301")                              //(정상) : TTRODP11301
            {
                for (int i = table_미체결현황.Rows.Count - 1; i >= 0; i--)
                {
                    if (int.Parse(table_미체결현황.Rows[i]["주문번호"].ToString()) == int.Parse(orgordno))//주문번호와 원주문 번호를 비교 해야 함.
                    {
                        int 미체결수량 = int.Parse(table_미체결현황.Rows[i]["미체결수량"].ToString());
                        if (미체결수량 > int.Parse(qty))//일부 정정/취소
                        {
                            table_미체결현황.Rows[i]["미체결수량"] = 미체결수량 - int.Parse(qty);
                        }
                        else//전부 정정/취소
                        {
                            table_미체결현황.Rows.RemoveAt(i);
                        }

                        if (mocagb == "2")//정정
                        {
                            DataRow newrow = table_미체결현황.NewRow();
                            newrow["주문번호"]  = ordno;
                            newrow["종목코드"]  = code;
                            newrow["종목명"]   = 종목명;
                            newrow["매매구분"]  = dosugb;
                            newrow["주문가격"]  = price;
                            newrow["주문수량"]  = qty;
                            newrow["미체결수량"] = qty;
                            table_미체결현황.Rows.Add(newrow);
                        }
                        else if (mocagb == "3")//취소 ==> 잔고현황의 청산가능수량에대한 복구
                        {
                            foreach (DataRow row in table_잔고현황.Select("종목코드 = '" + code + "' And 매매구분 <> '" + dosugb + "'"))
                            {
                                row["청산가능수량"] = int.Parse(row["청산가능수량"].ToString()) + int.Parse(qty);
                            }
                        }

                        break;
                    }
                }
            }
            else if (trcode == "TTRODP11321")//(거부) : TTRODP11321 //정정또는 취소와 관련하여 tabl에서 처리할 작업은 없슴.
            {
                MessageBox.Show(rejcode + " : 주문번호 " + ordno + "에 대한 주문이 거부 되었습니다.");

                if (mocagb == "1")//신규주문에 대한 거부확인은 미체결현황과 잔고현황의 청산가능수량에대한 원위치 작업이 필요함.
                {
                    //미체결현황의 거부주문 삭제.
                    for (int i = 0; i < table_미체결현황.Rows.Count; i++)
                    {
                        if (int.Parse(table_미체결현황.Rows[i]["주문번호"].ToString()) == int.Parse(ordno))
                        {
                            table_미체결현황.Rows.RemoveAt(i);
                            break;
                        }
                    }

                    //잔고현황의 청산가능수량에대한 원위치 작업
                    foreach (DataRow row in table_잔고현황.Select("종목코드 = '" + code + "' And 매매구분 <> '" + dosugb + "'"))
                    {
                        row["청산가능수량"] = int.Parse(row["청산가능수량"].ToString()) + int.Parse(qty2);//호가수량만큼 복귀
                    }
                }
            }
        }
Exemplo n.º 13
0
        private void ReceiveRealData_OC0(XARealClass myXARealClass)
        {
            label1.Text = string.Format("{0:0#:##:##}", int.Parse(myXARealClass.GetFieldData("OutBlock", "chetime")));
            DataRow row;
            string  code = myXARealClass.GetFieldData("OutBlock", "optcode");

            if (code.Contains("201"))
            {
                row = CallTable.Rows[CallCodeList.IndexOf(code)];
            }
            else
            {
                row = PutTable.Rows[PutCodeList.IndexOf(code)];
            }

            row["change"]      = 전일대비구분포함(myXARealClass.GetFieldData("OutBlock", "sign")) + myXARealClass.GetFieldData("OutBlock", "change"); //전일대비
            row["diff"]        = myXARealClass.GetFieldData("OutBlock", "drate");                                                             //등락율
            row["price"]       = myXARealClass.GetFieldData("OutBlock", "price");                                                             //현재가
            row["open"]        = myXARealClass.GetFieldData("OutBlock", "open");                                                              //시가
            row["high"]        = myXARealClass.GetFieldData("OutBlock", "high");                                                              //고가
            row["low"]         = myXARealClass.GetFieldData("OutBlock", "low");                                                               //저가
            row["volume"]      = myXARealClass.GetFieldData("OutBlock", "volume");                                                            //누적거래량
            row["cvolume"]     = myXARealClass.GetFieldData("OutBlock", "cvolume");                                                           //체결량
            row["value"]       = myXARealClass.GetFieldData("OutBlock", "value");                                                             //누적거래대금
            row["offerho1"]    = myXARealClass.GetFieldData("OutBlock", "offerho1");                                                          //매도호가1
            row["bidho1"]      = myXARealClass.GetFieldData("OutBlock", "bidho1");                                                            //매수호가1
            row["mgjv"]        = myXARealClass.GetFieldData("OutBlock", "openyak");                                                           //미결제약정수량
            row["mgjvupdn"]    = myXARealClass.GetFieldData("OutBlock", "openyakcha");                                                        //미결제약정증감
            row["theoryprice"] = myXARealClass.GetFieldData("OutBlock", "theoryprice");                                                       //이론가
            row["timevl"]      = myXARealClass.GetFieldData("OutBlock", "timevalue");                                                         //시간가치
            row["impv"]        = myXARealClass.GetFieldData("OutBlock", "impv");                                                              //내재변동성//??
        }
Exemplo n.º 14
0
 private void ReceiveRealData_OC0(XARealClass myXARealClass)
 {
     currprice = double.Parse(myXARealClass.GetFieldData("OutBlock", "price"));//현재가
     CurrPriceUpdate();
 }
Exemplo n.º 15
0
        private void ReceiveRealData_OH0(XARealClass myXARealClass)
        {
            string[] Str = new string[] {
                myXARealClass.GetFieldData("OutBlock", "offerho1"),                //매도호가1
                myXARealClass.GetFieldData("OutBlock", "bidho1"),                  //매수호가1
                myXARealClass.GetFieldData("OutBlock", "offerrem1"),               //매도호가수량1
                myXARealClass.GetFieldData("OutBlock", "bidrem1"),                 //매수호가수량1
                myXARealClass.GetFieldData("OutBlock", "offercnt1"),               //매도호가건수1
                myXARealClass.GetFieldData("OutBlock", "bidcnt1"),                 //매수호가건수1

                myXARealClass.GetFieldData("OutBlock", "offerho2"),                //매도호가2
                myXARealClass.GetFieldData("OutBlock", "bidho2"),                  //매수호가2
                myXARealClass.GetFieldData("OutBlock", "offerrem2"),               //매도호가수량2
                myXARealClass.GetFieldData("OutBlock", "bidrem2"),                 //매수호가수량2
                myXARealClass.GetFieldData("OutBlock", "offercnt2"),               //매도호가건수2
                myXARealClass.GetFieldData("OutBlock", "bidcnt2"),                 //매수호가건수2

                myXARealClass.GetFieldData("OutBlock", "offerho3"),                //매도호가3
                myXARealClass.GetFieldData("OutBlock", "bidho3"),                  //매수호가3
                myXARealClass.GetFieldData("OutBlock", "offerrem3"),               //매도호가수량3
                myXARealClass.GetFieldData("OutBlock", "bidrem3"),                 //매수호가수량3
                myXARealClass.GetFieldData("OutBlock", "offercnt3"),               //매도호가건수3
                myXARealClass.GetFieldData("OutBlock", "bidcnt3"),                 //매수호가건수3

                myXARealClass.GetFieldData("OutBlock", "offerho4"),                //매도호가4
                myXARealClass.GetFieldData("OutBlock", "bidho4"),                  //매수호가4
                myXARealClass.GetFieldData("OutBlock", "offerrem4"),               //매도호가수량4
                myXARealClass.GetFieldData("OutBlock", "bidrem4"),                 //매수호가수량4
                myXARealClass.GetFieldData("OutBlock", "offercnt4"),               //매도호가건수4
                myXARealClass.GetFieldData("OutBlock", "bidcnt4"),                 //매수호가건수4

                myXARealClass.GetFieldData("OutBlock", "offerho5"),                //매도호가5
                myXARealClass.GetFieldData("OutBlock", "bidho5"),                  //매수호가5
                myXARealClass.GetFieldData("OutBlock", "offerrem5"),               //매도호가수량5
                myXARealClass.GetFieldData("OutBlock", "bidrem5"),                 //매수호가수량5
                myXARealClass.GetFieldData("OutBlock", "offercnt5"),               //매도호가건수5
                myXARealClass.GetFieldData("OutBlock", "bidcnt5"),                 //매수호가건수5

                myXARealClass.GetFieldData("OutBlock", "totofferrem"),             //매도호가총수량
                myXARealClass.GetFieldData("OutBlock", "totbidrem"),               //매수호가총수량
                myXARealClass.GetFieldData("OutBlock", "totoffercnt"),             //매도호가총건수
                myXARealClass.GetFieldData("OutBlock", "totbidcnt"),               //매수호가총건수

                myXARealClass.GetFieldData("OutBlock", "hotime")                   //호가시간
            };
            DataUpdate(Str);
        }
Exemplo n.º 16
0
        void C01_ReceiveRealData(string szTrCode)//주문체결
        {
            string 계좌번호 = C01.GetFieldData("OutBlock", "accno");

            if (계좌번호 != this.계좌번호)
            {
                return;
            }
            string 주문번호 = int.Parse(C01.GetFieldData("OutBlock", "ordno")).ToString();
            string 종목코드 = from표준to단축(C01.GetFieldData("OutBlock", "expcode"));
            string 종목명  = 종목명불러오기(종목코드);
            string 체결가격 = C01.GetFieldData("OutBlock", "cheprice");
            string 체결수량 = C01.GetFieldData("OutBlock", "chevol");
            string 매매구분 = "매도";
            string 진입청산 = "";

            if (C01.GetFieldData("OutBlock", "dosugb") == "2")
            {
                매매구분 = "매수";
            }

            //잔고현황 갱신
            bool 처리완료 = false;

            for (int i = table_잔고현황.Rows.Count - 1; i >= 0; i--)
            {
                if (table_잔고현황.Rows[i]["종목코드"].ToString() == 종목코드)
                {
                    처리완료 = true;

                    string 잔고의매매구분 = table_잔고현황.Rows[i]["매매구분"].ToString();

                    if (잔고의매매구분 == 매매구분)//추가진입
                    {
                        table_잔고현황.Rows[i]["평균진입단가"] = (double.Parse(table_잔고현황.Rows[i]["평균진입단가"].ToString()) * double.Parse(table_잔고현황.Rows[i]["잔고수량"].ToString()) + double.Parse(체결가격) * double.Parse(체결수량)) / (double.Parse(table_잔고현황.Rows[i]["잔고수량"].ToString()) + double.Parse(체결수량));

                        table_잔고현황.Rows[i]["잔고수량"]   = int.Parse(table_잔고현황.Rows[i]["잔고수량"].ToString()) + int.Parse(체결수량);
                        table_잔고현황.Rows[i]["청산가능수량"] = int.Parse(table_잔고현황.Rows[i]["청산가능수량"].ToString()) + int.Parse(체결수량);
                        진입청산 = "진입";
                    }
                    else//청산
                    {
                        진입청산 = "청산";

                        table_잔고현황.Rows[i]["잔고수량"] = int.Parse(table_잔고현황.Rows[i]["잔고수량"].ToString()) - int.Parse(체결수량);
                        if (int.Parse(table_잔고현황.Rows[i]["잔고수량"].ToString()) == 0)//전부청산
                        {
                            table_잔고현황.Rows.RemoveAt(i);
                            현재가요청해제(종목코드);
                        }
                        else if (int.Parse(table_잔고현황.Rows[i]["잔고수량"].ToString()) < 0)//SAR
                        {
                            table_잔고현황.Rows[i]["잔고수량"]   = Math.Abs(int.Parse(table_잔고현황.Rows[i]["잔고수량"].ToString()));
                            table_잔고현황.Rows[i]["평균진입단가"] = 체결가격;
                            table_잔고현황.Rows[i]["매매구분"]   = 매매구분;
                            table_잔고현황.Rows[i]["청산가능수량"] = table_잔고현황.Rows[i]["잔고수량"].ToString();
                            진입청산 = "SAR";
                        }
                    }
                }
            }
            if (!처리완료)
            {
                DataRow newrow = table_잔고현황.NewRow();
                newrow["종목코드"]   = 종목코드;
                newrow["종목명"]    = 종목명;
                newrow["매매구분"]   = 매매구분;
                newrow["잔고수량"]   = 체결수량;
                newrow["청산가능수량"] = 체결수량;
                newrow["평균진입단가"] = 체결가격;
                newrow["현재가"]    = "";
                newrow["평가손익"]   = "";
                table_잔고현황.Rows.Add(newrow);
                진입청산 = "진입";

                현재가요청(종목코드);
            }

            string 주문수량 = "";
            string 주문가격 = "";

            //미체결현황 갱신
            처리완료 = false;
            for (int i = table_미체결현황.Rows.Count - 1; i >= 0; i--)
            {
                if (int.Parse(table_미체결현황.Rows[i]["주문번호"].ToString()) == int.Parse(주문번호))
                {
                    처리완료 = true;
                    주문수량 = table_미체결현황.Rows[i]["주문수량"].ToString();
                    주문가격 = table_미체결현황.Rows[i]["주문가격"].ToString();
                    table_미체결현황.Rows[i]["미체결수량"] = int.Parse(table_미체결현황.Rows[i]["미체결수량"].ToString()) - int.Parse(체결수량);
                    if (int.Parse(table_미체결현황.Rows[i]["미체결수량"].ToString()) <= 0)
                    {
                        table_미체결현황.Rows.RemoveAt(i);
                    }
                    break;
                }
            }

            if (!처리완료)//미체결주문 접수전 체결이므로 Parking!!!
            {
                List <string> newlist = new List <string>();
                newlist.Add(종목코드);
                newlist.Add(종목명);
                newlist.Add(매매구분);
                newlist.Add(체결가격);
                newlist.Add(체결수량);
                newlist.Add(진입청산);//진입,청산.SAR
                Parking_체결데이타.Add(int.Parse(주문번호).ToString(), newlist);
            }

            //체결현황 갱신
            처리완료 = false;
            for (int i = 0; i < table_체결현황.Rows.Count; i++)
            {
                if (int.Parse(table_체결현황.Rows[i]["주문번호"].ToString()) == int.Parse(주문번호))
                {
                    처리완료 = true;
                    table_체결현황.Rows[i]["체결가격"] = (double.Parse(table_체결현황.Rows[i]["체결가격"].ToString()) * double.Parse(table_체결현황.Rows[i]["체결수량"].ToString()) + double.Parse(체결가격) * double.Parse(체결수량)) / (double.Parse(table_체결현황.Rows[i]["체결수량"].ToString()) + double.Parse(체결수량));
                    table_체결현황.Rows[i]["체결수량"] = int.Parse(table_체결현황.Rows[i]["체결수량"].ToString()) + int.Parse(체결수량);
                    break;
                }
            }

            if (!처리완료)
            {
                DataRow newrow = table_체결현황.NewRow();
                newrow["주문번호"] = 주문번호;
                newrow["종목코드"] = 종목코드;
                newrow["종목명"]  = 종목명;
                newrow["매매구분"] = 매매구분;
                newrow["주문가격"] = 주문가격;
                newrow["주문수량"] = 주문수량;
                newrow["체결가격"] = 체결가격;
                newrow["체결수량"] = 체결수량;
                table_체결현황.Rows.InsertAt(newrow, 0);
            }
        }
Exemplo n.º 17
0
        void SC4_ReceiveRealData(string szTrCode)                 //주식주문거부
        {
            string accno = SC4.GetFieldData("OutBlock", "accno"); //계좌번호

            if (계좌번호 != accno)
            {
                return;
            }

            string trcode   = SC4.GetFieldData("OutBlock", "trcode");                         //trcode  SONAT000:신규주문, SONAT001:정정주문, SONAT002:취소주문, SONAS100:체결확인
            string ordno    = int.Parse(SC4.GetFieldData("OutBlock", "ordno")).ToString();    //주문번호
            string orgordno = int.Parse(SC4.GetFieldData("OutBlock", "orgordno")).ToString(); //원주문번호
            string code     = SC4.GetFieldData("OutBlock", "Isuno");                          //종목코드
            string 종목명      = SC4.GetFieldData("OutBlock", "Isunm");                          //종목명

            if (trcode == "SONAT001" || trcode == "SONAT002")                                 //정정또는 취소와 관련하여 tabl에서 처리할 작업은 없슴.
            {
                MessageBox.Show("정정/취소 주문에 대하여 거부되었슴.(주문번호 : " + ordno + ", 원부문번호 : " + orgordno + ", 종목명 : " + 종목명 + ")");
                return;
            }

            string bnstp = "매도";

            if (SC4.GetFieldData("OutBlock", "bnstp") == "2")//매도수구분 1 매도, 2 매수
            {
                bnstp = "매수";
            }
            string rjtqty = SC4.GetFieldData("OutBlock", "rjtqty"); //거부수량

            if (trcode == "SONAT000")                               //SONAT000:신규주문
            {
                MessageBox.Show("신규주문에 대하여 거부되었슴.(주문번호 : " + ordno + ", 종목명 : " + 종목명 + ")");
                for (int i = table_미체결현황.Rows.Count - 1; i >= 0; i--)
                {
                    if (int.Parse(table_미체결현황.Rows[i]["주문번호"].ToString()) == int.Parse(orgordno))//주문번호와 원주문 번호를 비교 해야 함.
                    {
                        int 미체결수량 = int.Parse(table_미체결현황.Rows[i]["미체결수량"].ToString());
                        if (미체결수량 > int.Parse(rjtqty))//일부 거부?
                        {
                            table_미체결현황.Rows[i]["미체결수량"] = 미체결수량 - int.Parse(rjtqty);
                        }
                        else//전부 거부
                        {
                            table_미체결현황.Rows.RemoveAt(i);
                        }

                        //매도거부 ==> 잔고현황의 매도가능수량에대한 복구
                        //if (table_미체결현황.Rows[i]["매매구분"].ToString() == "매도")
                        if (bnstp == "매도")
                        {
                            foreach (DataRow row in table_잔고현황.Select("종목코드 = '" + code + "'"))
                            {
                                row["매도가능수량"] = int.Parse(row["매도가능수량"].ToString()) + int.Parse(rjtqty);
                            }
                        }

                        break;
                    }
                }
            }
        }
Exemplo n.º 18
0
        private void ReceveRealData_C01(XARealClass myXARealClass)
        {
            if (cmb_AccNum.SelectedItem.ToString().Trim() != myXARealClass.GetFieldData("OutBlock", "accno").Trim())
            {
                return;
            }

            string code     = MainForm.종목마스터[myXARealClass.GetFieldData("OutBlock", "expcode")][0]; //종목코드(표준==>단축)
            double cheprice = double.Parse(myXARealClass.GetFieldData("OutBlock", "cheprice"));     //체결가격
            double chevol   = double.Parse(myXARealClass.GetFieldData("OutBlock", "chevol"));       //체결수량
            string dosugb   = myXARealClass.GetFieldData("OutBlock", "dosugb");                     //매도수구분

            if (dosugb == "1")
            {
                dosugb = "매도";
            }
            else if (dosugb == "2")
            {
                dosugb = "매수";
            }

            bool 잔고없슴 = true;

            for (int i = 0; i < table.Rows.Count; i++)
            {
                DataRow row = table.Rows[i];
                if (row["expcode"].ToString() == code)
                {
                    잔고없슴 = false;
                    double 잔고   = double.Parse(row["jqty"].ToString());
                    double 평균단가 = double.Parse(row["pamt"].ToString());
                    string 구분   = row["medosu"].ToString();

                    //실현손익계산
                    if (구분 == "매도")
                    {
                        매매손익 += Math.Min(잔고, chevol) * (평균단가 - cheprice) * 500000d;
                    }
                    else
                    {
                        매매손익 += Math.Min(잔고, chevol) * (cheprice - 평균단가) * 500000d;
                    }

                    if (dosugb == 구분)//잔고추가(진입)
                    {
                        row["pamt"] = Math.Round((cheprice * chevol + 잔고 * 평균단가) / (잔고 + chevol), 4);
                        row["jqty"] = Math.Round(잔고 + chevol, 0);
                    }
                    else//청산
                    {
                        int new잔고 = (int)Math.Round(잔고 - chevol, 0);

                        if (new잔고 == 0)//청산완료
                        {
                            table.Rows.RemoveAt(i);
                            현재가Real요청();
                            break;
                        }
                        else if (new잔고 < 0)//Stop and Reverse
                        {
                            row["jqty"] = Math.Abs(new잔고).ToString();
                            row["pamt"] = cheprice.ToString();
                        }
                        else//일부청산
                        {
                            row["jqty"] = new잔고.ToString();
                        }
                    }
                }
            }

            if (잔고없슴)//진입
            {
                DataRow newrow = table.NewRow();
                newrow["expcode"]  = code;
                newrow["medosu"]   = dosugb;
                newrow["jqty"]     = chevol.ToString();
                newrow["pamt"]     = cheprice.ToString();
                newrow["price"]    = cheprice.ToString();
                newrow["appamt"]   = chevol * cheprice * 500000d;
                newrow["dtsunik1"] = "0";
                newrow["sunikrt"]  = "0";
                table.Rows.Add(newrow);
                현재가Real요청();
            }

            총손익계산();
        }
Exemplo n.º 19
0
 public string GetFieldData(string blockName, string fieldName)
 {
     return(_xaReal.GetFieldData(blockName, fieldName));
 }
Exemplo n.º 20
0
        void O01_ReceiveRealData(string szTrCode)                 //접수
        {
            string accno = O01.GetFieldData("OutBlock", "accno"); //계좌번호

            if (계좌번호 != accno)
            {
                return;
            }

            string trcode = O01.GetFieldData("OutBlock", "trcode"); //TRCODE  //SONBT001:신규주문, SONBT002:정정주문, SONBT003:취소주문

            if (trcode != "SONBT001")                               //신규주문 접수에 대해서만 처리한다. 정정/취소는 확인(H01_Tr 에서 처리함).
            {
                return;
            }

            string ordno    = int.Parse(O01.GetFieldData("OutBlock", "ordno")).ToString(); //주문번호
            string fnoIsuno = O01.GetFieldData("OutBlock", "fnoIsuno");                    //선물옵션종목번호 8자리
            string fnoIsunm = O01.GetFieldData("OutBlock", "fnoIsunm");                    //선물옵션종목명
            string bnstp    = "매도";

            if (O01.GetFieldData("OutBlock", "bnstp") == "2")//매매구분 1:매도, 2:매수
            {
                bnstp = "매수";
            }
            string ordqty   = O01.GetFieldData("OutBlock", "ordqty");        //주문수량
            string ordprc   = O01.GetFieldData("OutBlock", "ordprc");        //주문가격
            string unercqty = O01.GetFieldData("OutBlock", "unercqty");      //미체결수량

            if (Parking_체결데이타.Count > 0 && Parking_체결데이타.ContainsKey(ordno)) //parking된 체결데이타가 있으면 처리..<<<<<##################<<<<<<<<<<
            {
                //일부체결의 경우만 나머지 부분에 대하여 처리
                if (int.Parse(Parking_체결데이타[ordno][4]) < int.Parse(ordqty))//일부체결
                {
                    //미체결 현황 갱신.
                    DataRow newrow1 = table_미체결현황.NewRow();
                    newrow1["주문번호"] = ordno;
                    newrow1["종목코드"] = fnoIsuno;
                    newrow1["종목명"]  = fnoIsunm;
                    newrow1["매매구분"] = bnstp;
                    newrow1["주문가격"] = ordprc;
                    newrow1["주문수량"] = ordqty;
                    //newrow1["미체결수량"] = unercqty;
                    newrow1["미체결수량"] = int.Parse(ordqty) - int.Parse(Parking_체결데이타[ordno][4]);
                    table_미체결현황.Rows.Add(newrow1);
                }
                Parking_체결데이타.Remove(ordno);

                if (Parking_체결데이타[ordno][5] == "청산")
                {
                    //잔고현황의 청산가능수량 갱신
                    foreach (DataRow row in table_잔고현황.Select("종목코드 = '" + fnoIsuno + "'"))
                    {
                        row["청산가능수량"] = int.Parse(row["청산가능수량"].ToString()) - int.Parse(ordqty);
                    }
                }
                return;
            }

            //잔고현황의 청산가능수량 갱신
            foreach (DataRow row in table_잔고현황.Select("종목코드 = '" + fnoIsuno + "'"))
            {
                if (row["매매구분"].ToString() != bnstp)
                {
                    row["청산가능수량"] = int.Parse(row["청산가능수량"].ToString()) - int.Parse(ordqty);
                }
            }

            //미체결 현황 갱신.
            DataRow newrow = table_미체결현황.NewRow();

            newrow["주문번호"]  = ordno;
            newrow["종목코드"]  = fnoIsuno;
            newrow["종목명"]   = fnoIsunm;
            newrow["매매구분"]  = bnstp;
            newrow["주문가격"]  = ordprc;
            newrow["주문수량"]  = ordqty;
            newrow["미체결수량"] = unercqty;
            table_미체결현황.Rows.Add(newrow);
        }