From d41130fcddd57a63dd9dbbe08679d0b20cdc567d Mon Sep 17 00:00:00 2001 From: mjjo Date: Tue, 2 Aug 2016 02:03:22 +0900 Subject: [PATCH] =?UTF-8?q?-=20BinaryRage=20DB=20=EB=A1=9C=EA=B7=B8=20?= =?UTF-8?q?=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- MainForm.Designer.cs | 64 +++++----- MainForm.cs | 89 +++++--------- Program.cs | 16 ++- ULBalanceDlg.cs | 4 +- ULDB.cs | 22 ++-- ULDataMgr.cs | 111 ++++++++++++++++-- ULMonitorDlg.cs | 4 +- ULWatchItem.cs | 6 +- UlUtil.cs | 30 +++-- packages.config | 1 + .../BinaryRage.1.4.0.0.nupkg | Bin 0 -> 19808 bytes upper-limit-crawler.csproj | 18 +-- upper-limit-crawler.sln | 12 +- 13 files changed, 227 insertions(+), 150 deletions(-) create mode 100644 packages/BinaryRage.1.4.0.0/BinaryRage.1.4.0.0.nupkg diff --git a/MainForm.Designer.cs b/MainForm.Designer.cs index f19ba43..20bf970 100644 --- a/MainForm.Designer.cs +++ b/MainForm.Designer.cs @@ -51,18 +51,18 @@ this.splitContainer2 = new System.Windows.Forms.SplitContainer(); this.splitContainer3 = new System.Windows.Forms.SplitContainer(); this.btMATest = new System.Windows.Forms.Button(); - this.button1 = new System.Windows.Forms.Button(); this.btTimeSync = new System.Windows.Forms.Button(); this.cbStart = new System.Windows.Forms.CheckBox(); this.btCybosPlus = new System.Windows.Forms.Button(); this.btCybos5 = new System.Windows.Forms.Button(); this.lbSBCnt = new System.Windows.Forms.Label(); this.lbRQCnt = new System.Windows.Forms.Label(); + this.lbEvalProfit = new System.Windows.Forms.Label(); + this.lbCacheBalance = new System.Windows.Forms.Label(); this.statusBar1 = new System.Windows.Forms.StatusBar(); this.statusBarPanel1 = new System.Windows.Forms.StatusBarPanel(); this.statusBarPanel2 = new System.Windows.Forms.StatusBarPanel(); - this.lbCacheBalance = new System.Windows.Forms.Label(); - this.lbEvalProfit = new System.Windows.Forms.Label(); + this.btLogDump = new System.Windows.Forms.Button(); ((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).BeginInit(); this.splitContainer1.Panel1.SuspendLayout(); this.splitContainer1.Panel2.SuspendLayout(); @@ -288,8 +288,8 @@ // // splitContainer2.Panel2 // + this.splitContainer2.Panel2.Controls.Add(this.btLogDump); this.splitContainer2.Panel2.Controls.Add(this.btMATest); - this.splitContainer2.Panel2.Controls.Add(this.button1); this.splitContainer2.Panel2.Controls.Add(this.btTimeSync); this.splitContainer2.Panel2.Controls.Add(this.cbStart); this.splitContainer2.Panel2.Controls.Add(this.btCybosPlus); @@ -332,7 +332,7 @@ // // btMATest // - this.btMATest.Location = new System.Drawing.Point(138, 430); + this.btMATest.Location = new System.Drawing.Point(122, 421); this.btMATest.Name = "btMATest"; this.btMATest.Size = new System.Drawing.Size(75, 23); this.btMATest.TabIndex = 24; @@ -340,16 +340,6 @@ this.btMATest.UseVisualStyleBackColor = true; this.btMATest.Click += new System.EventHandler(this.btMATest_Click); // - // button1 - // - this.button1.Location = new System.Drawing.Point(142, 371); - this.button1.Name = "button1"; - this.button1.Size = new System.Drawing.Size(75, 23); - this.button1.TabIndex = 23; - this.button1.Text = "button1"; - this.button1.UseVisualStyleBackColor = true; - this.button1.Click += new System.EventHandler(this.button1_Click); - // // btTimeSync // this.btTimeSync.Location = new System.Drawing.Point(16, 341); @@ -411,6 +401,24 @@ this.lbRQCnt.TabIndex = 18; this.lbRQCnt.Text = "RQ Count : "; // + // lbEvalProfit + // + this.lbEvalProfit.AutoSize = true; + this.lbEvalProfit.Location = new System.Drawing.Point(38, 244); + this.lbEvalProfit.Name = "lbEvalProfit"; + this.lbEvalProfit.Size = new System.Drawing.Size(53, 12); + this.lbEvalProfit.TabIndex = 13; + this.lbEvalProfit.Text = "평가손익"; + // + // lbCacheBalance + // + this.lbCacheBalance.AutoSize = true; + this.lbCacheBalance.Location = new System.Drawing.Point(38, 222); + this.lbCacheBalance.Name = "lbCacheBalance"; + this.lbCacheBalance.Size = new System.Drawing.Size(29, 12); + this.lbCacheBalance.TabIndex = 13; + this.lbCacheBalance.Text = "잔고"; + // // statusBar1 // this.statusBar1.Location = new System.Drawing.Point(0, 720); @@ -435,23 +443,15 @@ this.statusBarPanel2.Name = "statusBarPanel2"; this.statusBarPanel2.Width = 120; // - // lbCacheBalance + // btLogDump // - this.lbCacheBalance.AutoSize = true; - this.lbCacheBalance.Location = new System.Drawing.Point(38, 222); - this.lbCacheBalance.Name = "lbCacheBalance"; - this.lbCacheBalance.Size = new System.Drawing.Size(29, 12); - this.lbCacheBalance.TabIndex = 13; - this.lbCacheBalance.Text = "잔고"; - // - // lbEvalProfit - // - this.lbEvalProfit.AutoSize = true; - this.lbEvalProfit.Location = new System.Drawing.Point(38, 244); - this.lbEvalProfit.Name = "lbEvalProfit"; - this.lbEvalProfit.Size = new System.Drawing.Size(53, 12); - this.lbEvalProfit.TabIndex = 13; - this.lbEvalProfit.Text = "평가손익"; + this.btLogDump.Location = new System.Drawing.Point(22, 555); + this.btLogDump.Name = "btLogDump"; + this.btLogDump.Size = new System.Drawing.Size(75, 23); + this.btLogDump.TabIndex = 25; + this.btLogDump.Text = "Dump Log"; + this.btLogDump.UseVisualStyleBackColor = true; + this.btLogDump.Click += new System.EventHandler(this.btLogDump_Click); // // MainForm // @@ -512,10 +512,10 @@ private System.Windows.Forms.StatusBar statusBar1; private System.Windows.Forms.StatusBarPanel statusBarPanel1; private System.Windows.Forms.StatusBarPanel statusBarPanel2; - private System.Windows.Forms.Button button1; private System.Windows.Forms.Button btMATest; private System.Windows.Forms.Label lbCacheBalance; private System.Windows.Forms.Label lbEvalProfit; + private System.Windows.Forms.Button btLogDump; } } diff --git a/MainForm.cs b/MainForm.cs index f57c993..c71645c 100644 --- a/MainForm.cs +++ b/MainForm.cs @@ -212,54 +212,6 @@ namespace upper_limit_crawler ULUtil.SyncServerTime(); } - DSCBO1Lib.StockCur cur = new DSCBO1Lib.StockCur(); - DSCBO1Lib.StockOutCur outCur = new DSCBO1Lib.StockOutCur(); - string strCheckCode = "A004565"; - - private void button1_Click(object sender, EventArgs e) - { - { - DSCBO1Lib.StockMst mst = new DSCBO1Lib.StockMst(); - mst.SetInputValue(0, strCheckCode); - mst.BlockRequest(); - short time = mst.GetHeaderValue(4); - Console.WriteLine("StockMst : {0}", time); - } - - { - DSCBO1Lib.StockMst2 mst2 = new DSCBO1Lib.StockMst2(); - mst2.SetInputValue(0, strCheckCode); - mst2.BlockRequest(); - long time = mst2.GetDataValue(2, 0); - Console.WriteLine("StockMst2 : {0}", time); - } - - { - cur.SetInputValue(0, strCheckCode); - cur.Received += Cur_Received; - cur.SubscribeLatest(); - } - - { - outCur.SetInputValue(0, strCheckCode); - outCur.Received += OutCur_Received; - outCur.SubscribeLatest(); - } - } - - private void OutCur_Received() - { - long time = outCur.GetHeaderValue(1); - Console.WriteLine("StockOutCur : {0}", time); - } - - private void Cur_Received() - { - long time = cur.GetHeaderValue(3); - long time2 = cur.GetHeaderValue(18); - Console.WriteLine("StockCur : {0} / {1}", time, time2); - } - struct chart_data { public chart_data(int iTime, int iPrice) @@ -280,10 +232,16 @@ namespace upper_limit_crawler Console.WriteLine("시뮬레이션 시작"); - List aCodeList = new List { "039230", "054620", "077970", "079950", "085370", "090470", "123010", "123860", "191420", "208860" }; - //List aCodeList = new List { "077970" }; - string strPrevDate = "20160728"; - string strDate = "20160729"; + List aCodeList = new List { + "064240", + "090410", + "208860", + "044180", + "127160", + "123570", + }; + string strPrevDate = "20160729"; + string strDate = "20160801"; int iTotalProfit = 0; foreach (string code in aCodeList) @@ -371,6 +329,8 @@ namespace upper_limit_crawler float fCompRate = WatchItem.m_iCurPrice / (float)WatchItem.m_iPrevClosing - 1.0f; if (fCompRate >= m_DataMgr.m_Setting.m_fBidMin && fCompRate <= m_DataMgr.m_Setting.m_fBidMax) { + m_DataMgr.AddAvailableItem(strCode); + if (m_DataMgr.IsInPostponeList(iTime, strCode) == true) { //Console.WriteLine("[{0}] 조건 매수 실패. black list {1}원 ({2})", item.m_strCodeName, item.m_iCurPrice, fCompRate.ToString("0.00%")); @@ -382,7 +342,7 @@ namespace upper_limit_crawler } float f5MASlope = WatchItem.GetPrev5MASlope(iTime); - if (float.IsNaN(f5MASlope) || f5MASlope < 0.002f) + if(f5MASlope < 0.002f) { //Console.WriteLine("[{0}] 조건 매수 실패. 5ma 상승하지 않음 {1}원 ({2})", item.m_strCodeName, item.m_iCurPrice, fCompRate.ToString("0.00%")); continue; @@ -392,6 +352,8 @@ namespace upper_limit_crawler Console.WriteLine("[{0}] [{1}] 조건 매수 {2}원 ({3}) (5MA slop:{4})", iTime, WatchItem.m_strCodeName, WatchItem.m_iCurPrice, fCompRate.ToString("0.00%"), f5MASlope.ToString("0.00%")); ULUtil.TraceCSV(iTime, "[시뮬레이션] 조건 매수", WatchItem.m_strCodeName, WatchItem.m_iCurPrice, fCompRate.ToString("0.00%"), f5MASlope.ToString("0.00%")); + m_DataMgr.AddBidLog(strCode, WatchItem.m_strCodeName, iTime, WatchItem.m_iCurPrice, f5MASlope); + int iBidCnt = (int)m_DataMgr.m_Setting.m_fBidAmount / iCurPrice; iTotalBidPrice += iCurPrice* iBidCnt; @@ -412,8 +374,12 @@ namespace upper_limit_crawler { m_DataMgr.AddLosscutItem(strCode); - Console.WriteLine("[{0}] [{1}] 손절 {2}원 ({3}:{4})", iTime, OwnItem.m_strCodeName, iCurPrice, iCurPrice - OwnItem.m_iUnitBEP, (iCurPrice / (float)OwnItem.m_iUnitBEP - 1.0f).ToString("0.00%")); - ULUtil.TraceCSV(iTime, "[시뮬레이션] 손절", OwnItem.m_strCodeName, iCurPrice, (iCurPrice / (float)OwnItem.m_iUnitBEP - 1.0f).ToString("0.00%")); + int iProfit = iCurPrice - (int)OwnItem.m_iUnitBEP; + float fProfitRate = (iCurPrice / (float)OwnItem.m_iUnitBEP - 1.0f); + + Console.WriteLine("[{0}] [{1}] 손절 {2}원 ({3}:{4})", iTime, OwnItem.m_strCodeName, iCurPrice, iProfit, fProfitRate.ToString("0.00%")); + ULUtil.TraceCSV(iTime, "[시뮬레이션] 손절", OwnItem.m_strCodeName, iCurPrice, fProfitRate.ToString("0.00%")); + m_DataMgr.AddAskLog(strCode, WatchItem.m_strCodeName, iTime, iCurPrice, float.NaN, true, iProfit, fProfitRate); iTotalAskPrice += iCurPrice * OwnItem.m_iConclusionBalanceCnt; OwnItem.m_iUnitBEP = 0; @@ -437,8 +403,12 @@ namespace upper_limit_crawler continue; } - Console.WriteLine("[{0}] [{1}] 트레일링 매도 {2}원 ({3}:{4}) (5MA slop:{5})", iTime, OwnItem.m_strCodeName, iCurPrice, iCurPrice - OwnItem.m_iUnitBEP, (iCurPrice / (float)OwnItem.m_iUnitBEP - 1.0f).ToString("0.00%"), f5MASlope.ToString("0.00%")); - ULUtil.TraceCSV(iTime, "[시뮬레이션] 트레일링 매도", OwnItem.m_strCodeName, iCurPrice, iCurPrice - OwnItem.m_iUnitBEP, (iCurPrice / (float)OwnItem.m_iUnitBEP - 1.0f).ToString("0.00%"), f5MASlope.ToString("0.00%")); + int iProfit = iCurPrice - (int)OwnItem.m_iUnitBEP; + float fProfitRate = (iCurPrice / (float)OwnItem.m_iUnitBEP - 1.0f); + + Console.WriteLine("[{0}] [{1}] 트레일링 매도 {2}원 ({3}:{4}) (5MA slop:{5})", iTime, OwnItem.m_strCodeName, iCurPrice, iProfit, fProfitRate.ToString("0.00%"), f5MASlope.ToString("0.00%")); + ULUtil.TraceCSV(iTime, "[시뮬레이션] 트레일링 매도", OwnItem.m_strCodeName, iCurPrice, iProfit, fProfitRate.ToString("0.00%"), f5MASlope.ToString("0.00%")); + m_DataMgr.AddAskLog(strCode, WatchItem.m_strCodeName, iTime, iCurPrice, f5MASlope, false, iProfit, fProfitRate); iTotalAskPrice += iCurPrice * OwnItem.m_iConclusionBalanceCnt; OwnItem.m_iUnitBEP = 0; @@ -489,5 +459,10 @@ namespace upper_limit_crawler Console.WriteLine("시뮬레이션 끝"); } + + private void btLogDump_Click(object sender, EventArgs e) + { + m_DataMgr.DumpLog(); + } } } diff --git a/Program.cs b/Program.cs index e7373f3..fc1136a 100644 --- a/Program.cs +++ b/Program.cs @@ -14,9 +14,17 @@ namespace upper_limit_crawler [STAThread] static void Main() { - Application.EnableVisualStyles(); - Application.SetCompatibleTextRenderingDefault(false); - Application.Run(new MainForm()); - } + try + { + Application.EnableVisualStyles(); + Application.SetCompatibleTextRenderingDefault(false); + Application.Run(new MainForm()); + } + catch(Exception e) + { + Console.WriteLine(e.ToString()); + } + + } } } diff --git a/ULBalanceDlg.cs b/ULBalanceDlg.cs index 73ee389..79b45f2 100644 --- a/ULBalanceDlg.cs +++ b/ULBalanceDlg.cs @@ -265,7 +265,7 @@ namespace upper_limit_crawler f5MASlope.ToString("0.00%"), WatchItem.m_iHighestPrice); ULUtil.TraceCSV("트레일링 매도", OwnItem.m_strCodeName, iCurPrice, iCurPrice - OwnItem.m_iUnitBEP, fProfitRate.ToString("0.00%"), f5MASlope.ToString("0.00%"), WatchItem.m_iHighestPrice); - m_DataMgr.AddAskLog(strCode, WatchItem.m_strCodeName, iTime, iCurPrice, float.NaN, false, iProfit, fProfitRate); + m_DataMgr.AddAskLog(strCode, WatchItem.m_strCodeName, iTime, iCurPrice, f5MASlope, false, iProfit, fProfitRate); } } @@ -322,6 +322,7 @@ namespace upper_limit_crawler foreach(ListViewItem item in lvBalance.SelectedItems) { ULUtil.Trace("[{0}] 수동 매도", item.SubItems[chName.Index].Text); + ULUtil.TraceCSV(ULUtil.GetCurTimeInt(), "수동 매도", item.SubItems[chName.Index], item.SubItems[chCurPrice.Index], item.SubItems[chProfitRate.Index]); string strCode = item.SubItems[chCode.Index].Text; int iCnt = int.Parse(item.SubItems[chBalance.Index].Text); @@ -334,6 +335,7 @@ namespace upper_limit_crawler foreach (ListViewItem item in lvBalance.Items) { ULUtil.Trace("[{0}] 모두 청산", item.SubItems[chName.Index].Text); + ULUtil.TraceCSV(ULUtil.GetCurTimeInt(), "모두 청산", item.SubItems[chName.Index], item.SubItems[chCurPrice.Index], item.SubItems[chProfitRate.Index]); string strCode = item.SubItems[chCode.Index].Text; int iCnt = int.Parse(item.SubItems[chBalance.Index].Text); diff --git a/ULDB.cs b/ULDB.cs index 3f77493..58ced4a 100644 --- a/ULDB.cs +++ b/ULDB.cs @@ -11,26 +11,24 @@ namespace upper_limit_crawler { const string DBNAME = "DB"; - LevelDB.DB m_DB = null; - LevelDB.WriteOptions m_DefaultWriteOption = new LevelDB.WriteOptions(); - LevelDB.ReadOptions m_DefaultReadOption = new LevelDB.ReadOptions(); - public ULDB() { - LevelDB.Options OpenOption = new LevelDB.Options(); - OpenOption.CreateIfMissing=true; - m_DB=LevelDB.DB.Open(DBNAME, OpenOption); } - public void Put(string strKey, LevelDB.Slice Value) + public void Insert(string strKey, T Value) { - m_DB.Put(m_DefaultWriteOption, strKey, Value); + BinaryRage.DB.Insert(strKey, Value, DBNAME); } - public LevelDB.Slice Get(string strKey) + public T Get(string strKey) { - LevelDB.Slice Value = m_DB.Get(m_DefaultReadOption, strKey); - return Value; + object data = BinaryRage.DB.Get(strKey, DBNAME); + return (T)data; + } + + public bool IsExist(string strKey) + { + return BinaryRage.DB.Exists(strKey, DBNAME); } } } diff --git a/ULDataMgr.cs b/ULDataMgr.cs index e70141d..785e5c3 100644 --- a/ULDataMgr.cs +++ b/ULDataMgr.cs @@ -32,7 +32,30 @@ namespace upper_limit_crawler public int m_iTime; } - public class ULDataMgr + [Serializable] + struct BID_LOG + { + public string m_strCode { get; set; } + public string m_strCodeName { get; set; } + public int m_iTime { get; set; } + public int m_iBidPrice { get; set; } + public float m_f5MAslope { get; set; } + } + + [Serializable] + struct ASK_LOG + { + public string m_strCode { get; set; } + public string m_strCodeName { get; set; } + public int m_iTime { get; set; } + public int m_iAskPrice { get; set; } + public float m_f5MAslope { get; set; } + public bool m_bLosscut { get; set; } + public int m_iProfit { get; set; } + public float m_fProfitRate { get; set; } + } + + public class ULDataMgr { public SETTING m_Setting = new SETTING(); public ULDB m_DB = new ULDB(); @@ -47,14 +70,24 @@ namespace upper_limit_crawler string m_AvailableListKey; List m_AvailableList = new List(); + List m_BidLogs = new List(); + List m_AskLogs = new List(); + long m_iCacheBalance = 0; long m_iEvalProfit = 0; + string m_strToday = ULUtil.GetCurTime().ToString("yyyy-MM-dd"); + public ULDataMgr() { - m_AvailableListKey= "available-"+ULUtil.GetCurTime().ToString("yyyy-MM-dd"); - string strValue = m_DB.Get(m_AvailableListKey).ToString(); - m_AvailableList=strValue.Split(',').ToList(); + m_AvailableListKey= "available-"+m_strToday; + if(m_DB.IsExist(m_AvailableListKey) == true) + m_AvailableList = m_DB.Get>(m_AvailableListKey); + else + m_AvailableList = new List(); + + m_BidLogs = GetBidLog(m_strToday); + m_AskLogs = GetAskLog(m_strToday); } public void Init() @@ -186,22 +219,74 @@ namespace upper_limit_crawler if(m_AvailableList.Any(r => r==strCode)==false) { m_AvailableList.Add(strCode); - m_DB.Put(m_AvailableListKey, string.Join(",", m_AvailableList)); + m_DB.Insert(m_AvailableListKey, m_AvailableList); } } public void AddBidLog(string strCode, string strCodeName, int iTime, int iBidPrice, float f5MAslope) { - string strKey = string.Format("bid-{0}-{1}-{2}", ULUtil.GetCurTime().ToString("yyyyMMdd"), iTime, strCodeName); - string strValue = string.Format("{0},{1},{2},{3},{4}", strCodeName, strCode, iTime, iBidPrice, f5MAslope); - m_DB.Put(strKey, strValue); + string strKey = "bid-"+m_strToday; + + BID_LOG log = new BID_LOG(); + log.m_strCode = strCode; + log.m_strCodeName = strCodeName; + log.m_iTime = iTime; + log.m_iBidPrice = iBidPrice; + log.m_f5MAslope = f5MAslope; + m_BidLogs.Add(log); + + m_DB.Insert(strKey, m_BidLogs); } - public void AddAskLog(string strCode, string strCodeName, int iTime, int iBidPrice, float f5MAslope, bool bLosscut, int iProfit, float fProfitRate) + List GetBidLog(string strDate) + { + string strKey = "bid-"+strDate; + if(m_DB.IsExist(strKey) == true) + return m_DB.Get>(strKey); + else + return new List(); + } + + public void AddAskLog(string strCode, string strCodeName, int iTime, int iAskPrice, float f5MAslope, bool bLosscut, int iProfit, float fProfitRate) { - string strKey = string.Format("ask-{0}-{1}-{2}", ULUtil.GetCurTime().ToString("yyyyMMdd"), iTime, strCodeName); - string strValue = string.Format("{0},{1},{2},{3},{4},{5},{6},{7}", strCodeName, strCode, iTime, iBidPrice, f5MAslope, bLosscut?"Losscut":"Trailing", iProfit, fProfitRate); - m_DB.Put(strKey, strValue); + string strKey = "ask-"+m_strToday; + + ASK_LOG log = new ASK_LOG(); + log.m_strCode = strCode; + log.m_strCodeName = strCodeName; + log.m_iTime = iTime; + log.m_iAskPrice = iAskPrice; + log.m_f5MAslope = f5MAslope; + log.m_bLosscut = bLosscut; + log.m_iProfit = iProfit; + log.m_fProfitRate = fProfitRate; + m_AskLogs.Add(log); + + m_DB.Insert(strKey, m_AskLogs); } - } + + List GetAskLog(string strDate) + { + string strKey = "ask-"+strDate; + if(m_DB.IsExist(strKey) == true) + return m_DB.Get>(strKey); + else + return new List(); + } + + public void DumpLog() + { + StringBuilder sb = new StringBuilder(); + + foreach(string strCode in m_AvailableList) + sb.AppendLine(strCode+","); + + foreach(BID_LOG log in m_BidLogs) + sb.AppendFormat("매수, {0}, {1}, {2}, {3}"+Environment.NewLine, log.m_iTime, log.m_strCodeName, log.m_iBidPrice, log.m_f5MAslope.ToString("0.00%")); + foreach(ASK_LOG log in m_AskLogs) + sb.AppendFormat("매도, {0}, {1}, {2}, {3}, {4}, {5}"+Environment.NewLine, log.m_iTime, log.m_strCodeName, log.m_iAskPrice, log.m_f5MAslope.ToString("0.00%"), log.m_iProfit, log.m_fProfitRate.ToString("0.00%")); + + System.IO.File.WriteAllText(ULUtil.GetLogDir()+"dblog-"+m_strToday+".csv", sb.ToString(), Encoding.UTF8); + } + } } diff --git a/ULMonitorDlg.cs b/ULMonitorDlg.cs index ad29c0d..64eb1b8 100644 --- a/ULMonitorDlg.cs +++ b/ULMonitorDlg.cs @@ -172,8 +172,8 @@ namespace upper_limit_crawler continue; } - float f5MASlope = item.GetPrev5MASlope(iTime); - if(float.IsNaN(f5MASlope) == false && f5MASlope < 0.002f) + float f5MASlope = item.GetPrev5MASlope(item.m_iCurTime); + if(f5MASlope < 0.002f) { //ULUtil.Trace("[{0}] 조건 매수 실패. 5ma 상승하지 않음 {1}원 ({2})", item.m_strCodeName, item.m_iCurPrice, fCompRate.ToString("0.00%")); continue; diff --git a/ULWatchItem.cs b/ULWatchItem.cs index 24ef231..89edf1e 100644 --- a/ULWatchItem.cs +++ b/ULWatchItem.cs @@ -56,6 +56,7 @@ namespace upper_limit_crawler public string m_strCode; public string m_strCodeName; public DSCBO1Lib.StockCur m_StockCur = null; + public int m_iCurTime; public int m_iCurPrice; public int m_iPrevClosing; public int m_iStartPrice; @@ -94,6 +95,7 @@ namespace upper_limit_crawler int iTime = (int)m_StockCur.GetHeaderValue(18); int iTime2 = m_StockCur.GetHeaderValue(3); + m_iCurTime = iTime; m_iCurPrice = m_StockCur.GetHeaderValue(13); m_iPrevClosing = m_iCurPrice - m_StockCur.GetHeaderValue(2); m_iStartPrice = m_StockCur.GetHeaderValue(4); @@ -158,7 +160,6 @@ namespace upper_limit_crawler int iMin = GetMinute(iTime); int iSec = GetSecond(iTime); - int iKey = GetTimeKey1Min(iHour, iMin, iSec); bool bMadeNew = false; if (m_1MinChart.ContainsKey(iKey) == false) @@ -308,7 +309,8 @@ namespace upper_limit_crawler public float GetPrev5MASlope(int iTime) { - int iLastIdx = m_1MinChart.IndexOfKey(iTime)-1; + int iTimeKey = GetTimeKey1Min(GetHour(iTime), GetMinute(iTime), 0); + int iLastIdx = m_1MinChart.IndexOfKey(iTimeKey)-1; if(iLastIdx <= 1 || iLastIdx >= m_5MAChart.Count) return float.NaN; diff --git a/UlUtil.cs b/UlUtil.cs index 03800f6..1611d07 100644 --- a/UlUtil.cs +++ b/UlUtil.cs @@ -14,30 +14,29 @@ namespace upper_limit_crawler { //static string m_strLogServer = "http://mjjo53.us.to:8000"; - static CPUTILLib.CpCybos m_CPUtil = new CPUTILLib.CpCybos(); - static CPUTILLib.CpCodeMgr m_CPCodeMgr = new CPUTILLib.CpCodeMgr(); + static CPUTILLib.CpCybos m_CPUtil = null; + static CPUTILLib.CpCodeMgr m_CPCodeMgr = null; static TextBox m_tbLog = null; + static string m_strLogDir; static string m_strLogFileName; static string m_strCSVFileName; static TimeSpan m_TimeDiff = TimeSpan.Zero; public static void Init(TextBox tbLog) { + m_CPUtil = new CPUTILLib.CpCybos(); + m_CPCodeMgr = new CPUTILLib.CpCodeMgr(); + m_tbLog = tbLog; if (Debugger.IsAttached == true) - { - m_strLogFileName = Directory.GetParent(Environment.CurrentDirectory).Parent.FullName + "\\"; - m_strCSVFileName = Directory.GetParent(Environment.CurrentDirectory).Parent.FullName + "\\"; - } + m_strLogDir = Directory.GetParent(Environment.CurrentDirectory).Parent.FullName + "\\"; + m_strLogDir += "log\\"; + if (Directory.Exists(m_strLogDir) == false) + Directory.CreateDirectory(m_strLogDir); - m_strLogFileName += "log\\"; - if (Directory.Exists(m_strLogFileName) == false) - Directory.CreateDirectory(m_strLogFileName); - m_strLogFileName += "log-" + GetCurTime().ToString("yyyy-MM-dd") + ".txt"; - - m_strCSVFileName += "log\\"; - m_strCSVFileName += "log-" + GetCurTime().ToString("yyyy-MM-dd") + ".csv"; + m_strLogFileName = m_strLogDir + "log-" + GetCurTime().ToString("yyyy-MM-dd") + ".txt"; + m_strCSVFileName = m_strLogDir + "log-" + GetCurTime().ToString("yyyy-MM-dd") + ".csv"; } public static void SyncServerTime() @@ -197,6 +196,11 @@ namespace upper_limit_crawler } } + public static string GetLogDir() + { + return m_strLogDir; + } + public static void Trace(string strMsg) { string strLog = "["+GetCurTimeString()+"] "+strMsg; diff --git a/packages.config b/packages.config index be12458..d4dc969 100644 --- a/packages.config +++ b/packages.config @@ -1,4 +1,5 @@  + \ No newline at end of file diff --git a/packages/BinaryRage.1.4.0.0/BinaryRage.1.4.0.0.nupkg b/packages/BinaryRage.1.4.0.0/BinaryRage.1.4.0.0.nupkg new file mode 100644 index 0000000000000000000000000000000000000000..1febda4981bedc3ff3ce8feb50df4ecec65e419e GIT binary patch literal 19808 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 literal 0 HcmV?d00001 diff --git a/upper-limit-crawler.csproj b/upper-limit-crawler.csproj index 622c220..7f668e7 100644 --- a/upper-limit-crawler.csproj +++ b/upper-limit-crawler.csproj @@ -24,29 +24,30 @@ Properties\app.manifest - + true - bin\x64\Debug\ + bin\Debug\ DEBUG;TRACE full - x64 + AnyCPU prompt MinimumRecommendedRules.ruleset true - - bin\x64\Release\ + + bin\Release\ TRACE true pdbonly - x64 + AnyCPU prompt MinimumRecommendedRules.ruleset true - - packages\LevelDB.Net.1.2.1\lib\net40\LevelDB.Net.dll + + packages\BinaryRage.1.4.0.0\lib\net40\BinaryRage.dll + True @@ -105,6 +106,7 @@ ULMonitorDlg.cs + Designer diff --git a/upper-limit-crawler.sln b/upper-limit-crawler.sln index a647775..165d1ba 100644 --- a/upper-limit-crawler.sln +++ b/upper-limit-crawler.sln @@ -7,14 +7,14 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "upper-limit-crawler", "uppe EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|x64 = Debug|x64 - Release|x64 = Release|x64 + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution - {591FA710-356A-498A-8133-7E9E60AB4E40}.Debug|x64.ActiveCfg = Debug|x64 - {591FA710-356A-498A-8133-7E9E60AB4E40}.Debug|x64.Build.0 = Debug|x64 - {591FA710-356A-498A-8133-7E9E60AB4E40}.Release|x64.ActiveCfg = Release|x64 - {591FA710-356A-498A-8133-7E9E60AB4E40}.Release|x64.Build.0 = Release|x64 + {591FA710-356A-498A-8133-7E9E60AB4E40}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {591FA710-356A-498A-8133-7E9E60AB4E40}.Debug|Any CPU.Build.0 = Debug|Any CPU + {591FA710-356A-498A-8133-7E9E60AB4E40}.Release|Any CPU.ActiveCfg = Release|Any CPU + {591FA710-356A-498A-8133-7E9E60AB4E40}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE