using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; using MySql.Data.MySqlClient; namespace future_crawler { public partial class Form1 : Form { MySqlConnection m_DBCon; CPUTILLib.CpFutureCode m_FutCode = new CPUTILLib.CpFutureCode(); string m_strTargetFutCode = "101K9"; string m_strTargetOptCode = "201K7255"; CPSYSDIBLib.FutOptChart m_FutOpChart = new CPSYSDIBLib.FutOptChart(); public Form1() { InitializeComponent(); string strConn = "Server=mjjo53.us.to;Database=futopt;Uid=mjjo;Pwd=whaudwls;"; m_DBCon = new MySqlConnection(strConn); m_DBCon.Open(); } private void btSearchCode_Click(object sender, EventArgs e) { int iCnt = m_FutCode.GetCount(); for (short i = 0; i < iCnt; i++) { string strCode = (string)m_FutCode.GetData(0, i); string strName = (string)m_FutCode.GetData(1, i); Console.WriteLine(string.Format("{0} / {1}", strCode, strName)); } m_strTargetFutCode = (string)m_FutCode.GetData(0, 0); lbFutCode.Text = m_strTargetFutCode; } private void btCrawling_Click(object sender, EventArgs e) { // 필드값 //0: 날짜(ulong) //1:시간(ulong) - hhmm(단, 차트구분을 초('S')로 설정한 경우에는 hhmmss) //2:시가(ulong or float) //3:고가(ulong or float) //4:저가(ulong or float) //5:종가(ulong or float) //6:전일대비(long or float) //8:거래량(ulong or ulonglong) //9:거래대금(ulonglong) //10:누적체결매도수량(ulong or ulonglong) - 주) 분,틱 요청일 때만 제공 //11:누적체결매수수량(ulong or ulonglong) - 주) 분,틱 요청일 때만 제공 //12: 사용하지 않음 //13: 사용하지 않음 //14: 사용하지 않음 //15: 사용하지 않음 //16: 사용하지 않음 //17: 사용하지 않음 //18:수정주가일자(ulong) - YYYYMMDD //19:수정주가비율(float) //20:기관순매수(long) //21:기관누적순매수(long) //22: 사용하지 않음 //23: 사용하지 않음 //24: 사용하지 않음 //25: 사용하지 않음 //26: 사용하지 않음 //27: 미결제약정 //28: 선물이론가(선물 일간데이터에서만 제공) //29: 베이시스 //30: 옵션이론가 (옵션일 때만 제공) //31: IV //32: Delta //33: Gamma //34: Theta //35: Vaga //36: Rho m_FutOpChart.SetInputValue(0, m_strTargetFutCode); m_FutOpChart.SetInputValue(1, '1'); m_FutOpChart.SetInputValue(2, 20150618); m_FutOpChart.SetInputValue(3, 20150618); m_FutOpChart.SetInputValue(4, 0); m_FutOpChart.SetInputValue(5, new int[] { 0, 1, 5, 8, 9, 20 }); m_FutOpChart.SetInputValue(6, 'S'); m_FutOpChart.SetInputValue(7, 1); m_FutOpChart.SetInputValue(8, '0'); m_FutOpChart.SetInputValue(9, '0'); int iResult = m_FutOpChart.BlockRequest2(1); if (iResult != 0) MessageBox.Show("결과가 이상함"); MySqlCommand cmd = new MySqlCommand(); bool bContinue = true; while (bContinue == true) { MySqlTransaction trans = m_DBCon.BeginTransaction(); cmd.Connection = m_DBCon; cmd.Transaction = trans; int iCnt = m_FutOpChart.GetHeaderValue(3); int iFieldCnt = m_FutOpChart.GetHeaderValue(1); for (int i = 0; i < iCnt; i++) { ulong date = m_FutOpChart.GetDataValue(0, i); ulong time = m_FutOpChart.GetDataValue(1, i); float fp = m_FutOpChart.GetDataValue(2, i); object deal_amount = m_FutOpChart.GetDataValue(3, i); object deal_cash = m_FutOpChart.GetDataValue(4, i); int comp_bid = m_FutOpChart.GetDataValue(5, i); string strTime = string.Format("{0:d04}-{1:d02}-{2:d02} {3:d02}:{4:d02}:{5:d02}", date / 10000, (date % 10000) / 100, date % 100, time / 10000, (time % 10000) / 100, time % 100); cmd.CommandText = string.Format("insert into future_list(code,date,fin_price,deal_amount,deal_cash,comp_bid) values('{0}','{1}',{2},{3},{4},{5})", m_strTargetFutCode, strTime, fp, deal_amount, deal_cash, comp_bid); cmd.ExecuteNonQuery(); Console.WriteLine(string.Format("{0}/{1}/{2}/{3}/{4}/{5}/{6}", m_strTargetFutCode, date, time, fp, deal_amount, deal_cash, comp_bid)); } trans.Commit(); bContinue = (m_FutOpChart.Continue == 1); iResult = m_FutOpChart.BlockRequest2(1); } Console.WriteLine("end."); } private void btCrawlingOption_Click(object sender, EventArgs e) { m_FutOpChart.SetInputValue(0, m_strTargetOptCode); m_FutOpChart.SetInputValue(1, '1'); m_FutOpChart.SetInputValue(2, 20150618); m_FutOpChart.SetInputValue(3, 20150618); m_FutOpChart.SetInputValue(4, 0); m_FutOpChart.SetInputValue(5, new int[] { 0, 1, 5, 8, 9, 20 }); m_FutOpChart.SetInputValue(6, 'S'); m_FutOpChart.SetInputValue(7, 1); m_FutOpChart.SetInputValue(8, '0'); m_FutOpChart.SetInputValue(9, '0'); int iResult = m_FutOpChart.BlockRequest2(1); if (iResult != 0) MessageBox.Show("결과가 이상함"); MySqlCommand cmd = new MySqlCommand(); bool bContinue = true; while (bContinue == true) { MySqlTransaction trans = m_DBCon.BeginTransaction(); cmd.Connection = m_DBCon; cmd.Transaction = trans; int iCnt = m_FutOpChart.GetHeaderValue(3); int iFieldCnt = m_FutOpChart.GetHeaderValue(1); for (int i = 0; i < iCnt; i++) { ulong date = m_FutOpChart.GetDataValue(0, i); ulong time = m_FutOpChart.GetDataValue(1, i); float fp = m_FutOpChart.GetDataValue(2, i); object deal_amount = m_FutOpChart.GetDataValue(3, i); object deal_cash = m_FutOpChart.GetDataValue(4, i); int comp_bid = m_FutOpChart.GetDataValue(5, i); string strTime = string.Format("{0:d04}-{1:d02}-{2:d02} {3:d02}:{4:d02}:{5:d02}", date / 10000, (date % 10000) / 100, date % 100, time / 10000, (time % 10000) / 100, time % 100); cmd.CommandText = string.Format("insert into option_list(code,date,fin_price,deal_amount,deal_cash,comp_bid) values('{0}','{1}',{2},{3},{4},{5})", m_strTargetOptCode, strTime, fp, deal_amount, deal_cash, comp_bid); cmd.ExecuteNonQuery(); Console.WriteLine(string.Format("{0}/{1}/{2}/{3}/{4}/{5}/{6}", m_strTargetOptCode, date, time, fp, deal_amount, deal_cash, comp_bid)); } trans.Commit(); bContinue = (m_FutOpChart.Continue == 1); iResult = m_FutOpChart.BlockRequest2(1); } Console.WriteLine("end."); } } }