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"); //이론가(블랙숄즈) }
private void ReceveRealData_OC0(XARealClass myXARealClass) { double 현재가 = double.Parse(myXARealClass.GetFieldData("OutBlock", "price")); string Code = myXARealClass.GetFieldData("OutBlock", "optcode").Trim(); 손익계산(Code, 현재가); }
void S3__ReceiveRealData(string szTrCode) { string 단축코드 = S3_.GetFieldData("OutBlock", "shcode").Trim(); string 현재가 = S3_.GetFieldData("OutBlock", "price"); foreach (DataRow row in table_잔고현황.Select("종목코드 = '" + 단축코드 + "'")) { row["현재가"] = 현재가; 평가손익계산(row); } }
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; } } }
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 }
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표시(); }
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; } } }
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표시(); }
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); }
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); } }
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표시(); }
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);//호가수량만큼 복귀 } } } }
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"); //내재변동성//?? }
private void ReceiveRealData_OC0(XARealClass myXARealClass) { currprice = double.Parse(myXARealClass.GetFieldData("OutBlock", "price"));//현재가 CurrPriceUpdate(); }
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); }
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); } }
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; } } } }
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요청(); } 총손익계산(); }
public string GetFieldData(string blockName, string fieldName) { return(_xaReal.GetFieldData(blockName, fieldName)); }
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); }