Esempio n. 1
0
        private List<OPT10085_Data> stockList = new List<OPT10085_Data>();  //계좌를 하나만 사용할거라고 가정한다.
        public void UpdateStockList(REAL10002_Data real10002_data)
        {
           // FileLog.PrintF("MyStock UpdateStockList real10002_data.종목코드=>"+ real10002_data.종목코드);
            //FileLog.PrintF("MyStock UpdateStockList stockList.Count()=>" + stockList.Count());
            lock (_lockStockList)
            {
                foreach (OPT10085_Data stock in stockList)
                {
                   // FileLog.PrintF("MyStock UpdateStockList stock.종목코드=>" + stock.종목코드);
                    if (stock.종목코드.Trim().Equals(real10002_data.종목코드))
                    {
                       // FileLog.PrintF("MyStock UpdateStockList change");
                        int 현재가 = Math.Abs(real10002_data.현재가);
                        /*디비서 조회*/
                        int 보유수량 = stock.보유수량;
                        int 매입금액 = stock.매입금액;

                        int 평가금액 = 현재가 * 보유수량;
                        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;
                        }

                        stock.현재가 = 현재가;
                        stock.평가금액 = 평가금액;
                        stock.매도수수료 = 매도수수료;
                        stock.수수료 = 수수료;
                        stock.매도세금 = 매도세금;
                        stock.손익분기매입가 = 손익분기매입가;
                        stock.평가손익 = 평가손익;
                        stock.수익률 = 수익률;
                        stock.손익금액 = 손익금액;
                        stock.손익율 = 손익율;
                        dbUpdate(stock);
                        autoSale(stock);
                    }
                }
            }
        }
Esempio n. 2
0
        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);

        }
