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); } } } }
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(); }
public override void ReceivedData(AxKHOpenAPILib.AxKHOpenAPI axKHOpenAPI, AxKHOpenAPILib._DKHOpenAPIEvents_OnReceiveRealDataEvent e) { /* * * [20] = 체결시간 //(0) * [10] = 현재가 //(1) * [11] = 전일대비 //(2) * [12] = 등락율 //(3) * [27] = (최우선)매도호가 //(4) * [28] = (최우선)매수호가 //(5) * [15] = 거래량 //(6) * [13] = 누적거래량 //(7) * [14] = 누적거래대금 //(8) * [16] = 시가 //(9) * [17] = 고가 //(10) * [18] = 저가 //(11) * [25] = 전일대비기호 //(12) * [26] = 전일거래량대비(계약,주) //(13) * [29] = 거래대금증감 //(14) * [30] = 전일거래량대비(비율) //(15) * [31] = 거래회전율 //(16) * [32] = 거래비용 //(17) * [228] = 체결강도 //(18) * [311] = 시가총액(억) //(19) * [290] = 장구분 //(20) * [691] = KO접근도 //(21) * [567] = 상한가발생시간 //(22) * [568] = 하한가발생시간 //(23) * */ /* * FileLog.PrintF(String.Format("체결시간=> {0} ", axKHOpenAPI.GetCommRealData(e.sRealType, 20).Trim())); //[0] * FileLog.PrintF(String.Format("현재가=> {0} ", axKHOpenAPI.GetCommRealData(e.sRealType, 10).Trim())); //[1] * FileLog.PrintF(String.Format("전일대비=> {0} ", axKHOpenAPI.GetCommRealData(e.sRealType, 11).Trim())); //[2] * FileLog.PrintF(String.Format("등락율=> {0} ", axKHOpenAPI.GetCommRealData(e.sRealType, 12).Trim())); //[3] * FileLog.PrintF(String.Format("(최우선)매도호가=> {0} ", axKHOpenAPI.GetCommRealData(e.sRealType, 27).Trim())); //[4] * FileLog.PrintF(String.Format("(최우선)매수호가=> {0} ", axKHOpenAPI.GetCommRealData(e.sRealType, 28).Trim())); //[5] * FileLog.PrintF(String.Format("거래량=> {0} ", axKHOpenAPI.GetCommRealData(e.sRealType, 15).Trim())); //[6] * FileLog.PrintF(String.Format("누적거래량=> {0} ", axKHOpenAPI.GetCommRealData(e.sRealType, 13).Trim())); //[7] * FileLog.PrintF(String.Format("누적거래대금=> {0} ", axKHOpenAPI.GetCommRealData(e.sRealType, 14).Trim())); //[8] * FileLog.PrintF(String.Format("시가=> {0} ", axKHOpenAPI.GetCommRealData(e.sRealType, 16).Trim())); //[9] * FileLog.PrintF(String.Format("고가=> {0} ", axKHOpenAPI.GetCommRealData(e.sRealType, 17).Trim())); //[10] * FileLog.PrintF(String.Format("저가=>{0} ", axKHOpenAPI.GetCommRealData(e.sRealType, 18).Trim())); //[11] * FileLog.PrintF(String.Format("전일대비기호=> {0} ", axKHOpenAPI.GetCommRealData(e.sRealType, 25).Trim())); //[12] * FileLog.PrintF(String.Format("전일거래량대비_계약_주=> {0} ", axKHOpenAPI.GetCommRealData(e.sRealType, 26).Trim())); //[13] * FileLog.PrintF(String.Format("거래대금증감=> {0} ", axKHOpenAPI.GetCommRealData(e.sRealType, 29).Trim())); //[14] * FileLog.PrintF(String.Format("전일거래량대비_비율=> {0} ", axKHOpenAPI.GetCommRealData(e.sRealType, 30).Trim())); //[15] * FileLog.PrintF(String.Format("거래회전율=> {0} ", axKHOpenAPI.GetCommRealData(e.sRealType, 31).Trim())); //[16] * FileLog.PrintF(String.Format("거래비용=> {0} ", axKHOpenAPI.GetCommRealData(e.sRealType, 32).Trim())); //[17] * FileLog.PrintF(String.Format("체결강도=> {0} ", axKHOpenAPI.GetCommRealData(e.sRealType, 228).Trim())); //[18] * FileLog.PrintF(String.Format("시가총액_억=> {0} ", axKHOpenAPI.GetCommRealData(e.sRealType, 311).Trim())); //[19] * FileLog.PrintF(String.Format("장구분=> {0} ", axKHOpenAPI.GetCommRealData(e.sRealType, 290).Trim())); //[20] * FileLog.PrintF(String.Format("KO접근도=> {0} ", axKHOpenAPI.GetCommRealData(e.sRealType, 691).Trim())); //[21] * FileLog.PrintF(String.Format("상한가발생시간=> {0} ", axKHOpenAPI.GetCommRealData(e.sRealType, 567).Trim())); //[22] * FileLog.PrintF(String.Format("하한가발생시간=> {0} ", axKHOpenAPI.GetCommRealData(e.sRealType, 568).Trim())); //[23] * FileLog.PrintF(String.Format("종목코드=> {0} ", e.sRealKey.ToString().Trim())); * FileLog.PrintF(String.Format("RealName=> {0} ", e.sRealType.ToString().Trim())); * FileLog.PrintF(String.Format("sRealData=> {0} ", e.sRealData.ToString().Trim())); */ String 현재일자 = DateTime.Now.ToString("yyyy-MM-dd"); String 체결시간TMP = axKHOpenAPI.GetCommRealData(e.sRealType, 20).Trim(); //[0] //체결시간이 6자리이므로 HHMMSS ==> HH:MM:SS로 바꿔야한다. String 체결시간 = 체결시간TMP.Substring(0, 2) + ":" + 체결시간TMP.Substring(2, 2) + ":" + 체결시간TMP.Substring(4, 2); 체결시간 = 현재일자 + " " + 체결시간; REAL10002_Data real10002_data = new REAL10002_Data(); //String 현재시간 = DateTime.Now.ToString("yyyyMMdd HH:mm:ss:fff"); real10002_data.체결시간 = 체결시간; real10002_data.현재가 = Int32.Parse(axKHOpenAPI.GetCommRealData(e.sRealType, 10).Trim()); //[1] real10002_data.전일대비 = Int32.Parse(axKHOpenAPI.GetCommRealData(e.sRealType, 11).Trim()); //[2] real10002_data.등락율 = float.Parse(axKHOpenAPI.GetCommRealData(e.sRealType, 12).Trim()); //[3] real10002_data.매도호가 = Int32.Parse(axKHOpenAPI.GetCommRealData(e.sRealType, 27).Trim()); //[4] real10002_data.매수호가 = Int32.Parse(axKHOpenAPI.GetCommRealData(e.sRealType, 28).Trim()); //[5] real10002_data.거래량 = Int32.Parse(axKHOpenAPI.GetCommRealData(e.sRealType, 15).Trim()); //[6] real10002_data.누적거래량 = Int32.Parse(axKHOpenAPI.GetCommRealData(e.sRealType, 13).Trim()); //[7] real10002_data.누적거래대금 = Int32.Parse(axKHOpenAPI.GetCommRealData(e.sRealType, 14).Trim()); //[8] real10002_data.시가 = Int32.Parse(axKHOpenAPI.GetCommRealData(e.sRealType, 16).Trim()); //[9] real10002_data.고가 = Int32.Parse(axKHOpenAPI.GetCommRealData(e.sRealType, 17).Trim()); //[10] real10002_data.저가 = Int32.Parse(axKHOpenAPI.GetCommRealData(e.sRealType, 18).Trim()); //[11] real10002_data.전일대비기호 = Int32.Parse(axKHOpenAPI.GetCommRealData(e.sRealType, 25).Trim()); //[12] real10002_data.전일거래량대비_계약_주 = Int32.Parse(axKHOpenAPI.GetCommRealData(e.sRealType, 26).Trim()); //[13] real10002_data.거래대금증감 = decimal.Parse(axKHOpenAPI.GetCommRealData(e.sRealType, 29).Trim()); //[14] real10002_data.전일거래량대비_비율 = float.Parse(axKHOpenAPI.GetCommRealData(e.sRealType, 30).Trim()); //[15] real10002_data.거래회전율 = float.Parse(axKHOpenAPI.GetCommRealData(e.sRealType, 31).Trim()); //[16] real10002_data.거래비용 = Int32.Parse(axKHOpenAPI.GetCommRealData(e.sRealType, 32).Trim()); //[17] real10002_data.체결강도 = float.Parse(axKHOpenAPI.GetCommRealData(e.sRealType, 228).Trim()); //[18] real10002_data.시가총액_억 = Int32.Parse(axKHOpenAPI.GetCommRealData(e.sRealType, 311).Trim()); //[19] real10002_data.장구분 = Int32.Parse(axKHOpenAPI.GetCommRealData(e.sRealType, 290).Trim()); //[20] real10002_data.KO접근도 = Int32.Parse(axKHOpenAPI.GetCommRealData(e.sRealType, 691).Trim()); //[21] real10002_data.상한가발생시간 = axKHOpenAPI.GetCommRealData(e.sRealType, 567).Trim(); //[22] real10002_data.하한가발생시간 = axKHOpenAPI.GetCommRealData(e.sRealType, 568).Trim(); //[23] real10002_data.종목코드 = e.sRealKey.ToString().Trim(); //[24] real10002_data.RealName = e.sRealType.ToString().Trim(); MyStock.getClass1Instance().UpdateStockList(real10002_data); // SendDirectFile(real10002_data); SendDirectDb(real10002_data); }
private void 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(); } }