Exemplo 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);
                    }
                }
            }
        }
Exemplo n.º 2
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();
        }
Exemplo n.º 3
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);
        }
Exemplo n.º 4
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();
            }
        }