Esempio n. 3
0
        private void SendDirectDb(REAL10002_Data real10002_data)
        {
            using (MySqlConnection conn = new MySqlConnection(Config.GetDbConnStr()))
            {
                String dayTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
                String logTime = real10002_data.체결시간;
                DateTime dayT = DateTime.ParseExact(dayTime, "yyyy-MM-dd HH:mm:ss", null);
                DateTime logT = DateTime.ParseExact(logTime, "yyyy-MM-dd HH:mm:ss", null);
                TimeSpan t = dayT - logT;
                string sql = @"INSERT into realtime_contracts (
stock_date
,stock_code
,current_price
,contrast_yesterday
,fluctuation_rate
,offered_price
,bid_price
,trade_quantity
,accumulated_trade_quantity
,accumulated_trade_price
,start_price
,high_price
,low_price
,contrast_yesterday_symbol
,yesterday_contrast_trade_quantity
,trade_amount_variation
,yesterday_contrast_trade_rate
,trade_turnover_ratio
,trade_cost
,contract_strength
,total_market_price
,market_gubun
,ko_accessibility_rate
,upper_price_limit_time
,lower_price_limit_time
,created_at
,updated_at
,time_diff
)
VALUES
(
@체결시간
,@종목코드
,@현재가
,@전일대비
,@등락율
,@매도호가
,@매수호가
,@거래량
,@누적거래량
,@누적거래대금
,@시가
,@고가
,@저가
,@전일대비기호
,@전일거래량대비_계약_주
,@거래대금증감
,@전일거래량대비_비율
,@거래회전율
,@거래비용
,@체결강도
,@시가총액_억
,@장구분
,@KO접근도
,@상한가발생시간
,@하한가발생시간
,current_timestamp
,current_timestamp
,@time_diff
);
";
                conn.Open();
                MySqlCommand cmd = new MySqlCommand(sql, conn);
                cmd.Parameters.AddWithValue("@체결시간", real10002_data.체결시간);
                cmd.Parameters.AddWithValue("@종목코드", real10002_data.종목코드);
                cmd.Parameters.AddWithValue("@현재가", real10002_data.현재가);
                cmd.Parameters.AddWithValue("@전일대비", real10002_data.전일대비);
                cmd.Parameters.AddWithValue("@등락율", real10002_data.등락율);
                cmd.Parameters.AddWithValue("@매도호가", real10002_data.매도호가);
                cmd.Parameters.AddWithValue("@매수호가", real10002_data.매수호가);
                cmd.Parameters.AddWithValue("@거래량", real10002_data.거래량);
                cmd.Parameters.AddWithValue("@누적거래량", real10002_data.누적거래량);
                cmd.Parameters.AddWithValue("@누적거래대금", real10002_data.누적거래대금);
                cmd.Parameters.AddWithValue("@시가", real10002_data.시가);
                cmd.Parameters.AddWithValue("@고가", real10002_data.고가);
                cmd.Parameters.AddWithValue("@저가", real10002_data.저가);
                cmd.Parameters.AddWithValue("@전일대비기호", real10002_data.전일대비기호);
                cmd.Parameters.AddWithValue("@전일거래량대비_계약_주", real10002_data.전일거래량대비_계약_주);
                
                /*
                MySqlParameter dir = new MySqlParameter("@거래대금증감", MySql.Data.MySqlClient.MySqlDbType.Decimal);
                dir.Value = real10002_data.거래대금증감;
                cmd.Parameters.Add(dir);
                아래가 문제가 아니라 디비스 키마가 decimal(10)이어서 10자리이상 표시안되었던거였음.
                */
                cmd.Parameters.AddWithValue("@거래대금증감", real10002_data.거래대금증감);
                cmd.Parameters.AddWithValue("@전일거래량대비_비율", real10002_data.전일거래량대비_비율);
                cmd.Parameters.AddWithValue("@거래회전율", real10002_data.거래회전율);
                cmd.Parameters.AddWithValue("@거래비용", real10002_data.거래비용);
                cmd.Parameters.AddWithValue("@체결강도", real10002_data.체결강도);
                cmd.Parameters.AddWithValue("@시가총액_억", real10002_data.시가총액_억);
                cmd.Parameters.AddWithValue("@장구분", real10002_data.장구분);
                cmd.Parameters.AddWithValue("@KO접근도", real10002_data.KO접근도);
                cmd.Parameters.AddWithValue("@상한가발생시간", real10002_data.상한가발생시간);
                cmd.Parameters.AddWithValue("@하한가발생시간", real10002_data.하한가발생시간);
                cmd.Parameters.AddWithValue("@time_diff", t.TotalSeconds);
                cmd.ExecuteNonQuery();

            }
        }
Esempio n. 4
0
 private void SendDirectFile(REAL10002_Data real10002_data)
 {
     String tmp = "{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}";
     String tmp1 = String.Format(tmp,
             real10002_data.체결시간,   //[0]
             real10002_data.종목코드,   //[1]
              real10002_data.현재가,   //[2]
              real10002_data.전일대비,   //[3]
              real10002_data.등락율,   //[4]
              real10002_data.매도호가,   //[5]
              real10002_data.매수호가,   //[6]
              real10002_data.거래량,   //[7]
              real10002_data.누적거래량,   //[8]
              real10002_data.누적거래대금,   //[9]
              real10002_data.시가,   //[10]
              real10002_data.고가,   //[11]
              real10002_data.저가,   //[12]
              real10002_data.전일대비기호,   //[13]
              real10002_data.전일거래량대비_계약_주,   //[14]
              real10002_data.거래대금증감,   //[15]
              real10002_data.전일거래량대비_비율,   //[16]
              real10002_data.거래회전율,   //[17]
              real10002_data.거래비용,   //[18]
              real10002_data.체결강도,   //[19]
              real10002_data.시가총액_억,   //[20]
              real10002_data.장구분,   //[21]
              real10002_data.KO접근도,   //[22]
              real10002_data.상한가발생시간,   //[23]
              real10002_data.하한가발생시간,   //[24]
              real10002_data.RealName   //[25]
      );
     System.IO.StreamWriter file = new System.IO.StreamWriter(Config.GetPath() + "주식체결.txt", true);
     file.WriteLine(tmp1.ToString());
     file.Close();
 }