// 지정가 매수 요청(mode가 99가 아니고, 가격이 없을 경우 시장가 매수) public void ReqBuyManual(ArrayList arr) { foreach (Dictionary <string, string> row in arr) { // 과부하 막기 위한 슬립 Delay(Constants.SLEEP_TIME); // 거래구분 취득 // 00:지정가, 03:시장가, 05:조건부지정가, 06:최유리지정가, 07:최우선지정가, // 10:지정가IOC, 13:시장가IOC, 16:최유리IOC, 20:지정가FOK, 23:시장가FOK, // 26:최유리FOK, 61:장개시전시간외, 62:시간외단일가매매, 81:시간외종가 string orderCond = "00"; string mode = row["MODE"]; int price = int.Parse(row["PRICE"]); if (price == 0 && mode != "99") { orderCond = "03"; } // 매매구분 취득 // 1:신규매수, 2:신규매도 3:매수취소, 4:매도취소, 5:매수정정, 6:매도정정 int trType = 1; string acctNo = Constants.ACCT; string item = row["ITEM"]; int amt = int.Parse(row["CNT"]); _formObj.Logger(Log.매수, "[지정가 매수 요청] : 종목 : {0}, 수량 : {1}, 가격 : {2}", item, amt, price); // 주식주문 _formObj.OpenApiOrder( Constants.REQ_BUY_ADD // 화면번호 , acctNo // 계좌번호 , trType // 매매구분 , item // 종목코드 , amt // 주문수량 , price // 주문가격 , orderCond // 거래구분 , "" // 원주문번호 ); string today = DateTime.Now.ToString("yyyyMMdd"); _formObj._buy.SaveBuyReq(today, item, mode); SaveBuyManualReq(today, item, mode, amt, price); } }
// 계좌 DB잔고 종목 조회 public void RetDbAcctItem(string today) { _formObj.Logger(Log.매도, "[계좌 DB잔고 종목 조회 시작]"); string query = ""; query += " SELECT A.MODE"; query += " , A.ITEM"; query += " , SUBSTR(A.TRAN_ID,1,8) AS BDAY"; query += " , IFNULL(B.TRAN_DAY,'-') AS NDAY"; query += " , D.SEQ - C.SEQ AS SEQ_DIFF"; query += " FROM TRAN A"; query += " LEFT"; query += " OUTER"; query += " JOIN TRAN_DAY_CAL B"; query += " ON SUBSTR(A.TRAN_ID,1,8) = B.POOL_DAY"; query += " JOIN TRAN_DAY_CAL C"; query += " ON SUBSTR(A.TRAN_ID,1,8) = C.TRAN_DAY"; query += " JOIN TRAN_DAY_CAL D"; query += " ON A.TRAN_DAY = D.TRAN_DAY"; query += " WHERE A.TRAN_DAY = '" + today + "'"; query += " AND A.TRAN_SP = 2"; query += " AND A.SELL_ORDER_NO IS NULL"; query += " ORDER BY A.MODE"; _boughtItems.Clear(); _boughtItems = new Dictionary <string, string>(); ArrayList boughtList = _formObj._db.SelectQuery(query); foreach (Dictionary <string, string> tmp in boughtList) { //_boughtItems.Add(tmp["ITEM"], tmp["MODE"] + ";" + tmp["BDAY"] + ";" + tmp["NDAY"]); string temp = tmp["MODE"] + ";" + tmp["BDAY"] + ";" + tmp["NDAY"] + ";" + tmp["SEQ_DIFF"]; _boughtItems[tmp["ITEM"]] = temp; } RetAcctItem(); }
// 로그인 이벤트 핸들러 public void ApiLoginR(string szCode, string szMsg) { if (szCode == "0000") { ApiRealMarketStatus(); _formObj._sttg = new Strategy(_formObj); _formObj.ReqThreadStart(); } _formObj.Logger(Log.일반, "[로그인 결과 : {0}, {1}]", szCode, szMsg); }