Пример #1
0
        public string  GetCurrentStock(String 종목코드 = "035420")
        {
            //035420   <--네이버종목번호\
            this.axKHOpenAPI.SetInputValue("종목코드", 종목코드);
            int nRet = axKHOpenAPI.CommRqData("주식기본정보", "OPT10001", 0, ScreenNumber.getClass1Instance().GetEosScrNum());

            return("sdfsdf:");
        }
Пример #2
0
        /// <summary>
        /// [5]설명 주식 주문을 서버로 전송한다.
        ///입력값
        ///sRQName - 사용자 구분 요청 명
        ///sScreenNo - 화면번호[4]
        ///sAccNo - 계좌번호[10]
        ///nOrderType - 주문유형(1:신규매수, 2:신규매도, 3:매수취소, 4:매도취소, 5:매수정정, 6:매도정정)
        ///sCode, - 주식종목코드
        ///nQty – 주문수량
        ///nPrice – 주문단가
        ///sHogaGb - 거래구분
        ///sOrgOrderNo – 원주문번호
        ///반환값 에러코드[4.에러코드표 참고]
        ///비고
        ///sHogaGb – 00:지정가, 03:시장가, 05:조건부지정가, 06:최유리지정가, 07:최우선지정가, 10:
        ///지정가IOC, 13:시장가IOC, 16:최유리IOC, 20:지정가FOK, 23:시장가FOK, 26:최유리FOK, 61:시간외단일가매매, 81:시간외종가
        ///ex)
        ///지정가 매수 - openApi.SendOrder(“RQ_1”, “0101”, “5015123410”, 1, “000660”, 10, 48500,“0”, “”);
        ///시장가 매수 - openApi.SendOrder(“RQ_1”, “0101”, “5015123410”, 1, “000660”, 10, 0, “3”,“”);
        ///매수 정정 - openApi.SendOrder(“RQ_1”,“0101”, “5015123410”, 5, “000660”, 10, 49500,“0”, “1”);
        ///매수 취소 - openApi.SendOrder(“RQ_1”, “0101”, “5015123410”, 3, “000660”, 10, “0”, “2”);
        /// </summary>
        ///
        public int SendOrder(String rq_name, String acct_num, int order_type, String stock_cd, int qty, int amt, String hoga_gubun, String orgn_order_no)
        {
            String sScreenNo = ScreenNumber.getClass1Instance().GetAnyTimeScrNum();
            int    ret       = axKHOpenAPI.SendOrder(rq_name, sScreenNo, acct_num, order_type, stock_cd, qty, amt, hoga_gubun, orgn_order_no);

            FileLog.PrintF("SendOrder(" + rq_name + "," + sScreenNo + "," + acct_num + "," + order_type + "," + stock_cd + "," + qty + "," + amt + "," + hoga_gubun + "," + orgn_order_no + "):" + ret);
            return(ret);
        }
