public override void ReceivedData(AxKHOpenAPILib.AxKHOpenAPI axKHOpenAPI, AxKHOpenAPILib._DKHOpenAPIEvents_OnReceiveRealDataEvent e) { /* [27] = (최우선)매도호가 //(0) [28] = (최우선)매수호가 //(1) */ FileLog.PrintF(String.Format("최우선_매도호가 : {0} ==>", axKHOpenAPI.GetCommRealData(e.sRealType, 27).Trim())); //[0] FileLog.PrintF(String.Format("최우선_매수호가 : {0} ==>", axKHOpenAPI.GetCommRealData(e.sRealType, 28).Trim())); //[1] FileLog.PrintF(String.Format("종목코드 : {0} ==>", e.sRealKey.ToString().Trim())); FileLog.PrintF(String.Format("RealName : {0} ==>", e.sRealType.ToString().Trim())); FileLog.PrintF(String.Format("sRealData : {0} ==>", e.sRealData.ToString().Trim())); String 현재시간 = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"); REAL10003_Data real10003_data = new REAL10003_Data(); real10003_data.현재시간 = 현재시간; real10003_data.최우선_매도호가 = Int32.Parse(axKHOpenAPI.GetCommRealData(e.sRealType, 27).Trim()); //[0] real10003_data.최우선_매수호가 = Int32.Parse(axKHOpenAPI.GetCommRealData(e.sRealType, 28).Trim()); //[1] real10003_data.종목코드 = e.sRealKey.ToString().Trim(); //[2] real10003_data.RealName = e.sRealType.ToString().Trim(); //[3] SendDirectFile(real10003_data); SendDirectDb(real10003_data); }
public override int Run(AxKHOpenAPILib.AxKHOpenAPI axKHOpenAPI, SpellOpt spell) { /* [ OPW00003 : 추정자산조회요청 ] 1. Open API 조회 함수 입력값을 설정합니다. 계좌번호 = 전문 조회할 보유계좌번호 SetInputValue("계좌번호" , "입력값 1"); 비밀번호 = 사용안함(공백) SetInputValue("비밀번호" , "입력값 2"); 상장폐지조회구분 = 0:전체, 1:상장폐지종목제외 SetInputValue("상장폐지조회구분" , "입력값 3"); 2. Open API 조회 함수를 호출해서 전문을 서버로 전송합니다. CommRqData( "RQName" , "OPW00003" , "0" , "화면번호"); */ FileLog.PrintF("OPT10001:Run sRQNAME=>" + spell.sRQNAME); FileLog.PrintF("OPT10001:Run sTrCode=>" + spell.sTrCode); FileLog.PrintF("OPT10001:Run nPrevNext=>" + spell.nPrevNext); FileLog.PrintF("OPT10001:Run sScreenNo=>" + spell.sScreenNo); FileLog.PrintF("OPT10001:Run 계좌번호=>" + spell.accountNum); FileLog.PrintF("OPT10001:Run 비밀번호=>" + spell.password); axKHOpenAPI.SetInputValue("계좌번호", spell.accountNum); axKHOpenAPI.SetInputValue("비밀번호", spell.password); axKHOpenAPI.SetInputValue("상장폐지조회구분", "0");// 0:전체, 1:상장폐지종목제외 int ret = axKHOpenAPI.CommRqData(spell.sRQNAME, spell.sTrCode, spell.nPrevNext, spell.sScreenNo); return ret; }
public void runReceiveTrData(AxKHOpenAPILib.AxKHOpenAPI axKHOpenAPI, AxKHOpenAPILib._DKHOpenAPIEvents_OnReceiveTrDataEvent e) { if (IgnoreReceiveTrData(e.sTrCode) == false) { ReceiveTrData rt = getReceiveTrData(e.sTrCode); rt.ReceivedData(axKHOpenAPI, e); } }
private void axKHOpenAPI_OnEventConnect(object sender, AxKHOpenAPILib._DKHOpenAPIEvents_OnEventConnectEvent e) { if (Error.IsError(e.nErrCode)) { Logger(Log.일반, "[로그인 처리결과] " + Error.GetErrorMessage()); } else { Logger(Log.에러, "[로그인 처리결과] " + Error.GetErrorMessage()); } }
public override void ReceivedData(AxKHOpenAPILib.AxKHOpenAPI axKHOpenAPI, AxKHOpenAPILib._DKHOpenAPIEvents_OnReceiveTrDataEvent e) { FileLog.PrintF("ReceivedData OPW00003"); try { StringBuilder sbAll = new StringBuilder(); StringBuilder sb = new StringBuilder(); String 조회일자 = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"); /*추정예탁자산*/ sb.Append("{0}|{1}|{2}"); String tmp = sb.ToString(); String 계좌번호 = "XXXXXXXXXX"; //int nCnt = axKHOpenAPI.GetRepeatCnt(e.sTrCode, e.sRQName); String keyStockCodeLayout = "sRQName:{0}|sTrCode:{1}|sScreenNo:{2}"; String keyStockCode = String.Format(keyStockCodeLayout , e.sRQName , e.sTrCode , e.sScrNo ); 계좌번호 = AppLib.getClass1Instance().getStockCode(keyStockCode); String keyLayout = "sRQName:{0}|sTrCode:{1}|sScreenNo:{2}|accountNum:{3}"; String key = String.Format(keyLayout , e.sRQName , e.sTrCode , e.sScrNo , 계좌번호 ); // int nCnt = axKHOpenAPI.GetRepeatCnt(e.sTrCode, e.sRQName); 이거 무조건 0이다. String 추정예탁자산 = axKHOpenAPI.CommGetData(e.sTrCode, "", e.sRQName, 0, "추정예탁자산").Trim();//[0] String tmp1 = String.Format(tmp , 조회일자 , 계좌번호 , 추정예탁자산 ); sbAll.AppendLine(tmp1); String ret = sbAll.ToString(); FileLog.PrintF("ReceivedData OPW00003 ret=>" + ret); ScreenNumber.getClass1Instance().DisconnectRealData(e.sScrNo); //this.SetRealRemove(axKHOpenAPI, "ALL", "ALL"); AppLib.getClass1Instance().removeStockCodeDictionary(keyStockCode); AppLib.getClass1Instance().removeSpellDictionary(key); Send(key, ret, "OPW00003"); } catch (Exception ex) { FileLog.PrintF("[ALERT-ReceivedData-OPW00003]Exception ex=" + ex.Message); } }
private void axKHOpenAPI_OnReceiveTrCondition(object sender, AxKHOpenAPILib._DKHOpenAPIEvents_OnReceiveTrConditionEvent e) { FileLog.PrintF("====================axKHOpenAPI_OnReceiveTrCondition==============================="); FileLog.PrintF("[화면번호] : " + e.sScrNo); FileLog.PrintF("[종목리스트] : " + e.strCodeList); FileLog.PrintF("[조건명] : " + e.strConditionName); FileLog.PrintF("[조건명 인덱스 ] : " + e.nIndex.ToString()); FileLog.PrintF("[연속조회] : " + e.nNext.ToString()); Logger(Log.디버깅, "====================axKHOpenAPI_OnReceiveTrCondition==============================="); Logger(Log.조회, "[화면번호] : " + e.sScrNo); Logger(Log.조회, "[종목리스트] : " + e.strCodeList); Logger(Log.조회, "[조건명] : " + e.strConditionName); Logger(Log.조회, "[조건명 인덱스 ] : " + e.nIndex.ToString()); Logger(Log.조회, "[연속조회] : " + e.nNext.ToString()); }
private void axKHOpenAPI_OnReceiveRealCondition(object sender, AxKHOpenAPILib._DKHOpenAPIEvents_OnReceiveRealConditionEvent e) { FileLog.PrintF("====================axKHOpenAPI_OnReceiveRealCondition==============================="); Logger(Log.디버깅, "====================axKHOpenAPI_OnReceiveRealCondition==============================="); Logger(Log.실시간, "========= 조건조회 실시간 편입/이탈 =========="); Logger(Log.실시간, "[종목코드] : " + e.sTrCode); Logger(Log.실시간, "[실시간타입] : " + e.strType); Logger(Log.실시간, "[조건명] : " + e.strConditionName); Logger(Log.실시간, "[조건명 인덱스] : " + e.strConditionIndex); }
public override int Run(AxKHOpenAPILib.AxKHOpenAPI axKHOpenAPI, SpellOpt spell) { /* [ opt10085 : 계좌수익률요청 ] 1. Open API 조회 함수 입력값을 설정합니다. 계좌번호 = 전문 조회할 보유계좌번호 SetInputValue("계좌번호" , "입력값 1"); 2. Open API 조회 함수를 호출해서 전문을 서버로 전송합니다. CommRqData( "RQName" , "opt10085" , "0" , "화면번호"); */ FileLog.PrintF("OPT10001:Run sRQNAME=>" + spell.sRQNAME); FileLog.PrintF("OPT10001:Run sTrCode=>" + spell.sTrCode); FileLog.PrintF("OPT10001:Run nPrevNext=>" + spell.nPrevNext); FileLog.PrintF("OPT10001:Run sScreenNo=>" + spell.sScreenNo); FileLog.PrintF("OPT10001:Run 계좌번호=>" + spell.accountNum); axKHOpenAPI.SetInputValue("계좌번호", spell.accountNum); int ret = axKHOpenAPI.CommRqData(spell.sRQNAME, spell.sTrCode, spell.nPrevNext, spell.sScreenNo); return ret; }
public abstract void ReceivedData(AxKHOpenAPILib.AxKHOpenAPI axKHOpenAPI, AxKHOpenAPILib._DKHOpenAPIEvents_OnReceiveRealDataEvent e);
public override int Run(AxKHOpenAPILib.AxKHOpenAPI axKHOpenAPI, SpellOpt spell) { /* 1. Open API 조회 함수 입력값을 설정합니다. 종목코드 = 전문 조회할 종목코드 SetInputValue("종목코드" , "입력값 1"); 기준일자 = YYYYMMDD(20160101 연도4자리, 월 2자리, 일 2자리 형식) SetInputValue("기준일자" , "입력값 2"); 수정주가구분 = 0 or 1, 수신데이터 1:유상증자, 2:무상증자, 4:배당락, 8:액면분할, 16:액면병합, 32:기업합병, 64:감자, 256:권리락 SetInputValue("수정주가구분" , "입력값 3"); 2. Open API 조회 함수를 호출해서 전문을 서버로 전송합니다. CommRqData( "RQName" , "opt10081" , "0" , "화면번호"); */ FileLog.PrintF("OPT10081:Run sRQNAME=> " + spell.sRQNAME); FileLog.PrintF("OPT10081:Run sTrCode=> " + spell.sTrCode); FileLog.PrintF("OPT10081:Run nPrevNext=> " + spell.nPrevNext); FileLog.PrintF("OPT10081:Run sScreenNo=> " + spell.sScreenNo); FileLog.PrintF("OPT10081:Run 종목코드=> " + spell.stockCode); FileLog.PrintF("OPT10081:Run 기준일자=> " + spell.endDate); FileLog.PrintF("OPT10081:Run 수정주가구분=> 1"); axKHOpenAPI.SetInputValue("종목코드", spell.stockCode); axKHOpenAPI.SetInputValue("기준일자", spell.endDate); axKHOpenAPI.SetInputValue("수정주가구분", "1");/*수정주가 구분 이것도 무조건 1로 하자. */ /* 수정주가구분 = 0 or 1, 수신데이터 1:유상증자, 2:무상증자, 4:배당락, 8:액면분할, 16:액면병합, 32:기업합병, 64:감자, 256:권리락 SetInputValue("수정주가구분" , "입력값 3"); */ int ret = axKHOpenAPI.CommRqData(spell.sRQNAME, spell.sTrCode, spell.nPrevNext, spell.sScreenNo); return ret; }
public override void ReceivedData(AxKHOpenAPILib.AxKHOpenAPI axKHOpenAPI, AxKHOpenAPILib._DKHOpenAPIEvents_OnReceiveTrDataEvent e) { /* sScrNo – 화면번호 sRQName – 사용자구분 명 sTrCode – Tran 명 sRecordName – Record 명 sPreNext – 연속조회 유무 */ String stockDate = DateTime.Today.ToString("yyyyMMdd"); StringBuilder sbAll = new StringBuilder(); StringBuilder sb = new StringBuilder(); String 계좌명 = axKHOpenAPI.CommGetData(e.sTrCode, "", e.sRQName, 0, "계좌명").Trim(); //account_name String 지점명 = axKHOpenAPI.CommGetData(e.sTrCode, "", e.sRQName, 0, "지점명").Trim(); //place_name int 예수금= Int32.Parse(axKHOpenAPI.CommGetData(e.sTrCode, "", e.sRQName, 0, "예수금").Trim()); //deposit int D2추정예수금 = Int32.Parse(axKHOpenAPI.CommGetData(e.sTrCode, "", e.sRQName, 0, "D+2추정예수금").Trim()); //twodays_after_deposit int 유가잔고평가액 = Int32.Parse(axKHOpenAPI.CommGetData(e.sTrCode, "", e.sRQName, 0, "유가잔고평가액").Trim()); //stock_evaluation, int 예탁자산평가액 = Int32.Parse(axKHOpenAPI.CommGetData(e.sTrCode, "", e.sRQName, 0, "예탁자산평가액").Trim()); //:stock_balance_evaluation, int 총매입금액 = Int32.Parse(axKHOpenAPI.CommGetData(e.sTrCode, "", e.sRQName, 0, "총매입금액").Trim()); //:total_amount_of_purchase, int 추정예탁자산 = Int32.Parse(axKHOpenAPI.CommGetData(e.sTrCode, "", e.sRQName, 0, "추정예탁자산").Trim()); //:estimation_deposit int 매도담보대출금 = Int32.Parse(axKHOpenAPI.CommGetData(e.sTrCode, "", e.sRQName, 0, "매도담보대출금").Trim()); //stock_collacteral_loan, int 당일투자원금 = Int32.Parse(axKHOpenAPI.CommGetData(e.sTrCode, "", e.sRQName, 0, "당일투자원금").Trim()); //:today_investment_money, int 당월투자원금 = Int32.Parse(axKHOpenAPI.CommGetData(e.sTrCode, "", e.sRQName, 0, "당월투자원금").Trim()); //:this_month_investment_money, int 누적투자원금 = Int32.Parse(axKHOpenAPI.CommGetData(e.sTrCode, "", e.sRQName, 0, "누적투자원금").Trim()); //:accumulative_investment_money, int 당일투자손익 = Int32.Parse(axKHOpenAPI.CommGetData(e.sTrCode, "", e.sRQName, 0, "당일투자손익").Trim()); //:today_profit_and_loss, int 당월투자손익 = Int32.Parse(axKHOpenAPI.CommGetData(e.sTrCode, "", e.sRQName, 0, "당월투자손익").Trim()); //:today_profit_and_loss, int 누적투자손익 = Int32.Parse(axKHOpenAPI.CommGetData(e.sTrCode, "", e.sRQName, 0, "누적투자손익").Trim()); //:today_profit_and_loss, int 당일손익율 = Int32.Parse(axKHOpenAPI.CommGetData(e.sTrCode, "", e.sRQName, 0, "당일손익율").Trim()); //:today_profit_and_loss_rate int 당월손익율 = Int32.Parse(axKHOpenAPI.CommGetData(e.sTrCode, "", e.sRQName, 0, "당월손익율").Trim()); //:this_month_profit_and_loss_rate int 누적손익율 = Int32.Parse(axKHOpenAPI.CommGetData(e.sTrCode, "", e.sRQName, 0, "누적손익율").Trim()); //:accumulative_profit_and_loss_rate int 출력건수 = Int32.Parse(axKHOpenAPI.CommGetData(e.sTrCode, "", e.sRQName, 0, "출력건수").Trim()); //:accumulative_profit_and_loss_rate sb.Append("날짜:{0}|계좌명:{1}|지점명:{2}|예수금:{3}|D+2추정예수금:{4}|유가잔고평가액:{5}|예탁자산평가액:{6}|총매입금액:{7}|추정예탁자산:{8}"); sb.Append("|매도담보대출금:{9}|당일투자원금:{10}|당월투자원금:{11}|누적투자원금:{12}|당일투자손익:{13}|당월투자손익:{14}|누적투자손익:{15}"); sb.Append("|당일손익율:{16}|당월손익율:{17}|누적손익율:{18}|출력건수:{19}"); String tmp = sb.ToString(); String tmp1=String.Format(tmp , stockDate , 계좌명 , 지점명 , 예수금 , D2추정예수금 , 유가잔고평가액 , 예탁자산평가액 , 총매입금액 , 추정예탁자산 , 매도담보대출금 , 당일투자원금 , 당월투자원금 , 누적투자원금 , 당일투자손익 , 당월투자손익 , 누적투자손익 , 당일손익율 , 당월손익율 , 누적손익율 , 출력건수 ); sbAll.AppendLine(tmp1); int nCnt = axKHOpenAPI.GetRepeatCnt(e.sTrCode, e.sRQName); for(int i = 1; i < nCnt; i++) { String 계좌명1 = axKHOpenAPI.CommGetData(e.sTrCode, "", e.sRQName, i, "계좌명").Trim(); String 지점명1 = axKHOpenAPI.CommGetData(e.sTrCode, "", e.sRQName, i, "지점명").Trim(); int 예수금1 = Int32.Parse(axKHOpenAPI.CommGetData(e.sTrCode, "", e.sRQName, i, "예수금").Trim()); int D2추정예수금1 = Int32.Parse(axKHOpenAPI.CommGetData(e.sTrCode, "", e.sRQName, i, "D+2추정예수금").Trim()); int 유가잔고평가액1 = Int32.Parse(axKHOpenAPI.CommGetData(e.sTrCode, "", e.sRQName, i, "유가잔고평가액").Trim()); int 예탁자산평가액1 = Int32.Parse(axKHOpenAPI.CommGetData(e.sTrCode, "", e.sRQName, i, "예탁자산평가액").Trim()); int 총매입금액1 = Int32.Parse(axKHOpenAPI.CommGetData(e.sTrCode, "", e.sRQName, i, "총매입금액").Trim()); int 추정예탁자산1 = Int32.Parse(axKHOpenAPI.CommGetData(e.sTrCode, "", e.sRQName, i, "추정예탁자산").Trim()); int 매도담보대출금1 = Int32.Parse(axKHOpenAPI.CommGetData(e.sTrCode, "", e.sRQName, i, "매도담보대출금").Trim()); int 당일투자원금1 = Int32.Parse(axKHOpenAPI.CommGetData(e.sTrCode, "", e.sRQName, i, "당일투자원금").Trim()); int 당월투자원금1 = Int32.Parse(axKHOpenAPI.CommGetData(e.sTrCode, "", e.sRQName, i, "당월투자원금").Trim()); int 누적투자원금1 = Int32.Parse(axKHOpenAPI.CommGetData(e.sTrCode, "", e.sRQName, i, "누적투자원금").Trim()); int 당일투자손익1 = Int32.Parse(axKHOpenAPI.CommGetData(e.sTrCode, "", e.sRQName, i, "당일투자손익").Trim()); int 당월투자손익1 = Int32.Parse(axKHOpenAPI.CommGetData(e.sTrCode, "", e.sRQName, i, "당월투자손익").Trim()); int 누적투자손익1 = Int32.Parse(axKHOpenAPI.CommGetData(e.sTrCode, "", e.sRQName, i, "누적투자손익").Trim()); int 당일손익율1 = Int32.Parse(axKHOpenAPI.CommGetData(e.sTrCode, "", e.sRQName, i, "당일손익율").Trim()); int 당월손익율1 = Int32.Parse(axKHOpenAPI.CommGetData(e.sTrCode, "", e.sRQName, 0, "당월손익율").Trim()); int 누적손익율1 = Int32.Parse(axKHOpenAPI.CommGetData(e.sTrCode, "", e.sRQName, i, "누적손익율").Trim()); int 출력건수1 = Int32.Parse(axKHOpenAPI.CommGetData(e.sTrCode, "", e.sRQName, i, "출력건수").Trim()); tmp1=String.Format(tmp , stockDate , 계좌명1 , 지점명1 , 예수금1 , D2추정예수금1 , 유가잔고평가액1 , 예탁자산평가액1 , 총매입금액1 , 추정예탁자산1 , 매도담보대출금1 , 당일투자원금1 , 당월투자원금1 , 누적투자원금1 , 당일투자손익1 , 당월투자손익1 , 누적투자손익1 , 당일손익율1 , 당월손익율1 , 누적손익율1 , 출력건수1 ); sbAll.AppendLine(tmp1); } path = System.IO.Path.GetDirectoryName(path); path = path + "\\OPW00004_"+stockDate+".log"; System.IO.StreamWriter file = new System.IO.StreamWriter(path, false); file.Write(sbAll.ToString()); file.Close(); }
public override void ReceivedData(AxKHOpenAPILib.AxKHOpenAPI axKHOpenAPI, AxKHOpenAPILib._DKHOpenAPIEvents_OnReceiveTrDataEvent e) { FileLog.PrintF("ReceivedData OPT10059"); try { /* sScrNo – 화면번호 sRQName – 사용자구분 명 sTrCode – Tran 명 sRecordName – Record 명 sPreNext – 연속조회 유무 */ StringBuilder sbAll = new StringBuilder(); StringBuilder sb = new StringBuilder(); //sb.Append("일자:{0}|종목코드:{1}|현재가:{2}|거래량:{3}|거래대금:{4}|시가:{5}|고가:{6}|저가:{7}"); //sb.Append("stock_date:{0}|current_price:{1}|current_price:{2}|trade_quantity:{3}|trade_price:{4}|start_price:{5}|high_price:{6}|low_price:{7}"); /*일자 ,현재가,대비기호,전일대비,등락율,누적거래대금,개인투자자,외국인투자자,기관계,금융투자,보험,투신,기타금융,은행,연기금등,사모펀드,국가,기타법인,내외국인,종목코드,매매구분,금액수량구분*/ sb.Append("{0}|{1}|{2}|{3}|{4}|{5}|{6}|{7}|{8}|{9}|{10}|{11}|{12}|{13}|{14}|{15}|{16}|{17}|{18}|{19}|{20}|{21}"); String tmp = sb.ToString(); String 종목코드 = "XXXX"; int nCnt = axKHOpenAPI.GetRepeatCnt(e.sTrCode, e.sRQName); String keyStockCodeLayout = "sRQName:{0}|sTrCode:{1}|sScreenNo:{2}"; String keyStockCode = String.Format(keyStockCodeLayout , e.sRQName , e.sTrCode , e.sScrNo ); 종목코드 = AppLib.getClass1Instance().getStockCode(keyStockCode); String keyLayout = "sRQName:{0}|sTrCode:{1}|sScreenNo:{2}|stockCode:{3}"; String key = String.Format(keyLayout , e.sRQName , e.sTrCode , e.sScrNo , 종목코드 ); spell = AppLib.getClass1Instance().getSpell(key); String startDate = spell.startDate; String lastStockDate = ""; int startDate일자 = 0; if (!int.TryParse(startDate, out startDate일자)) { startDate일자 = 0; } if (nCnt > 0) { for (int i = 0; i < nCnt; i++) { int 일자 = Int32.Parse(axKHOpenAPI.CommGetData(e.sTrCode, "", e.sRQName, i, "일자").Trim());//[0] int 현재가 = Int32.Parse(axKHOpenAPI.CommGetData(e.sTrCode, "", e.sRQName, i, "현재가").Trim());//[1] float 대비기호 = 0;//[2] if(!float.TryParse(axKHOpenAPI.CommGetData(e.sTrCode, "", e.sRQName, i, "대비기호").Trim(),out 대비기호)) { } int 전일대비 = 0;//[3] if (!Int32.TryParse(axKHOpenAPI.CommGetData(e.sTrCode, "", e.sRQName, i, "전일대비").Trim(), out 전일대비)) { 전일대비 = Int32.Parse(axKHOpenAPI.CommGetData(e.sTrCode, "", e.sRQName, i, "전일대비").Trim().Replace("--", "-")); } float 등락율 = 0;//[4] if (!float.TryParse(axKHOpenAPI.CommGetData(e.sTrCode, "", e.sRQName, i, "등락율").Trim(), out 등락율)) { 등락율 = float.Parse(axKHOpenAPI.CommGetData(e.sTrCode, "", e.sRQName, i, "등락율").Trim()); } int 누적거래대금 = Int32.Parse(axKHOpenAPI.CommGetData(e.sTrCode, "", e.sRQName, i, "누적거래대금").Trim());//[5 int 개인투자자 = Int32.Parse(axKHOpenAPI.CommGetData(e.sTrCode, "", e.sRQName, i, "개인투자자").Trim());//[6] int 외국인투자자 = Int32.Parse(axKHOpenAPI.CommGetData(e.sTrCode, "", e.sRQName, i, "외국인투자자").Trim());//[7] int 기관계 = Int32.Parse(axKHOpenAPI.CommGetData(e.sTrCode, "", e.sRQName, i, "기관계").Trim());//[8] int 금융투자 = Int32.Parse(axKHOpenAPI.CommGetData(e.sTrCode, "", e.sRQName, i, "금융투자").Trim());//[9] int 보험 = Int32.Parse(axKHOpenAPI.CommGetData(e.sTrCode, "", e.sRQName, i, "보험").Trim());//[10] int 투신 = Int32.Parse(axKHOpenAPI.CommGetData(e.sTrCode, "", e.sRQName, i, "투신").Trim());//[11] int 기타금융 = Int32.Parse(axKHOpenAPI.CommGetData(e.sTrCode, "", e.sRQName, i, "기타금융").Trim());//[12] int 은행 = Int32.Parse(axKHOpenAPI.CommGetData(e.sTrCode, "", e.sRQName, i, "은행").Trim());//[13] int 연기금등 = Int32.Parse(axKHOpenAPI.CommGetData(e.sTrCode, "", e.sRQName, i, "연기금등").Trim());//[14] int 사모펀드 = Int32.Parse(axKHOpenAPI.CommGetData(e.sTrCode, "", e.sRQName, i, "사모펀드").Trim());//[15] int 국가 = Int32.Parse(axKHOpenAPI.CommGetData(e.sTrCode, "", e.sRQName, i, "국가").Trim());//[16] int 기타법인 = Int32.Parse(axKHOpenAPI.CommGetData(e.sTrCode, "", e.sRQName, i, "기타법인").Trim());//[17] int 내외국인 = Int32.Parse(axKHOpenAPI.CommGetData(e.sTrCode, "", e.sRQName, i, "내외국인").Trim());//[18] String tmp1 = String.Format(tmp, 일자 , 현재가, 대비기호, 전일대비, 등락율, 누적거래대금, 개인투자자, 외국인투자자, 기관계, 금융투자, 보험, 투신, 기타금융, 은행, 연기금등, 사모펀드, 국가, 기타법인, 내외국인, 종목코드, spell.buyOrSell, spell.priceOrAmount ); lastStockDate = 일자.ToString(); if (startDate != null) { if (startDate.Equals("ZERO") || startDate.Equals("TWO")) { sbAll.AppendLine(tmp1); } else { if (일자 >= startDate일자) { sbAll.AppendLine(tmp1); } else { break; } } } else { sbAll.AppendLine(tmp1); } } } else { 종목코드 = "00000"; } int prevNext = 0; if (!int.TryParse(e.sPrevNext, out prevNext)) { prevNext = 0; } ScreenNumber.getClass1Instance().DisconnectRealData( e.sScrNo); ScreenNumber.getClass1Instance().SetRealRemove( "ALL", "ALL"); putReceivedQueueAndsetNextSpell(key,sbAll.ToString(), prevNext, lastStockDate); } catch (Exception ex) { FileLog.PrintF("[ALERT-ReceivedData-OPT10059]Exception ex=" + ex.Message); } }
public override void ReceivedData(AxKHOpenAPILib.AxKHOpenAPI axKHOpenAPI, AxKHOpenAPILib._DKHOpenAPIEvents_OnReceiveTrDataEvent e) { /* sScrNo – 화면번호 sRQName – 사용자구분 명 sTrCode – Tran 명 sRecordName – Record 명 sPreNext – 연속조회 유무 */ FileLog.PrintF("ReceivedData OPT10080"); try { StringBuilder sbAll = new StringBuilder(); StringBuilder sb = new StringBuilder(); //sb.Append("일자:{0}|종목코드:{1}|현재가:{2}|거래량:{3}|거래대금:{4}|시가:{5}|고가:{6}|저가:{7}"); //sb.Append("stock_date:{0}|stock_code:{1}|current_price:{2}|trade_quantity:{3}|trade_price:{4}|start_price:{5}|high_price:{6}|low_price:{7}"); sb.Append("{0}|{1}|{2}|{3}|{4}|{5}|{6}|{7}|{8}|{9}|{10}|{11}|{12}|{13}"); String tmp = sb.ToString(); String 종목코드="XXXX"; int nCnt = axKHOpenAPI.GetRepeatCnt(e.sTrCode, e.sRQName); String keyStockCodeLayout = "sRQName:{0}|sTrCode:{1}|sScreenNo:{2}"; String keyStockCode = String.Format(keyStockCodeLayout , e.sRQName , e.sTrCode , e.sScrNo ); 종목코드 = AppLib.getClass1Instance().getStockCode(keyStockCode); String keyLayout = "sRQName:{0}|sTrCode:{1}|sScreenNo:{2}|stockCode:{3}"; String key = String.Format(keyLayout , e.sRQName , e.sTrCode , e.sScrNo , 종목코드 ); spell = AppLib.getClass1Instance().getSpell(key).ShallowCopy(); String startDate = spell.startDate; String lastStockDate = ""; long startDate일자 = 0; //시분초를 더함 if (!long.TryParse(startDate+"000000", out startDate일자)) { startDate일자 = 0; } if (nCnt > 0) { String 종목코드1 = ""; for (int i = 0; i < nCnt; i++) { if (i == 0) { 종목코드1 = axKHOpenAPI.CommGetData(e.sTrCode, "", e.sRQName, i, "종목코드").Trim(); //[0] 싱글 -첫번째에만 나타남 } int 현재가 = Int32.Parse(axKHOpenAPI.CommGetData(e.sTrCode, "", e.sRQName, i, "현재가").Trim()); //[1] int 거래량 = Int32.Parse(axKHOpenAPI.CommGetData(e.sTrCode, "", e.sRQName, i, "거래량").Trim()); //[2] String 체결시간 = axKHOpenAPI.CommGetData(e.sTrCode, "", e.sRQName, i, "체결시간").Trim(); //[3] int 시가 = Int32.Parse(axKHOpenAPI.CommGetData(e.sTrCode, "", e.sRQName, i, "시가").Trim()); //[4] int 고가 = Int32.Parse(axKHOpenAPI.CommGetData(e.sTrCode, "", e.sRQName, i, "고가").Trim()); //[5] int 저가 = Int32.Parse(axKHOpenAPI.CommGetData(e.sTrCode, "", e.sRQName, i, "저가").Trim()); //[6] int 수정주가구분 = 0; if (axKHOpenAPI.CommGetData(e.sTrCode, "", e.sRQName, i, "수정주가구분") !=null && !axKHOpenAPI.CommGetData(e.sTrCode, "", e.sRQName, i, "수정주가구분").ToString().Trim().Equals("")){ 수정주가구분 = Int32.Parse(axKHOpenAPI.CommGetData(e.sTrCode, "", e.sRQName, i, "수정주가구분").Trim()); //[7] } float 수정비율 = 0; if (axKHOpenAPI.CommGetData(e.sTrCode, "", e.sRQName, i, "수정비율") != null && !axKHOpenAPI.CommGetData(e.sTrCode, "", e.sRQName, i, "수정비율").ToString().Trim().Equals("")){ 수정비율 = float.Parse(axKHOpenAPI.CommGetData(e.sTrCode, "", e.sRQName, i, "수정비율").Trim()); //[8] } int 대업종구분 = 0; if (axKHOpenAPI.CommGetData(e.sTrCode, "", e.sRQName, i, "대업종구분") != null && !axKHOpenAPI.CommGetData(e.sTrCode, "", e.sRQName, i, "대업종구분").ToString().Trim().Equals("")){ 대업종구분 = Int32.Parse(axKHOpenAPI.CommGetData(e.sTrCode, "", e.sRQName, i, "대업종구분").Trim()); //[9] } int 소업종구분 = 0; if (axKHOpenAPI.CommGetData(e.sTrCode, "", e.sRQName, i, "소업종구분") != null && !axKHOpenAPI.CommGetData(e.sTrCode, "", e.sRQName, i, "소업종구분").ToString().Trim().Equals("")) { 소업종구분 = Int32.Parse(axKHOpenAPI.CommGetData(e.sTrCode, "", e.sRQName, i, "소업종구분").Trim()); //[10] } int 종목정보 = 0; if (axKHOpenAPI.CommGetData(e.sTrCode, "", e.sRQName, i, "종목정보") != null && !axKHOpenAPI.CommGetData(e.sTrCode, "", e.sRQName, i, "종목정보").ToString().Trim().Equals("")) { 종목정보 = Int32.Parse(axKHOpenAPI.CommGetData(e.sTrCode, "", e.sRQName, i, "종목정보").Trim()); //[11] } int 수정주가이벤트 = 0; if (axKHOpenAPI.CommGetData(e.sTrCode, "", e.sRQName, i, "수정주가이벤트") != null && !axKHOpenAPI.CommGetData(e.sTrCode, "", e.sRQName, i, "수정주가이벤트").ToString().Trim().Equals("")) { 수정주가이벤트 = Int32.Parse(axKHOpenAPI.CommGetData(e.sTrCode, "", e.sRQName, i, "수정주가이벤트").Trim());//[12] } int 전일종가 = 0; if (axKHOpenAPI.CommGetData(e.sTrCode, "", e.sRQName, i, "전일종가") != null && !axKHOpenAPI.CommGetData(e.sTrCode, "", e.sRQName, i, "전일종가").ToString().Trim().Equals("")) { 전일종가 = Int32.Parse(axKHOpenAPI.CommGetData(e.sTrCode, "", e.sRQName, i, "전일종가").Trim()); //[13] } String tmp1 = String.Format(tmp , 종목코드1 , 현재가 , 거래량 , 체결시간 , 시가 , 고가 , 저가 , 수정주가구분 , 수정비율 , 대업종구분 , 소업종구분 , 종목정보 , 수정주가이벤트 , 전일종가 ); //String str일자 = 체결시간.Substring(0, 8); long 일자 = long.Parse(체결시간); lastStockDate = 체결시간; if (startDate != null) { if (startDate.Equals("ZERO") || startDate.Equals("TWO")) { sbAll.AppendLine(tmp1); } else { if (일자 >= startDate일자) { sbAll.AppendLine(tmp1); } else { break; } } } else { sbAll.AppendLine(tmp1); } } } else { 종목코드 = "00000"; } int prevNext = 0; if (!int.TryParse(e.sPrevNext, out prevNext)) { prevNext = 0; } ScreenNumber.getClass1Instance().DisconnectRealData(e.sScrNo); ScreenNumber.getClass1Instance().SetRealRemove("ALL", "ALL"); putReceivedQueueAndsetNextSpell(key,sbAll.ToString(), prevNext, lastStockDate); } catch (Exception ex) { FileLog.PrintF("[ALERT-ReceivedData-OPT10080]Exception ex=" + ex.Message); } }
public override int Run(AxKHOpenAPILib.AxKHOpenAPI axKHOpenAPI, SpellOpt spell) { /* [opt10080: 주식분봉차트조회요청] 1. Open API 조회 함수 입력값을 설정합니다. 종목코드 = 전문 조회할 종목코드 SetInputValue("종목코드" , "입력값 1"); 틱범위 = 1:1분, 3:3분, 5:5분, 10:10분, 15:15분, 30:30분, 45:45분, 60:60분 SetInputValue("틱범위" , "입력값 2"); 수정주가구분 = 0 or 1, 수신데이터 1:유상증자, 2:무상증자, 4:배당락, 8:액면분할, 16:액면병합, 32:기업합병, 64:감자, 256:권리락 SetInputValue("수정주가구분" , "입력값 3"); 2. Open API 조회 함수를 호출해서 전문을 서버로 전송합니다. CommRqData( "RQName" , "opt10080" , "0" , "화면번호"); */ FileLog.PrintF("OPT10080:Run sRQNAME=> " + spell.sRQNAME); FileLog.PrintF("OPT10080:Run sTrCode=> " + spell.sTrCode); FileLog.PrintF("OPT10080:Run nPrevNext=> " + spell.nPrevNext); FileLog.PrintF("OPT10080:Run sScreenNo=> " + spell.sScreenNo); FileLog.PrintF("OPT10080:Run 종목코드=> " + spell.stockCode); FileLog.PrintF("OPT10080:Run 틱범위=> " + spell.tick); FileLog.PrintF("OPT10080:Run 수정주가구분=> 1"); axKHOpenAPI.SetInputValue("종목코드", spell.stockCode); axKHOpenAPI.SetInputValue("틱범위", spell.tick); axKHOpenAPI.SetInputValue("수정주가구분", "1");/*수정주가 구분 이것도 무조건 1로 하자. */ /* 수정주가구분 = 0 or 1, 수신데이터 1:유상증자, 2:무상증자, 4:배당락, 8:액면분할, 16:액면병합, 32:기업합병, 64:감자, 256:권리락 SetInputValue("수정주가구분" , "입력값 3"); */ int ret = axKHOpenAPI.CommRqData(spell.sRQNAME, spell.sTrCode, spell.nPrevNext, spell.sScreenNo); return ret; }
public override void ReceivedData(AxKHOpenAPILib.AxKHOpenAPI axKHOpenAPI, AxKHOpenAPILib._DKHOpenAPIEvents_OnReceiveTrDataEvent e) { FileLog.PrintF("ReceivedData OPT10014"); try { /* sScrNo – 화면번호 sRQName – 사용자구분 명 sTrCode – Tran 명 sRecordName – Record 명 sPreNext – 연속조회 유무 */ StringBuilder sbAll = new StringBuilder(); StringBuilder sb = new StringBuilder(); /*일자,종목코드 ,종가,전일대비기호,전일대비,등락율,거래량,공매도량,매매비중,공매도거래대금,공매도평균가*/ sb.Append("{0}|{1}|{2}|{3}|{4}|{5}|{6}|{7}|{8}|{9}|{10}"); String tmp = sb.ToString(); String 종목코드 = "XXXX"; int nCnt = axKHOpenAPI.GetRepeatCnt(e.sTrCode, e.sRQName); String keyStockCodeLayout = "sRQName:{0}|sTrCode:{1}|sScreenNo:{2}"; String keyStockCode = String.Format(keyStockCodeLayout , e.sRQName , e.sTrCode , e.sScrNo ); 종목코드 = AppLib.getClass1Instance().getStockCode(keyStockCode); String keyLayout = "sRQName:{0}|sTrCode:{1}|sScreenNo:{2}|stockCode:{3}"; String key = String.Format(keyLayout , e.sRQName , e.sTrCode , e.sScrNo , 종목코드 ); spell = AppLib.getClass1Instance().getSpell(key).ShallowCopy(); String startDate = spell.startDate; String lastStockDate = ""; int startDate일자 = 0; if (!int.TryParse(startDate, out startDate일자)) { startDate일자 = 0; } if (nCnt > 0) { for (int i = 0; i < nCnt; i++) { int 일자 = Int32.Parse(axKHOpenAPI.CommGetData(e.sTrCode, "", e.sRQName, i, "일자").Trim());//[0] int 종가 = Int32.Parse(axKHOpenAPI.CommGetData(e.sTrCode, "", e.sRQName, i, "종가").Trim());//[1] int 전일대비기호 = Int32.Parse(axKHOpenAPI.CommGetData(e.sTrCode, "", e.sRQName, i, "전일대비기호").Trim());//[2] int 전일대비 = Int32.Parse(axKHOpenAPI.CommGetData(e.sTrCode, "", e.sRQName, i, "전일대비").Trim());//[3] float 등락율 = float.Parse(axKHOpenAPI.CommGetData(e.sTrCode, "", e.sRQName, i, "등락율").Trim());//[4] int 거래량 = Int32.Parse(axKHOpenAPI.CommGetData(e.sTrCode, "", e.sRQName, i, "거래량").Trim());//[5] int 공매도량 = Int32.Parse(axKHOpenAPI.CommGetData(e.sTrCode, "", e.sRQName, i, "공매도량").Trim());//[6] float 매매비중 = float.Parse(axKHOpenAPI.CommGetData(e.sTrCode, "", e.sRQName, i, "매매비중").Trim());//[7] int 공매도거래대금 = Int32.Parse(axKHOpenAPI.CommGetData(e.sTrCode, "", e.sRQName, i, "공매도거래대금").Trim());//[8] int 공매도평균가 = Int32.Parse(axKHOpenAPI.CommGetData(e.sTrCode, "", e.sRQName, i, "공매도평균가").Trim());//[9] String tmp1 = String.Format(tmp, 일자, 종목코드, 종가, 전일대비기호, 전일대비, 등락율, 거래량, 공매도량, 매매비중, 공매도거래대금, 공매도평균가 ); lastStockDate = 일자.ToString(); if (startDate != null) { if (startDate.Equals("ZERO") || startDate.Equals("TWO")) { sbAll.AppendLine(tmp1); } else { if (일자 >= startDate일자) { sbAll.AppendLine(tmp1); } else { break; } } } else { sbAll.AppendLine(tmp1); } } } else { 종목코드 = "00000"; } int prevNext = 0; if (!int.TryParse(e.sPrevNext, out prevNext)) { prevNext = 0; } ScreenNumber.getClass1Instance().DisconnectRealData(e.sScrNo); ScreenNumber.getClass1Instance().SetRealRemove("ALL", "ALL"); putReceivedQueueAndsetNextSpell(key,sbAll.ToString(), prevNext, lastStockDate); } catch (Exception ex) { FileLog.PrintF("[ALERT-ReceivedData-OPT10014]Exception ex=" + ex.Message); } }
public override int Run(AxKHOpenAPILib.AxKHOpenAPI axKHOpenAPI, SpellOpt spell) { /* [ opt10001 : 주식기본정보요청 ] 1. Open API 조회 함수 입력값을 설정합니다. 종목코드 = 전문 조회할 종목코드 SetInputValue("종목코드" , "181710;066570"); 2. Open API 조회 함수를 호출해서 전문을 서버로 전송합니다. CommRqData( "RQName" , "opt10001" , "0" , "화면번호"); */ FileLog.PrintF("OPT10001:Run sRQNAME=>" + spell.sRQNAME); FileLog.PrintF("OPT10001:Run sTrCode=>" + spell.sTrCode); FileLog.PrintF("OPT10001:Run nPrevNext=>" + spell.nPrevNext); FileLog.PrintF("OPT10001:Run sScreenNo=>" + spell.sScreenNo); FileLog.PrintF("OPT10001:Run 종목코드=>" + spell.stockCode); axKHOpenAPI.SetInputValue("종목코드", spell.stockCode); int ret = axKHOpenAPI.CommRqData(spell.sRQNAME, spell.sTrCode, spell.nPrevNext, spell.sScreenNo); return ret; }
public override void ReceivedData(AxKHOpenAPILib.AxKHOpenAPI axKHOpenAPI, AxKHOpenAPILib._DKHOpenAPIEvents_OnReceiveTrDataEvent e) { FileLog.PrintF("ReceivedData OPT10001"); try { /* sScrNo – 화면번호 sRQName – 사용자구분 명 sTrCode – Tran 명 sRecordName – Record 명 sPreNext – 연속조회 유무 */ StringBuilder sbAll = new StringBuilder(); StringBuilder sb = new StringBuilder(); /*일자,종목코드 ,종가,전일대비기호,전일대비,등락율,거래량,공매도량,매매비중,공매도거래대금,공매도평균가*/ sb.Append("{0}|{1}|{2}|{3}|{4}|{5}|{6}|{7}|{8}|{9}|{10}|{11}|{12}|{13}|{14}|{15}|{16}|{17}|{18}|{19}|{20}|{21}|{22}|{23}|{24}|{25}|{26}|{27}|{28}|{29}|{30}|{31}|{32}|{33}|{34}|{35}|{36}|{37}|{38}|{39}|{40}|{41}|{42}"); String tmp = sb.ToString(); String 종목코드 = "XXXX"; int nCnt = axKHOpenAPI.GetRepeatCnt(e.sTrCode, e.sRQName); String keyStockCodeLayout = "sRQName:{0}|sTrCode:{1}|sScreenNo:{2}"; String keyStockCode = String.Format(keyStockCodeLayout , e.sRQName , e.sTrCode , e.sScrNo ); 종목코드 = AppLib.getClass1Instance().getStockCode(keyStockCode); String keyLayout = "sRQName:{0}|sTrCode:{1}|sScreenNo:{2}|stockCode:{3}"; String key = String.Format(keyLayout , e.sRQName , e.sTrCode , e.sScrNo , 종목코드 ); String 일자 = DateTime.Now.ToString("yyyyMMdd"); spell = AppLib.getClass1Instance().getSpell(key).ShallowCopy(); //Array arr =(Array)axKHOpenAPI.GetCommDataEx(e.sTrCode, e.sRQName); if (nCnt > 0) { for (int i = 0; i < nCnt; i++) { String 종목코드1 = axKHOpenAPI.CommGetData(e.sTrCode, "", e.sRQName, i, "종목코드").Trim();//[0] if (종목코드1.Equals("")) { 종목코드1 = 종목코드;//일부 종목코드들은 아래 데이터가 아예 안나온다. ///51A077 } String 종목명 = axKHOpenAPI.CommGetData(e.sTrCode, "", e.sRQName, i, "종목명").Trim();//[1] int 결산월 = 0; String str결산월=axKHOpenAPI.CommGetData(e.sTrCode, "", e.sRQName, i, "결산월"); if (isNotNull(str결산월)==true) { 결산월 = Int32.Parse(str결산월.Trim());//[2] } String str액면가 = axKHOpenAPI.CommGetData(e.sTrCode, "", e.sRQName, i, "액면가"); float 액면가 = 0; if (isNotNull(str액면가) == true) { 액면가 = float.Parse(str액면가.Trim());//[3] } String str자본금 = axKHOpenAPI.CommGetData(e.sTrCode, "", e.sRQName, i, "자본금"); int 자본금 = 0; if (isNotNull(str자본금) == true) { 자본금 = Int32.Parse(str자본금.Trim());//[4] } String str상장주식 = axKHOpenAPI.CommGetData(e.sTrCode, "", e.sRQName, i, "상장주식"); int 상장주식 = 0; if (isNotNull(str상장주식) == true) { 상장주식 = Int32.Parse(str상장주식.Trim());//[5] } String str신용비율 = axKHOpenAPI.CommGetData(e.sTrCode, "", e.sRQName, i, "신용비율"); float 신용비율 = 0; if (isNotNull(str신용비율) == true) { 신용비율 = float.Parse(str신용비율.Trim());//[6] } String str연중최고 = axKHOpenAPI.CommGetData(e.sTrCode, "", e.sRQName, i, "연중최고"); int 연중최고 = 0; if (isNotNull(str연중최고) == true) { 연중최고 = int.Parse(str연중최고.Trim());//[7] } String str연중최저 = axKHOpenAPI.CommGetData(e.sTrCode, "", e.sRQName, i, "연중최저"); int 연중최저 = 0; if (isNotNull(str연중최저) == true) { 연중최저 = int.Parse(str연중최저.Trim());//[8] } String str시가총액 = axKHOpenAPI.CommGetData(e.sTrCode, "", e.sRQName, i, "시가총액"); int 시가총액 = 0; if (isNotNull(str시가총액) == true) { 시가총액 = int.Parse(str시가총액.Trim());//[9] } String str시가총액비중 = axKHOpenAPI.CommGetData(e.sTrCode, "", e.sRQName, i, "시가총액비중"); int 시가총액비중 = 0; if (isNotNull(str시가총액비중) == true) { 시가총액비중 = Int32.Parse(str시가총액비중.Trim());//[10] } String str외인소진률 = axKHOpenAPI.CommGetData(e.sTrCode, "", e.sRQName, i, "외인소진률"); float 외인소진률 = 0; if (isNotNull(str외인소진률) == true) { 외인소진률 = float.Parse(str외인소진률.Trim());//[11] } String str대용가 = axKHOpenAPI.CommGetData(e.sTrCode, "", e.sRQName, i, "대용가"); int 대용가 = 0; if (isNotNull(str대용가) == true) { 대용가 = int.Parse(str대용가.Trim());//[12] } String strPER = axKHOpenAPI.CommGetData(e.sTrCode, "", e.sRQName, i, "PER"); float PER = 0; if (isNotNull(strPER) == true) { PER = float.Parse(strPER.Trim());//[13] } String strEPS = axKHOpenAPI.CommGetData(e.sTrCode, "", e.sRQName, i, "EPS"); int EPS = 0; if (isNotNull(strEPS) == true) { EPS = int.Parse(strEPS.Trim());//[14] } String strROE = axKHOpenAPI.CommGetData(e.sTrCode, "", e.sRQName, i, "ROE"); float ROE = 0; if (isNotNull(strROE) == true) { ROE = float.Parse(strROE.Trim());//[15] } String strPBR = axKHOpenAPI.CommGetData(e.sTrCode, "", e.sRQName, i, "PBR"); float PBR = 0; if (isNotNull(strPBR) == true) { PBR = float.Parse(strPBR.Trim());//[16] } String strEV = axKHOpenAPI.CommGetData(e.sTrCode, "", e.sRQName, i, "EV"); float EV = 0; if (isNotNull(strEV) == true) { EV = float.Parse(strEV.Trim());//[17] } String strBPS = axKHOpenAPI.CommGetData(e.sTrCode, "", e.sRQName, i, "BPS"); int BPS = 0; if (isNotNull(strBPS) == true) { BPS = int.Parse(strBPS.Trim());//[18] } String str매출액 = axKHOpenAPI.CommGetData(e.sTrCode, "", e.sRQName, i, "매출액"); int 매출액 = 0; if (isNotNull(str매출액) == true) { 매출액 = Int32.Parse(str매출액.Trim());//[19] } String str영업이익 = axKHOpenAPI.CommGetData(e.sTrCode, "", e.sRQName, i, "영업이익"); int 영업이익 = 0; if (isNotNull(str영업이익) == true) { 영업이익 = Int32.Parse(str영업이익.Trim());//[20] } String strD250최고 = axKHOpenAPI.CommGetData(e.sTrCode, "", e.sRQName, i, "250최고"); int D250최고 = 0; if (isNotNull(strD250최고) == true) { D250최고 = Int32.Parse(strD250최고.Trim());//[21] } String strD250최저 = axKHOpenAPI.CommGetData(e.sTrCode, "", e.sRQName, i, "250최저"); int D250최저 = 0; if (isNotNull(strD250최저) == true) { D250최저 = Int32.Parse(strD250최저.Trim());//[22] } int 시가 = Int32.Parse(axKHOpenAPI.CommGetData(e.sTrCode, "", e.sRQName, i, "시가").Trim());//[23] int 고가 = Int32.Parse(axKHOpenAPI.CommGetData(e.sTrCode, "", e.sRQName, i, "고가").Trim());//[24] int 저가 = Int32.Parse(axKHOpenAPI.CommGetData(e.sTrCode, "", e.sRQName, i, "저가").Trim());//[25] int 상한가 = Int32.Parse(axKHOpenAPI.CommGetData(e.sTrCode, "", e.sRQName, i, "상한가").Trim());//[26] int 하한가 = Int32.Parse(axKHOpenAPI.CommGetData(e.sTrCode, "", e.sRQName, i, "하한가").Trim());//[27] int 기준가 = Int32.Parse(axKHOpenAPI.CommGetData(e.sTrCode, "", e.sRQName, i, "기준가").Trim());//[28] String str예상체결가 = axKHOpenAPI.CommGetData(e.sTrCode, "", e.sRQName, i, "예상체결가"); int 예상체결가 = 0; if (isNotNull(str예상체결가) == true) { 예상체결가 = Int32.Parse(str예상체결가.Trim());//[29] } String str예상체결수량 = axKHOpenAPI.CommGetData(e.sTrCode, "", e.sRQName, i, "예상체결수량"); int 예상체결수량 = 0; if (isNotNull(str예상체결수량) == true) { 예상체결수량 = Int32.Parse(str예상체결수량.Trim());//[30] } String D250최고가일 = axKHOpenAPI.CommGetData(e.sTrCode, "", e.sRQName, i, "250최고가일").Trim();//[31] float D250최고가대비율 = float.Parse(axKHOpenAPI.CommGetData(e.sTrCode, "", e.sRQName, i, "250최고가대비율").Trim());//[32] String D250최저가일 = axKHOpenAPI.CommGetData(e.sTrCode, "", e.sRQName, i, "250최저가일").Trim();//[33] float D250최저가대비율 = float.Parse(axKHOpenAPI.CommGetData(e.sTrCode, "", e.sRQName, i, "250최저가대비율").Trim());//[34] int 현재가 = Int32.Parse(axKHOpenAPI.CommGetData(e.sTrCode, "", e.sRQName, i, "현재가").Trim());//[35] int 대비기호 = Int32.Parse(axKHOpenAPI.CommGetData(e.sTrCode, "", e.sRQName, i, "대비기호").Trim());//[36] int 전일대비 = Int32.Parse(axKHOpenAPI.CommGetData(e.sTrCode, "", e.sRQName, i, "전일대비").Trim());//[37] float 등락율 = float.Parse(axKHOpenAPI.CommGetData(e.sTrCode, "", e.sRQName, i, "등락율").Trim());//[38] int 거래량 = Int32.Parse(axKHOpenAPI.CommGetData(e.sTrCode, "", e.sRQName, i, "거래량").Trim());//[39] float 거래대비 = float.Parse(axKHOpenAPI.CommGetData(e.sTrCode, "", e.sRQName, i, "거래대비").Trim());//[40] String 액면가단위 = axKHOpenAPI.CommGetData(e.sTrCode, "", e.sRQName, i, "액면가단위").Trim();//[41] String tmp1 = String.Format(tmp, 일자, 종목코드1, 종목명, 결산월, 액면가, 자본금, 상장주식, 신용비율, 연중최고, 연중최저, 시가총액, 시가총액비중, 외인소진률, 대용가, PER, EPS, ROE, PBR, EV, BPS, 매출액, 영업이익, D250최고, D250최저, 시가, 고가, 저가, 상한가, 하한가, 기준가, 예상체결가, 예상체결수량, D250최고가일, D250최고가대비율, D250최저가일, D250최저가대비율, 현재가, 대비기호, 전일대비, 등락율, 거래량, 거래대비, 액면가단위 ); sbAll.AppendLine(tmp1); } } else { 종목코드 = "00000"; } //이건 nPreNext가 항상 0이다. 당일 조회만 됨 int prevNext = 0; if (!int.TryParse(e.sPrevNext, out prevNext)) { prevNext = 0; } String lastStockDate = ""; ScreenNumber.getClass1Instance().DisconnectRealData( e.sScrNo); ScreenNumber.getClass1Instance().SetRealRemove("ALL", "ALL"); putReceivedQueueAndsetNextSpell(key,sbAll.ToString(), prevNext, lastStockDate); } catch(Exception ex) { FileLog.PrintF("[ALERT-ReceivedData-OPT10001]Exception ex=" + ex.Message); } }
public override void ReceivedData(AxKHOpenAPILib.AxKHOpenAPI axKHOpenAPI, AxKHOpenAPILib._DKHOpenAPIEvents_OnReceiveTrDataEvent e) { FileLog.PrintF("ReceivedData OPT10085"); //try { /* sScrNo – 화면번호 sRQName – 사용자구분 명 sTrCode – Tran 명 sRecordName – Record 명 sPreNext – 연속조회 유무 */ String 계좌번호 = "XXXXXXXXXX"; int nCnt = axKHOpenAPI.GetRepeatCnt(e.sTrCode, e.sRQName); String keyStockCodeLayout = "sRQName:{0}|sTrCode:{1}|sScreenNo:{2}"; String keyStockCode = String.Format(keyStockCodeLayout , e.sRQName , e.sTrCode , e.sScrNo ); 계좌번호 = AppLib.getClass1Instance().getStockCode(keyStockCode); String keyLayout = "sRQName:{0}|sTrCode:{1}|sScreenNo:{2}|accountNum:{3}"; String key = String.Format(keyLayout , e.sRQName , e.sTrCode , e.sScrNo , 계좌번호 ); List < OPT10085_Data > opt10085_DataList = new List<OPT10085_Data>(); if (nCnt > 0) { for (int i = 0; i < nCnt; i++) { FileLog.PrintF("OPT10085 ReceivedData 구매일자 =>" + axKHOpenAPI.CommGetData(e.sTrCode, "", e.sRQName, i, "일자").Trim());//[0] FileLog.PrintF("OPT10085 ReceivedData 종목코드 =>" + axKHOpenAPI.CommGetData(e.sTrCode, "", e.sRQName, i, "종목코드").Trim());//[1] FileLog.PrintF("OPT10085 ReceivedData 종목명 =>" + axKHOpenAPI.CommGetData(e.sTrCode, "", e.sRQName, i, "종목명").Trim());//[2] FileLog.PrintF("OPT10085 ReceivedData 현재가 =>" + axKHOpenAPI.CommGetData(e.sTrCode, "", e.sRQName, i, "현재가").Trim());//[3] FileLog.PrintF("OPT10085 ReceivedData 매입가 =>" + axKHOpenAPI.CommGetData(e.sTrCode, "", e.sRQName, i, "매입가").Trim());//[4] FileLog.PrintF("OPT10085 ReceivedData 매입금액 =>" + axKHOpenAPI.CommGetData(e.sTrCode, "", e.sRQName, i, "매입금액").Trim());//[5] FileLog.PrintF("OPT10085 ReceivedData 보유수량 =>" + axKHOpenAPI.CommGetData(e.sTrCode, "", e.sRQName, i, "보유수량").Trim());//[6] FileLog.PrintF("OPT10085 ReceivedData 당일매도손익 =>" + axKHOpenAPI.CommGetData(e.sTrCode, "", e.sRQName, i, "당일매도손익").Trim());//[7] FileLog.PrintF("OPT10085 ReceivedData 당일매매수수료 =>" + axKHOpenAPI.CommGetData(e.sTrCode, "", e.sRQName, i, "당일매매수수료").Trim());//[8] FileLog.PrintF("OPT10085 ReceivedData 당일매매세금 =>" + axKHOpenAPI.CommGetData(e.sTrCode, "", e.sRQName, i, "당일매매세금").Trim());//[9] FileLog.PrintF("OPT10085 ReceivedData 신용구분 =>" + axKHOpenAPI.CommGetData(e.sTrCode, "", e.sRQName, i, "신용구분").Trim());//[10] FileLog.PrintF("OPT10085 ReceivedData 대출일 =>" + axKHOpenAPI.CommGetData(e.sTrCode, "", e.sRQName, i, "대출일").Trim());//[11] FileLog.PrintF("OPT10085 ReceivedData 결제잔고 =>" + axKHOpenAPI.CommGetData(e.sTrCode, "", e.sRQName, i, "결제잔고").Trim());//[12] FileLog.PrintF("OPT10085 ReceivedData 청산가능수량 =>" + axKHOpenAPI.CommGetData(e.sTrCode, "", e.sRQName, i, "청산가능수량").Trim());//[13] FileLog.PrintF("OPT10085 ReceivedData 신용금액 =>" + axKHOpenAPI.CommGetData(e.sTrCode, "", e.sRQName, i, "신용금액").Trim());//[14] FileLog.PrintF("OPT10085 ReceivedData 신용이자 =>" + axKHOpenAPI.CommGetData(e.sTrCode, "", e.sRQName, i, "신용이자").Trim());//[15] FileLog.PrintF("OPT10085 ReceivedData 만기일 =>" + axKHOpenAPI.CommGetData(e.sTrCode, "", e.sRQName, i, "만기일").Trim());//[16] OPT10085_Data opt10085_Data = new OPT10085_Data(); opt10085_Data.구매일자 = axKHOpenAPI.CommGetData(e.sTrCode, "", e.sRQName, i, "일자").Trim();//[0] opt10085_Data.종목코드 = axKHOpenAPI.CommGetData(e.sTrCode, "", e.sRQName, i, "종목코드").Trim();//[1] opt10085_Data.종목명 =axKHOpenAPI.CommGetData(e.sTrCode, "", e.sRQName, i, "종목명").Trim(); //[2] int 현재가 = Int32.Parse(axKHOpenAPI.CommGetData(e.sTrCode, "", e.sRQName, i, "현재가").Trim()); //[3] opt10085_Data.현재가 = 현재가; opt10085_Data.매입가 = Int32.Parse(axKHOpenAPI.CommGetData(e.sTrCode, "", e.sRQName, i, "매입가").Trim()); //[4] int 매입금액 = Int32.Parse(axKHOpenAPI.CommGetData(e.sTrCode, "", e.sRQName, i, "매입금액").Trim()); //[5] opt10085_Data.매입금액 = 매입금액; int 보유수량= Int32.Parse(axKHOpenAPI.CommGetData(e.sTrCode, "", e.sRQName, i, "보유수량").Trim()); //[6] opt10085_Data.보유수량 = 보유수량; opt10085_Data.당일매도손익 = Int32.Parse(axKHOpenAPI.CommGetData(e.sTrCode, "", e.sRQName, i, "당일매도손익").Trim()); //[7] String str당일매매수수료 = axKHOpenAPI.CommGetData(e.sTrCode, "", e.sRQName, i, "당일매매수수료"); opt10085_Data.당일매매수수료 = 0; if (isNotNull(str당일매매수수료) == true) { opt10085_Data.당일매매수수료 = Int32.Parse(str당일매매수수료.Trim());//[8] } opt10085_Data.당일매매세금 = Int32.Parse(axKHOpenAPI.CommGetData(e.sTrCode, "", e.sRQName, i, "당일매매세금").Trim()); //[9] opt10085_Data.신용구분 = axKHOpenAPI.CommGetData(e.sTrCode, "", e.sRQName, i, "신용구분").Trim();//[10] opt10085_Data.대출일 = axKHOpenAPI.CommGetData(e.sTrCode, "", e.sRQName, i, "대출일").Trim();//[11] opt10085_Data.결제잔고 = Int32.Parse(axKHOpenAPI.CommGetData(e.sTrCode, "", e.sRQName, i, "결제잔고").Trim()); //[12] opt10085_Data.청산가능수량 = Int32.Parse(axKHOpenAPI.CommGetData(e.sTrCode, "", e.sRQName, i, "청산가능수량").Trim()); //[13] opt10085_Data.신용금액 = Int32.Parse(axKHOpenAPI.CommGetData(e.sTrCode, "", e.sRQName, i, "신용금액").Trim()); //[14] opt10085_Data.신용이자 = Int32.Parse(axKHOpenAPI.CommGetData(e.sTrCode, "", e.sRQName, i, "신용이자").Trim()); //[15] opt10085_Data.만기일 = axKHOpenAPI.CommGetData(e.sTrCode, "", e.sRQName, i, "만기일").Trim();//[16] /*내가 만들 데이터*/ /*매입가에는 수수료가 포함안되어있다. 매입당시 수수료가 통장에서 빠져나가지만 내가 얼마나 수익이 났는지 확인하기 위해 매입수수료와 매도 수수료를 합쳐서 수수료로 표시해준다. 수수료는 10원 미만 절삭 86원이면 80원임 */ //System.Math.Truncate() int 평가금액 = Math.Abs(현재가) * 보유수량; int 매입수수료 = Commission.GetKiwoomCommissionBuy(매입금액); int 매도수수료 = Commission.GetKiwoomCommissionSell(평가금액); int 수수료 = 매입수수료 + 매도수수료; int 매도세금 =Commission.GetTaxSell(평가금액); int 손익분기매입가 = 0; if (보유수량 != 0)//이게 0일경우가 있다 매도를 한상태일경우 보유수량이 0으로 리스트에 계속 존재한다. { 손익분기매입가 = (매입수수료 + 매도수수료 + 매도세금 + 매입금액) / 보유수량; // 무조건오림 } int 평가손익 = 평가금액 - (매입금액+수수료+매도세금); // float 수익률 = (평가손익 / 매입금액) * 100; //int끼리 나눠서... 소수점을 버리는구나.. 이런.. float 수익률 = 0; if (매입금액 != 0) { 수익률 = ((float)평가손익 / (float)매입금액) * 100; } int 손익금액 = (평가금액-매입금액); float 손익율 = 0; if (매입금액 != 0) { 손익율 = ((float)손익금액 / (float)매입금액) * 100; } opt10085_Data.평가금액=평가금액; opt10085_Data.매입수수료 = 매입수수료; opt10085_Data.매도수수료 = 매도수수료; opt10085_Data.수수료 = 수수료; opt10085_Data.매도세금 = 매도세금; opt10085_Data.손익분기매입가 = 손익분기매입가; opt10085_Data.평가손익 = 평가손익; opt10085_Data.수익률 = 수익률; opt10085_Data.손익금액 = 손익금액; opt10085_Data.손익율 = 손익율; opt10085_Data.계좌번호 = 계좌번호; FileLog.PrintF("OPT10085 ReceivedData 평가손익=>" + 평가손익); FileLog.PrintF("OPT10085 ReceivedData 손익금액=>" + 손익금액); FileLog.PrintF("OPT10085 ReceivedData 매입금액=>" + 매입금액); FileLog.PrintF("OPT10085 ReceivedData 평가손익=>" + 평가손익); FileLog.PrintF("OPT10085 ReceivedData 수익률=>" + 수익률); FileLog.PrintF("OPT10085 ReceivedData 손익율=>" + 손익율); //(8025-8089)/8089*100 //24005=23775+160+70 //24005-24575=-570 //24805 opt10085_DataList.Add(opt10085_Data); } } //axKHOpenAPI.DisconnectRealData(e.sScrNo); 계좌 수익률 정보는 실시간 데이터간 데이터로 들어온다면... 실시간으로 처리하는것이 이익이다.. //화면번호도 고정이면 좋을것 같다... FileLog.PrintF("ReceivedData OPT10085 opt10085_DataList.Count()=>" + opt10085_DataList.Count()); AppLib.getClass1Instance().removeStockCodeDictionary(keyStockCode); AppLib.getClass1Instance().removeSpellDictionary(key); MyStock.getClass1Instance().reLoad(opt10085_DataList); //보내는처리 무엇이든. //} //catch(Exception ex) //{ // FileLog.PrintF("[ALERT-ReceivedData-OPT10085]Exception ex=" + ex.Message); //} }
private void axKHOpenAPI_OnReceiveConditionVer(object sender, AxKHOpenAPILib._DKHOpenAPIEvents_OnReceiveConditionVerEvent e) { FileLog.PrintF("====================axKHOpenAPI_OnReceiveConditionVer==============================="); Logger(Log.디버깅, "====================axKHOpenAPI_OnReceiveConditionVer==============================="); if (e.lRet == 1) { Logger(Log.일반, "[이벤트] 조건식 저장 성공"); FileLog.PrintF("[이벤트] 조건식 저장 성공"); String ret=axKHOpenAPI.GetConditionNameList(); // 인덱스1^조건명1;인덱스2^조건명2;인덱스3^조건명3;… 조건리스트를 불러온다. FileLog.PrintF("btn_GetConditionNameList_Click ret=>" + ret); UpdateDbConditionNameList(ret); } else { Logger(Log.에러, "[이벤트] 조건식 저장 실패 : " + e.sMsg); FileLog.PrintF("[이벤트] 조건식 저장 실패 : " + e.sMsg); } }
private void axKHOpenAPI_OnReceiveTrData(object sender, AxKHOpenAPILib._DKHOpenAPIEvents_OnReceiveTrDataEvent e) { FileLog.PrintF("====================axKHOpenAPI_OnReceiveTrData==============================="); FileLog.PrintF("axKHOpenAPI_OnReceiveTrData e.sRecordName=>" + e.sRecordName); FileLog.PrintF("axKHOpenAPI_OnReceiveTrData e.sRQName=>" + e.sRQName); FileLog.PrintF("axKHOpenAPI_OnReceiveTrData e.sScrNo=>" + e.sScrNo); FileLog.PrintF("axKHOpenAPI_OnReceiveTrData e.sTrCode=>" + e.sTrCode); Logger(Log.디버깅, "====================axKHOpenAPI_OnReceiveTrData==============================="); ReceiveTrDataFactory rtf = ReceiveTrDataFactory.getClass1Instance(); rtf.runReceiveTrData(axKHOpenAPI, e); }
public override int Run(AxKHOpenAPILib.AxKHOpenAPI axKHOpenAPI, SpellOpt spell) { /* [ OPT10059 : 종목별투자자기관별요청 ] 1. Open API 조회 함수 입력값을 설정합니다. 일자 = YYYYMMDD (20160101 연도4자리, 월 2자리, 일 2자리 형식) SetInputValue("일자" , "입력값 1"); 종목코드 = 전문 조회할 종목코드 SetInputValue("종목코드" , "입력값 2"); 금액수량구분 = 1:금액, 2:수량 SetInputValue("금액수량구분" , "입력값 3"); 매매구분 = 0:순매수, 1:매수, 2:매도 SetInputValue("매매구분" , "입력값 4"); 단위구분 = 1000:천주, 1:단주 SetInputValue("단위구분" , "입력값 5"); 2. Open API 조회 함수를 호출해서 전문을 서버로 전송합니다. CommRqData( "RQName" , "OPT10059" , "0" , "화면번호"); */ FileLog.PrintF("OPT10059:Run sRQNAME=> " + spell.sRQNAME); FileLog.PrintF("OPT10059:Run sTrCode=> " + spell.sTrCode); FileLog.PrintF("OPT10059:Run nPrevNext=> " + spell.nPrevNext); FileLog.PrintF("OPT10059:Run sScreenNo=> " + spell.sScreenNo); FileLog.PrintF("OPT10059:Run 일자=> " + spell.endDate); FileLog.PrintF("OPT10059:Run 종목코드=> " + spell.stockCode); FileLog.PrintF("OPT10059:Run 금액수량구분=> " + spell.priceOrAmount); FileLog.PrintF("OPT10059:Run 매매구분=> " + spell.buyOrSell); FileLog.PrintF("OPT10059:Run 단위구분=> 1"); axKHOpenAPI.SetInputValue("일자", spell.endDate); axKHOpenAPI.SetInputValue("종목코드", spell.stockCode); axKHOpenAPI.SetInputValue("금액수량구분", spell.priceOrAmount); axKHOpenAPI.SetInputValue("매매구분", spell.buyOrSell); axKHOpenAPI.SetInputValue("단위구분", "1"); /*단위구분 = 1000:천주, 1:단주 --수량단위구분 모조건 1 -금액은 무조건 백만원단위 */ int ret = axKHOpenAPI.CommRqData(spell.sRQNAME, spell.sTrCode, spell.nPrevNext, spell.sScreenNo); return ret; }
private void axKHOpenAPI_OnEventConnect(object sender, AxKHOpenAPILib._DKHOpenAPIEvents_OnEventConnectEvent e) { FileLog.PrintF("====================axKHOpenAPI_OnEventConnect==============================="); Logger(Log.디버깅, "====================axKHOpenAPI_OnEventConnect==============================="); if (Error.IsError(e.nErrCode)) { Logger(Log.일반, "[로그인 처리결과] " + Error.GetErrorMessage()); class1.Start(); axKHOpenAPI.GetConditionLoad(); } else { Logger(Log.에러, "[로그인 처리결과] " + Error.GetErrorMessage()); } }
public override int Run(AxKHOpenAPILib.AxKHOpenAPI axKHOpenAPI, SpellOpt spell) { /* [OPW00004: 계좌평가현황요청] 1. Open API 조회 함수 입력값을 설정합니다. 계좌번호 = 전문 조회할 보유계좌번호 SetInputValue("계좌번호" , "입력값 1"); 비밀번호 = 사용안함(공백) SetInputValue("비밀번호" , "입력값 2"); 상장폐지조회구분 = 0:전체, 1:상장폐지종목제외 SetInputValue("상장폐지조회구분" , "입력값 3"); 비밀번호입력매체구분 = 00 SetInputValue("비밀번호입력매체구분" , "입력값 4"); 2. Open API 조회 함수를 호출해서 전문을 서버로 전송합니다. CommRqData( "RQName" , "OPW00004" , "0" , "화면번호"); */ axKHOpenAPI.SetInputValue("계좌번호", spell.stockCode); axKHOpenAPI.SetInputValue("비밀번호", spell.endDate); axKHOpenAPI.SetInputValue("상장폐지조회구분", "0"); axKHOpenAPI.SetInputValue("비밀번호입력매체구분", "00"); int ret = axKHOpenAPI.CommRqData(spell.sRQNAME, spell.sTrCode, spell.nPrevNext, spell.sScreenNo); return ret; }
public override int Run(AxKHOpenAPILib.AxKHOpenAPI axKHOpenAPI, SpellOpt spell) { /* [opt10014: 공매도추이요청] 1. Open API 조회 함수 입력값을 설정합니다. 종목코드 = 전문 조회할 종목코드 SetInputValue("종목코드" , "입력값 1"); 시간구분 = 0:시작일, 1:기간 SetInputValue("시간구분" , "입력값 2"); 시작일자 = YYYYMMDD(20160101 연도4자리, 월 2자리, 일 2자리 형식) SetInputValue("시작일자" , "입력값 3"); 종료일자 = YYYYMMDD(20160101 연도4자리, 월 2자리, 일 2자리 형식) SetInputValue("종료일자" , "입력값 4"); 2. Open API 조회 함수를 호출해서 전문을 서버로 전송합니다. CommRqData( "RQName" , "opt10014" , "0" , "화면번호"); */ FileLog.PrintF("OPT10014:Run sRQNAME=> " + spell.sRQNAME); FileLog.PrintF("OPT10014:Run sTrCode=> " + spell.sTrCode); FileLog.PrintF("OPT10014:Run nPrevNext=> " + spell.nPrevNext); FileLog.PrintF("OPT10014:Run sScreenNo=> " + spell.sScreenNo); FileLog.PrintF("OPT10014:Run 종목코드=> " + spell.stockCode); FileLog.PrintF("OPT10014:Run 시간구분=> " + "0"); FileLog.PrintF("OPT10014:Run 시작일자=> " + spell.startDate); FileLog.PrintF("OPT10014:Run 종료일자=> " + spell.endDate); axKHOpenAPI.SetInputValue("종목코드", spell.stockCode); axKHOpenAPI.SetInputValue("시간구분", "0"); /*시간구분 = 0:시작일, 1:기간 --무조건 0으로 하자 1로할경우 범위가 넘어도 nPreNext가 2로 안나온다. */ axKHOpenAPI.SetInputValue("시작일자", spell.startDate); axKHOpenAPI.SetInputValue("종료일자", spell.endDate); int ret = axKHOpenAPI.CommRqData(spell.sRQNAME, spell.sTrCode, spell.nPrevNext, spell.sScreenNo); return ret; }
public override void ReceivedData(AxKHOpenAPILib.AxKHOpenAPI axKHOpenAPI, AxKHOpenAPILib._DKHOpenAPIEvents_OnReceiveRealDataEvent e) { /* [20] = 체결시간 //(0) [10] = 현재가 //(1) [11] = 전일대비 //(2) [12] = 등락율 //(3) [27] = (최우선)매도호가 //(4) [28] = (최우선)매수호가 //(5) [15] = 거래량 //(6) [13] = 누적거래량 //(7) [14] = 누적거래대금 //(8) [16] = 시가 //(9) [17] = 고가 //(10) [18] = 저가 //(11) [25] = 전일대비기호 //(12) [26] = 전일거래량대비(계약,주) //(13) [29] = 거래대금증감 //(14) [30] = 전일거래량대비(비율) //(15) [31] = 거래회전율 //(16) [32] = 거래비용 //(17) [228] = 체결강도 //(18) [311] = 시가총액(억) //(19) [290] = 장구분 //(20) [691] = KO접근도 //(21) [567] = 상한가발생시간 //(22) [568] = 하한가발생시간 //(23) */ /* FileLog.PrintF(String.Format("체결시간=> {0} ", axKHOpenAPI.GetCommRealData(e.sRealType, 20).Trim())); //[0] FileLog.PrintF(String.Format("현재가=> {0} ", axKHOpenAPI.GetCommRealData(e.sRealType, 10).Trim())); //[1] FileLog.PrintF(String.Format("전일대비=> {0} ", axKHOpenAPI.GetCommRealData(e.sRealType, 11).Trim())); //[2] FileLog.PrintF(String.Format("등락율=> {0} ", axKHOpenAPI.GetCommRealData(e.sRealType, 12).Trim())); //[3] FileLog.PrintF(String.Format("(최우선)매도호가=> {0} ", axKHOpenAPI.GetCommRealData(e.sRealType, 27).Trim())); //[4] FileLog.PrintF(String.Format("(최우선)매수호가=> {0} ", axKHOpenAPI.GetCommRealData(e.sRealType, 28).Trim())); //[5] FileLog.PrintF(String.Format("거래량=> {0} ", axKHOpenAPI.GetCommRealData(e.sRealType, 15).Trim())); //[6] FileLog.PrintF(String.Format("누적거래량=> {0} ", axKHOpenAPI.GetCommRealData(e.sRealType, 13).Trim())); //[7] FileLog.PrintF(String.Format("누적거래대금=> {0} ", axKHOpenAPI.GetCommRealData(e.sRealType, 14).Trim())); //[8] FileLog.PrintF(String.Format("시가=> {0} ", axKHOpenAPI.GetCommRealData(e.sRealType, 16).Trim())); //[9] FileLog.PrintF(String.Format("고가=> {0} ", axKHOpenAPI.GetCommRealData(e.sRealType, 17).Trim())); //[10] FileLog.PrintF(String.Format("저가=>{0} ", axKHOpenAPI.GetCommRealData(e.sRealType, 18).Trim())); //[11] FileLog.PrintF(String.Format("전일대비기호=> {0} ", axKHOpenAPI.GetCommRealData(e.sRealType, 25).Trim())); //[12] FileLog.PrintF(String.Format("전일거래량대비_계약_주=> {0} ", axKHOpenAPI.GetCommRealData(e.sRealType, 26).Trim())); //[13] FileLog.PrintF(String.Format("거래대금증감=> {0} ", axKHOpenAPI.GetCommRealData(e.sRealType, 29).Trim())); //[14] FileLog.PrintF(String.Format("전일거래량대비_비율=> {0} ", axKHOpenAPI.GetCommRealData(e.sRealType, 30).Trim())); //[15] FileLog.PrintF(String.Format("거래회전율=> {0} ", axKHOpenAPI.GetCommRealData(e.sRealType, 31).Trim())); //[16] FileLog.PrintF(String.Format("거래비용=> {0} ", axKHOpenAPI.GetCommRealData(e.sRealType, 32).Trim())); //[17] FileLog.PrintF(String.Format("체결강도=> {0} ", axKHOpenAPI.GetCommRealData(e.sRealType, 228).Trim())); //[18] FileLog.PrintF(String.Format("시가총액_억=> {0} ", axKHOpenAPI.GetCommRealData(e.sRealType, 311).Trim())); //[19] FileLog.PrintF(String.Format("장구분=> {0} ", axKHOpenAPI.GetCommRealData(e.sRealType, 290).Trim())); //[20] FileLog.PrintF(String.Format("KO접근도=> {0} ", axKHOpenAPI.GetCommRealData(e.sRealType, 691).Trim())); //[21] FileLog.PrintF(String.Format("상한가발생시간=> {0} ", axKHOpenAPI.GetCommRealData(e.sRealType, 567).Trim())); //[22] FileLog.PrintF(String.Format("하한가발생시간=> {0} ", axKHOpenAPI.GetCommRealData(e.sRealType, 568).Trim())); //[23] FileLog.PrintF(String.Format("종목코드=> {0} ", e.sRealKey.ToString().Trim())); FileLog.PrintF(String.Format("RealName=> {0} ", e.sRealType.ToString().Trim())); FileLog.PrintF(String.Format("sRealData=> {0} ", e.sRealData.ToString().Trim())); */ String 현재일자 = DateTime.Now.ToString("yyyy-MM-dd"); String 체결시간TMP = axKHOpenAPI.GetCommRealData(e.sRealType, 20).Trim(); //[0] //체결시간이 6자리이므로 HHMMSS ==> HH:MM:SS로 바꿔야한다. String 체결시간 =체결시간TMP.Substring(0, 2)+":"+체결시간TMP.Substring(2, 2)+":"+체결시간TMP.Substring(4, 2); 체결시간 = 현재일자 + " " + 체결시간; REAL10002_Data real10002_data = new REAL10002_Data(); //String 현재시간 = DateTime.Now.ToString("yyyyMMdd HH:mm:ss:fff"); real10002_data.체결시간 = 체결시간; real10002_data.현재가 = Int32.Parse(axKHOpenAPI.GetCommRealData(e.sRealType, 10).Trim()); //[1] real10002_data.전일대비 = Int32.Parse(axKHOpenAPI.GetCommRealData(e.sRealType, 11).Trim()); //[2] real10002_data.등락율 = float.Parse(axKHOpenAPI.GetCommRealData(e.sRealType, 12).Trim()); //[3] real10002_data.매도호가 = Int32.Parse(axKHOpenAPI.GetCommRealData(e.sRealType, 27).Trim()); //[4] real10002_data.매수호가 = Int32.Parse(axKHOpenAPI.GetCommRealData(e.sRealType, 28).Trim()); //[5] real10002_data.거래량 = Int32.Parse(axKHOpenAPI.GetCommRealData(e.sRealType, 15).Trim()); //[6] real10002_data.누적거래량 = Int32.Parse(axKHOpenAPI.GetCommRealData(e.sRealType, 13).Trim()); //[7] real10002_data.누적거래대금 = Int32.Parse(axKHOpenAPI.GetCommRealData(e.sRealType, 14).Trim()); //[8] real10002_data.시가 = Int32.Parse(axKHOpenAPI.GetCommRealData(e.sRealType, 16).Trim()); //[9] real10002_data.고가 = Int32.Parse(axKHOpenAPI.GetCommRealData(e.sRealType, 17).Trim()); //[10] real10002_data.저가 = Int32.Parse(axKHOpenAPI.GetCommRealData(e.sRealType, 18).Trim()); //[11] real10002_data.전일대비기호 = Int32.Parse(axKHOpenAPI.GetCommRealData(e.sRealType, 25).Trim()); //[12] real10002_data.전일거래량대비_계약_주 = Int32.Parse(axKHOpenAPI.GetCommRealData(e.sRealType, 26).Trim()); //[13] real10002_data.거래대금증감 = decimal.Parse(axKHOpenAPI.GetCommRealData(e.sRealType, 29).Trim()); //[14] real10002_data.전일거래량대비_비율 = float.Parse(axKHOpenAPI.GetCommRealData(e.sRealType, 30).Trim()); //[15] real10002_data.거래회전율 = float.Parse(axKHOpenAPI.GetCommRealData(e.sRealType, 31).Trim()); //[16] real10002_data.거래비용 = Int32.Parse(axKHOpenAPI.GetCommRealData(e.sRealType, 32).Trim()); //[17] real10002_data.체결강도 = float.Parse(axKHOpenAPI.GetCommRealData(e.sRealType, 228).Trim()); //[18] real10002_data.시가총액_억 = Int32.Parse(axKHOpenAPI.GetCommRealData(e.sRealType, 311).Trim()); //[19] real10002_data.장구분 = Int32.Parse(axKHOpenAPI.GetCommRealData(e.sRealType, 290).Trim()); //[20] real10002_data.KO접근도 = Int32.Parse(axKHOpenAPI.GetCommRealData(e.sRealType, 691).Trim()); //[21] real10002_data.상한가발생시간 = axKHOpenAPI.GetCommRealData(e.sRealType, 567).Trim(); //[22] real10002_data.하한가발생시간 = axKHOpenAPI.GetCommRealData(e.sRealType, 568).Trim(); //[23] real10002_data.종목코드 = e.sRealKey.ToString().Trim(); //[24] real10002_data.RealName = e.sRealType.ToString().Trim(); MyStock.getClass1Instance().UpdateStockList(real10002_data); // SendDirectFile(real10002_data); SendDirectDb(real10002_data); }
private void axKHOpenAPI_OnReceiveMsg(object sender, AxKHOpenAPILib._DKHOpenAPIEvents_OnReceiveMsgEvent e) { FileLog.PrintF("====================axKHOpenAPI_OnReceiveMsg==============================="); Logger(Log.디버깅, "====================axKHOpenAPI_OnReceiveMsg==============================="); Logger(Log.조회, "화면번호:{0} | RQName:{1} | TRCode:{2} | 메세지:{3}", e.sScrNo, e.sRQName, e.sTrCode, e.sMsg); FileLog.PrintF(String.Format("화면번호:{0} | RQName:{1} | TRCode:{2} | 메세지:{3}", e.sScrNo, e.sRQName, e.sTrCode, e.sMsg)); }
public override void ReceivedData(AxKHOpenAPILib.AxKHOpenAPI axKHOpenAPI, AxKHOpenAPILib._DKHOpenAPIEvents_OnReceiveTrDataEvent e) { /* sScrNo – 화면번호 sRQName – 사용자구분 명 sTrCode – Tran 명 sRecordName – Record 명 sPreNext – 연속조회 유무 */ FileLog.PrintF("ReceivedData OPT10081"); try { StringBuilder sbAll = new StringBuilder(); StringBuilder sb = new StringBuilder(); //sb.Append("일자:{0}|종목코드:{1}|현재가:{2}|거래량:{3}|거래대금:{4}|시가:{5}|고가:{6}|저가:{7}"); //sb.Append("stock_date:{0}|stock_code:{1}|current_price:{2}|trade_quantity:{3}|trade_price:{4}|start_price:{5}|high_price:{6}|low_price:{7}"); sb.Append("{0}|{1}|{2}|{3}|{4}|{5}|{6}|{7}"); String tmp = sb.ToString(); String 종목코드="XXXX"; int nCnt = axKHOpenAPI.GetRepeatCnt(e.sTrCode, e.sRQName); String keyStockCodeLayout = "sRQName:{0}|sTrCode:{1}|sScreenNo:{2}"; String keyStockCode = String.Format(keyStockCodeLayout , e.sRQName , e.sTrCode , e.sScrNo ); 종목코드 = AppLib.getClass1Instance().getStockCode(keyStockCode); String keyLayout = "sRQName:{0}|sTrCode:{1}|sScreenNo:{2}|stockCode:{3}"; String key = String.Format(keyLayout , e.sRQName , e.sTrCode , e.sScrNo , 종목코드 ); FileLog.PrintF("keyStockCode1 ==" + keyStockCode); FileLog.PrintF("key1 ==" + key); spell = AppLib.getClass1Instance().getSpell(key).ShallowCopy(); String startDate = spell.startDate; FileLog.PrintF("startDate ==" + startDate); String lastStockDate = ""; int startDate일자 = 0; if (!int.TryParse(startDate, out startDate일자)) { startDate일자 = 0; } if (nCnt > 0) { for (int i = 0; i < nCnt; i++) { /* if (i == 0) { 종목코드1 = axKHOpenAPI.CommGetData(e.sTrCode, "", e.sRQName, i, "종목코드").Trim(); } */ String 종목코드1 = axKHOpenAPI.CommGetData(e.sTrCode, "", e.sRQName, i, "종목코드").Trim(); if (종목코드1 == null || 종목코드1.Trim().Equals("")) { 종목코드1 = 종목코드; } // FileLog.PrintF("거래대금 ==" + axKHOpenAPI.CommGetData(e.sTrCode, "", e.sRQName, i, "거래대금").Trim()); int 현재가 = Int32.Parse(axKHOpenAPI.CommGetData(e.sTrCode, "", e.sRQName, i, "현재가").Trim()); int 거래량 = Int32.Parse(axKHOpenAPI.CommGetData(e.sTrCode, "", e.sRQName, i, "거래량").Trim()); int 거래대금 = 0; //이게 INF 로 나올때가 있다.. 주식코드는 013900 두원중공업 if(!Int32.TryParse(axKHOpenAPI.CommGetData(e.sTrCode, "", e.sRQName, i, "거래대금").Trim(),out 거래대금) ) { 거래대금 = 0; } int 일자 = Int32.Parse(axKHOpenAPI.CommGetData(e.sTrCode, "", e.sRQName, i, "일자").Trim()); int 시가 = Int32.Parse(axKHOpenAPI.CommGetData(e.sTrCode, "", e.sRQName, i, "시가").Trim()); int 고가 = Int32.Parse(axKHOpenAPI.CommGetData(e.sTrCode, "", e.sRQName, i, "고가").Trim()); int 저가 = Int32.Parse(axKHOpenAPI.CommGetData(e.sTrCode, "", e.sRQName, i, "저가").Trim()); // int 수정주가구분 = Int32.Parse(axKHOpenAPI.CommGetData(e.sTrCode, "", e.sRQName, i, "수정주가구분").Trim()); // int 수정비율 = Int32.Parse(axKHOpenAPI.CommGetData(e.sTrCode, "", e.sRQName, i, "수정비율").Trim()); // int 대업종구분 = Int32.Parse(axKHOpenAPI.CommGetData(e.sTrCode, "", e.sRQName, i, "대업종구분").Trim()); // int 소업종구분 = Int32.Parse(axKHOpenAPI.CommGetData(e.sTrCode, "", e.sRQName, i, "소업종구분").Trim()); // int 종목정보 = Int32.Parse(axKHOpenAPI.CommGetData(e.sTrCode, "", e.sRQName, i, "종목정보").Trim()); // int 수정주가이벤트 = Int32.Parse(axKHOpenAPI.CommGetData(e.sTrCode, "", e.sRQName, i, "수정주가이벤트").Trim()); // int 전일종가 = Int32.Parse(axKHOpenAPI.CommGetData(e.sTrCode, "", e.sRQName, i, "전일종가").Trim()); String tmp1 = String.Format(tmp , 일자 , 종목코드 , 현재가 , 거래량 , 거래대금 , 시가 , 고가 , 저가 ); lastStockDate = 일자.ToString(); if (startDate != null) { if (startDate.Equals("ZERO") || startDate.Equals("TWO")) { sbAll.AppendLine(tmp1); } else { if (일자 >= startDate일자) { sbAll.AppendLine(tmp1); } else { break; } } } else { sbAll.AppendLine(tmp1); } } } else { 종목코드 = "00000"; } int prevNext = 0; if (!int.TryParse(e.sPrevNext, out prevNext)) { prevNext = 0; } ScreenNumber.getClass1Instance().DisconnectRealData(e.sScrNo); ScreenNumber.getClass1Instance().SetRealRemove("ALL", "ALL"); putReceivedQueueAndsetNextSpell(key,sbAll.ToString(), prevNext, lastStockDate); } catch (Exception ex) { FileLog.PrintF("[ALERT-ReceivedData-OPT10081]Exception ex=" + ex.Message); } }
private void axKHOpenAPI_OnReceiveRealData(object sender, AxKHOpenAPILib._DKHOpenAPIEvents_OnReceiveRealDataEvent e) { // FileLog.PrintF("====================axKHOpenAPI_OnReceiveRealData==============================="); // Logger(Log.디버깅, "====================axKHOpenAPI_OnReceiveRealData==============================="); // FileLog.PrintF(String.Format("종목코드 : {0} | RealType : {1} | RealData : {2}", e.sRealKey, e.sRealType, e.sRealData)); ReceiveRealDataFactory rtf = ReceiveRealDataFactory.getClass1Instance(); rtf.runReceiveRealData(axKHOpenAPI, e); }
private void axKHOpenAPI_OnReceiveChejanData(object sender, AxKHOpenAPILib._DKHOpenAPIEvents_OnReceiveChejanDataEvent e) { /*주문이 들어가면 체결데이터가 이리들어온다고 한다...*/ FileLog.PrintF("====================axKHOpenAPI_OnReceiveChejanData==============================="); Logger(Log.디버깅, "====================axKHOpenAPI_OnReceiveChejanData==============================="); FileLog.PrintF("axKHOpenAPI_OnReceiveChejanData e.sGubun =>" + e.sGubun); ReceiveChejanDataFactory rtf = ReceiveChejanDataFactory.getClass1Instance(); rtf.runReceiveChejanData(axKHOpenAPI, e); if (e.sGubun == "0") //0은 주문접수 주문체결 { Logger(Log.실시간, "구분 : 주문체결통보"); Logger(Log.실시간, "주문/체결시간 : " + axKHOpenAPI.GetChejanData(908)); Logger(Log.실시간, "종목명 : " + axKHOpenAPI.GetChejanData(302)); Logger(Log.실시간, "주문수량 : " + axKHOpenAPI.GetChejanData(900)); Logger(Log.실시간, "주문가격 : " + axKHOpenAPI.GetChejanData(901)); Logger(Log.실시간, "체결수량 : " + axKHOpenAPI.GetChejanData(911)); Logger(Log.실시간, "체결가격 : " + axKHOpenAPI.GetChejanData(910)); Logger(Log.실시간, "======================================="); } else if (e.sGubun == "1") //1은 반영된잔고를 보여준다. { Logger(Log.실시간, "구분 : 잔고통보"); } else if (e.sGubun == "3") { Logger(Log.실시간, "구분 : 특이신호"); } }
public void runReceiveChejanData(AxKHOpenAPILib.AxKHOpenAPI axKHOpenAPI, AxKHOpenAPILib._DKHOpenAPIEvents_OnReceiveChejanDataEvent e) { ReceiveChejanData rt = getReceiveChejanData(e.sGubun.Trim(), axKHOpenAPI.GetChejanData(913).ToString().Trim()); if(rt!=null) { rt.ReceivedData(axKHOpenAPI, e); } }