Пример #3
0
        /// <summary>
        ///[102] 설명 추정자산조회요청
        ///입력값
        ///accountNum : 계좌번호10자리
        ///password : 계좌비밀번호 4 자리모의투자는 0000
        ////반환값
        /// 성공유무 데이터는 onReceived쪽에서 soap로 쏴줌
        /// </summary>
        public String GetOpw00003(String accountNum, String password)
        {
            String sRQName = "추정자산조회요청WCF";
            String sTrCode = "OPW00003";

            FileLog.PrintF("WCF GetOpt00003 accountNum=" + accountNum);
            FileLog.PrintF("WCF GetOpt00003 password="******"sRQName:{0}|sTrCode:{1}|sScreenNo:{2}";
            String keyStockCode       = String.Format(keyStockCodeLayout
                                                      , sRQName
                                                      , sTrCode
                                                      , sScrNo
                                                      );
            String keyLayout = "sRQName:{0}|sTrCode:{1}|sScreenNo:{2}|accountNum:{3}";
            String key       = String.Format(keyLayout
                                             , sRQName
                                             , sTrCode
                                             , sScrNo
                                             , accountNum
                                             );

            spellOpw00003.sScreenNo = sScrNo;
            FileLog.PrintF("keyStockCode  ==" + keyStockCode);

            AppLib.getClass1Instance().AddSpellDictionary(key, spellOpw00003);
            AppLib.getClass1Instance().AddStockCodeDictionary(keyStockCode, accountNum);
            //QUEUE를 따지 않고 바로 실행되어야 한다.
            ReceiveTrDataFactory rtf = ReceiveTrDataFactory.getClass1Instance();
            ReceiveTrData        rt  = rtf.getReceiveTrData(spellOpw00003.sTrCode);
            int nRet = rt.Run(axKHOpenAPI, spellOpw00003);

            spellOpw00003.startRunTime = DateTime.Now;

            if (Error.IsError(nRet))
            {
                return("[WCF GetOpw00003][OK]:" + Error.GetErrorMessage());
            }
            else
            {
                return("[WCF GetOpw00003][NOK]:" + Error.GetErrorMessage());
            }
        }
Пример #4
0
        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);
            }
        }
Пример #5
0
        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);
            }
        }
Пример #6
0
        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);
            }
        }
Пример #7
0
        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, prevNext, lastStockDate);
            }
            catch (Exception ex)
            {
                FileLog.PrintF("[ALERT-ReceivedData-OPT10080]Exception ex=" + ex.Message);
            }
        }
Пример #8
0
        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);
            }
        }
Пример #9
0
        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);
            }
        }
Пример #10
0
 void OnDisable()
 {
     RemoveCamera();
     prevScreenNumber = ScreenNumber.invalid;
 }
Пример #11
0
    protected void InitializeViewingRectangle()
    {
        prevScreenNumber    = screenNumber;
        prevVertical2PRects = vertical2PRects;
        prevLong3PRect      = long3PRect;
        prevScreenWidth     = Screen.width;
        prevScreenHeight    = Screen.height;

        int  cameraCt = 0, thisScreenNum = (int)screenNumber;
        bool isActive = false;

        // determine where to place this camera on the screen
        for (int i = 0; i < joinedCameras.Length; i++)
        {
            if (joinedCameras[i])
            {
                cameraCt++;
                if (joinedCameras[i] == this)
                {
                    isActive = true;
                }
            }
            else if (i <= thisScreenNum)
            {
                thisScreenNum--;
            }
        }

        if (!isActive)
        {
            return;
        }

        thisScreenNum = Mathf.Min(thisScreenNum, cameraCt - 1);

        if (!myCamera)
        {
            Debug.LogError("Could not locate camera component.");
            return;
        }

        if (thisScreenNum < 0 || 4 < thisScreenNum)
        {
            Debug.LogWarning("Attempted to initialize camera whose screen number is \"" + thisScreenNum + "\"");
            return;
        }

        Rect[] viewRects;
        switch (cameraCt)
        {
        case 2:
            if (vertical2PRects)
            {
                viewRects = cameraRects2Player;
            }
            else
            {
                viewRects = cameraRects2PlayerHorizontal;
            }
            break;

        case 3:
            if (long3PRect)
            {
                viewRects = cameraRects3Player;
            }
            else
            {
                viewRects = cameraRects4Player;
            }
            break;

        case 4:
            viewRects = cameraRects4Player;
            break;

        default:
            viewRects = new Rect[1] {
                new Rect(0, 0, 1, 1)
            };
            break;
        }

        float x = viewRects[thisScreenNum].x, width = viewRects[thisScreenNum].width;
        float y = viewRects[thisScreenNum].y, height = viewRects[thisScreenNum].height;

        if (cameraCt > 1)
        {
            x      += joinedCameraPadding.x / (float)Screen.width;
            y      += joinedCameraPadding.y / (float)Screen.height;
            width  -= 2 * joinedCameraPadding.x / (float)Screen.width;
            height -= 2 * joinedCameraPadding.y / (float)Screen.height;
        }

        myCamera.rect = new Rect(x, y, width, height);
    }
Пример #12
0
        /// <summary>
        ///[101] 설명 주식 일일 데이터를 주식이 생성된 일부터 받아온다.
        ///입력값
        ///strCode : 종목코드
        ///stockDate: YYYYMMDD  문자열 ex)20160122
        ////반환값
        /// 성공유무 데이터는 onReceived쪽에서 soap로 쏴줌
        /// </summary>
        ///
        /// spell  은 내가 만든 속성  api가 너무 과거거 까지 다가져오므로
        /// START_STOCK_DATE   로 넘어오면 START_STOCK_DATE 부터 stockDate 까지 가져오기 형식은 'YYYYMMDD'
        /// ZERO 으로 나오면 한번 받아올수있는 제한까지만 받아오기.
        /// TWO로 넘어오면 처음 부터 지정한 stockDate까지 nPreNext를 받는쪽에서 2로 지정해서 다받아올수있게 하기.
        public String GetOpt10081(String strCode, String startDate, String endDate)
        {
            //String stockDate = DateTime.Today.ToString("yyyyMMdd");
            //음 nPreNext 를 처음 할때는 0으로 놓고 했는데..
            // 그럼 과거 몇개랑 현재까지 보이고..
            // 받아온것을 nPreNext 2로 하면 이어서 받아오게 되는데..
            // qna 게시판 일어보니 1로 넣으면 그날만 가져온다는 것 같다.
            //해보자.

            /*
             *  1. 고객님께서 작성하신 로직상 CommRqData가 전송횟수제한 오류 발생없이 모두 전송되고 있다면 무리가 없습니다.
             *  2. 2값은 조회하신 기준으로 그 이전의 값을 의미하고, 1값은 조회하신 기준으로 그 이후 연속데이터를 의미합니다. 1 값은 현재 시점 기준이 아닌 특정 일자를 입력하여 조회하는 성격의 TR서비스에서 사용됩니다.
             */
            //그런데 1로 해도 0이랑했을때랑 차이가 없다. ㅠㅠ
            //결국엔 당일것만 가져오고 싶으면 내가 적절히 짤라 줘야한다..
            //그러기 위해서  명령어를 담아두었다가 receive가 되었을때 비교 해서 적절하게 짤라줄 명령어를 담는 저장공간이  필요하겠다.
            //HashTable이 괜찮겠네...
            //전역으로 읽을 수 있어야 하니까 공간은 Class1
            //내가 마음대로 조절할수있는것은.  sRQName, sScreenNo 두개네...

            /*
             * 이런 난 수정주가 구분이 1로 고정인지 알았는데 qna를 보니 그게 아닌것 같다..
             *
             * 문의 내용중이런것이 있다));;
             *  OPT10081 에서
             *  수정주가구분 = 0 or 1
             *  이것을 변경해도 동일한 값이 나옵니다.
             *
             *  테스트 조건
             *  SetInputValue("종목코드" , "002990");
             *  SetInputValue("기준일자" , "20121228");
             *  SetInputValue("수정주가구분" , "0");
             *
             *  SetInputValue("종목코드" , "002990");
             *  SetInputValue("기준일자" , "20121228");
             *  SetInputValue("수정주가구분" , "1");
             *
             *  두개 모두 2012년 12월 28일 현재가가 1555원 표시됩니다.
             *
             *  해당 종목은 감자가 있었기 때문에
             *  차트에서
             *  수정주가 적용시 : 10892원
             *  수정주가 미적용시 : 1555원
             *  이렇게 표시됩니다.
             *
             * 기타 다른 답변으로는
             * 차트조회시 수정주가 구분값(0:권리락 적용안됨.1:권리락 적용됨)을 넣어서 조회하시면 됩니다.
             * 권리락이라는게 뭘까??
             *
             *  권리락 중 "권리" 에 의미는 유상증장 및 무상증자와 배당에 참여할 수 있는 자격 또는 권리를 의미하며,
             *  곧 주식 권리락이란 위에 해당하는 권리를 받을 수 있는 자격이 없어진다는 이야기입니다.
             *  다시 말하면  증자를 통하여 얻게 되는 이익에 비례하여 주가를 떨어뜨립니다.
             *
             *
             *  유상증자에서의 권리락
             *  말그대로 기존 주주들에게 유상으로(돈을 지불하여) 현 시점의 주가보다 저렴하게 주식을 살 수 있게 권리를 주게 되며,
             *  이 때문에 생기는 시세차이로 인하여 권리락이 발생하게 됩니다.
             *  무상증자
             *  주주들이 지불 없이 더 많은 주식을 받게 됩니다. 회사 입장에서는 주주들에게 지불받는 금액이 없으나 주식수는 늘어나게 됩니다.
             *  무상증자가 일어나면 주주는 더 많은 주식을 갖게 되지만 주가는 그에 비례하여 하락을 하게 되기 때문에
             *  결론적으로는 값이 동일해집니다.
             *  하지만, 대부분 무상증자 시 주가는 기존 값으로 회귀를 하는 경우가 많고, 시장에서 호재로 여겨지는 부분임.
             * 그냥 1로 표시하자... 골치 아프다..
             */

            /*
             * 큐를 받아두었다가 처리하는건.. 약간 위험한듯..
             * 그것보다 여기에서 지연이 생길수있도록 하는게 맞는것같다.
             * 시스템 성능 만큼 여기서 지연이 일어나야한다..
             * 이미  HashTable를 사용해서 여기 넣은 명령어가 received이벤트가 발생할 때 읽을 수있도록 했다..
             * 그리고 그걸 큐에 담아서 soap으로 전송할때 사용했었다..
             * 큐하고 hashtable 두개를 쓰던걸 hashtable 하나로 바꾸고
             * 실제로 soap 요청이 완료되면 hashtable에서 그 키값을 바꾸도록 해야겠다.
             * 그런데 soap 전송에서 key값을 어떻게 알수 있을까???
             * 음 hashtable에 순서가 있어서 처음들어온것을 빠질수있게 하면 되겠다..
             * 그런데 hashtable에는 순서가 없네...
             * 큐에 Dinary를 담자..
             * ㅋㅋ 그러면 되겠다...
             * 아 dictionary를 담으려고 보니까.. 너무 낭비인것 같다.
             * 클래스를 하나만들자..
             * 아 생각해보니까. 하나 만들어둔게 있었다..
             * ReceiveTrData.class
             * 아 젠장 큐가 recevie에서 만드니까.. 여기 서 막을 방법이 없네..
             * 여기서 막으면 행이 걸리는데.. 행이걸리는게 맞긴 한것 같은데..
             * 행이 오래걸리면 타임아웃이 걸리텐데...
             * 그럼 다시 원점인데.. 여기다 가 큐를 만들어야하는데..
             *
             *
             * 여기 쓰레드 큐가 하나 있어야 하고
             * 그 쓰레드는 이벤트에 큐가 쌓였을때
             * 하나씩 실행되어야 해.. 그래야 맞는것 같아..
             * 하나는 신문을 넣고 하나는 출판을 하는 그 걸 써야 하는게 맞는것 같은데..
             * https://msdn.microsoft.com/ko-kr/library/yy12yx1f%28v=vs.90%29.aspx
             *
             * 오호 이게 맞는것 같은데..
             * http://www.csharpstudy.com//Threads/autoresetevent.aspx
             * 이아저씨는 천제인가..
             * 그런데 이건 한번 다 돌고 그다음 다른거 돌고 그런식이네...
             * 이렇게 구현하면 명령어가 행이 걸릴수도 있겠는데..
             * 한쪽에서 계속 받아서 쌓이면...
             * 그리고 나중에 실행되고 그런식 아닐까...
             *
             * 음 입력이 불특정으로 일어나니까 쌓이는것도 불특정으로 쌓여서 흐름이 되겠다.
             * 나쁘지 않다...
             * 쓰레드 돌리는걸 생각해보았는데.. 생각보다 위험하다..
             * kiwoom api가 객체를 여러개 생성하는게 아니라 하나로 쓰는거랑
             * 변수가 바뀌지 않을꺼라는 보장이 없다..
             *
             * 델레케이트 풀이 가능 할까???
             *
             *
             *
             *
             * 이게 맞는것 같은데 이해를 못하고 있으니...
             * 음 이건 큐가 하나네.. 그런데 내꺼는 큐하나로 못하는데..
             * 쓰레드 큐가 있어야 하네...
             * 큐를 넣으면 반환값이 없어지네.. 큐하면 안되겠다 앞에 링크중
             * 앞에 그냥 1초 걸자.. 아 일이 진행이 안되네...
             *
             * 그래서 멈추는걸 로 해서 아래처럼 했느데.. 쓸데없이 뒤에서 보내고 다시 조회하고 그러는데 시간이 딜레이가 걸린다...
             * 큐에서 3개정도 있고 recevie가 동작을 했으면 좋겠다...
             * 그렇게 하려면
             * 큐 크기를 조사해서 3보다 작으면 웨이트가 걸리고 3보다 크면 웹이트가 풀리고.. OK??
             *
             */
            //Class1.getClass1Instance().waitOneOpt10081();// 멈추기..

            String sScreenNo = ScreenNumber.getClass1Instance().GetEosScrNum();
            String sRQName   = "주식일봉차트조회";
            String sTrCode   = "OPT10081";
            int    nPrevNext = 0;

            String keyStockCodeLayout = "sRQName:{0}|sTrCode:{1}|sScreenNo:{2}";
            String keyStockCode       = String.Format(keyStockCodeLayout
                                                      , sRQName
                                                      , sTrCode
                                                      , sScreenNo
                                                      );

            String keyLayout = "sRQName:{0}|sTrCode:{1}|sScreenNo:{2}|stockCode:{3}";
            String key       = String.Format(keyLayout
                                             , sRQName
                                             , sTrCode
                                             , sScreenNo
                                             , strCode
                                             );

            FileLog.PrintF("keyStockCode  ==" + keyStockCode);
            FileLog.PrintF("key  ==" + key);

            OpenApi.Spell.SpellOpt spellOpt10081 = new OpenApi.Spell.SpellOpt();
            spellOpt10081.sRQNAME   = sRQName;
            spellOpt10081.sTrCode   = sTrCode;
            spellOpt10081.stockCode = strCode;
            spellOpt10081.startDate = startDate;
            spellOpt10081.endDate   = endDate;
            spellOpt10081.nPrevNext = nPrevNext;
            spellOpt10081.sScreenNo = sScreenNo;


            //음 받는쪽에서 일자하고 nPrevNext를 알수가 없어서..키로 쓸수가 없다...
            //종목코드로도 찾을 수가 없네 종목코드도 지우자.
            //spell=""
            AppLib.getClass1Instance().AddStockCodeDictionary(keyStockCode, strCode);
            AppLib.getClass1Instance().AddSpellDictionary(key, spellOpt10081);


            axKHOpenAPI.SetInputValue("종목코드", strCode);
            axKHOpenAPI.SetInputValue("기준일자", endDate);
            axKHOpenAPI.SetInputValue("수정주가구분", "1");
            int nRet = axKHOpenAPI.CommRqData(sRQName, sTrCode, nPrevNext, sScreenNo);

            if (Error.IsError(nRet))
            {
                return("[OPT10081][OK]:" + Error.GetErrorMessage());
            }
            else
            {
                return("[OPT10081][NOK]:" + Error.GetErrorMessage());
            }
        }