From 1f7430f74cc1577f1f5026326a2e1a8eb8a3c356 Mon Sep 17 00:00:00 2001 From: kyh <1329522@naver.com> Date: Thu, 15 Sep 2022 16:31:43 +0900 Subject: [PATCH] =?UTF-8?q?1.=20=EC=9E=84=EC=8B=9C=EB=A1=9C=20=EB=8D=B0?= =?UTF-8?q?=EC=9D=B4=ED=84=B0=20=EB=84=A3=EA=B8=B0=20=EC=99=84=EB=A3=8C=20?= =?UTF-8?q?2.=20Class=20=EC=A0=95=EA=B7=9C=ED=99=94=20=EC=99=84=EB=A3=8C?= =?UTF-8?q?=203.=20Insert=20=EA=B4=80=EB=A0=A8=20=EB=8D=B0=EC=9D=B4?= =?UTF-8?q?=ED=84=B0=20=EC=B2=98=EB=A6=AC=20=EC=99=84=EB=A3=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Million Hunter/HunterMainForm.cs | 9 +- Million Hunter/Million Hunter.csproj | 1 - Million Prototype/Form1.Designer.cs | 13 ++ Million Prototype/Form1.cs | 63 +++++++- Million/CommonProperty.cs | 1 + Million/DbMangement/DBConnection.cs | 105 ++++++++++++++ Million/DbMangement/DBServiceFunctions.cs | 168 +++++++++++++++++++++- Million/SaveData/SavedAnalysisData.cs | 2 + Million/SaveData/SavedResultData.cs | 19 ++- 9 files changed, 371 insertions(+), 10 deletions(-) diff --git a/Million Hunter/HunterMainForm.cs b/Million Hunter/HunterMainForm.cs index 542a4a1..04ebe94 100644 --- a/Million Hunter/HunterMainForm.cs +++ b/Million Hunter/HunterMainForm.cs @@ -73,7 +73,14 @@ namespace Million simpleButton_TobuyList.Visible = true; simpleButton_ToSellList.Visible = true; - DbServiceFunctions.GetMarketTable_FromDB("Upbit", "KRW"); + DbServiceFunctions.GetMarketTable_FromDB("Upbit", "KRW"); + + // Result Data DB에 생성 + Million.DbManagement.DBConnection.QueryUpdateExcuter + (CommonProperty.DbConnectionResultData, DbServiceFunctions.CreateSavedAnalysisDataTableQuery()); + Million.DbManagement.DBConnection.QueryUpdateExcuter + (CommonProperty.DbConnectionResultData, DbServiceFunctions.CreateSavedResultDataTableQuery()); + } // 지표 콤보박스 클릭 시 이벤트 diff --git a/Million Hunter/Million Hunter.csproj b/Million Hunter/Million Hunter.csproj index 8ff2e74..125dc9a 100644 --- a/Million Hunter/Million Hunter.csproj +++ b/Million Hunter/Million Hunter.csproj @@ -134,7 +134,6 @@ HunterMainForm.cs - ResXFileCodeGenerator Resources.Designer.cs diff --git a/Million Prototype/Form1.Designer.cs b/Million Prototype/Form1.Designer.cs index 1419b69..ac0571b 100644 --- a/Million Prototype/Form1.Designer.cs +++ b/Million Prototype/Form1.Designer.cs @@ -46,6 +46,7 @@ this.button9 = new System.Windows.Forms.Button(); this.chartControl1 = new DevExpress.XtraCharts.ChartControl(); this.button10 = new System.Windows.Forms.Button(); + this.button11 = new System.Windows.Forms.Button(); ((System.ComponentModel.ISupportInitialize)(this.chartControl1)).BeginInit(); ((System.ComponentModel.ISupportInitialize)(xyDiagram1)).BeginInit(); ((System.ComponentModel.ISupportInitialize)(series1)).BeginInit(); @@ -201,11 +202,22 @@ this.button10.UseVisualStyleBackColor = true; this.button10.Click += new System.EventHandler(this.button10_Click); // + // button11 + // + this.button11.Location = new System.Drawing.Point(35, 438); + this.button11.Name = "button11"; + this.button11.Size = new System.Drawing.Size(75, 23); + this.button11.TabIndex = 15; + this.button11.Text = "file to db"; + this.button11.UseVisualStyleBackColor = true; + this.button11.Click += new System.EventHandler(this.button11_Click); + // // Form1 // this.AutoScaleDimensions = new System.Drawing.SizeF(7F, 12F); this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; this.ClientSize = new System.Drawing.Size(1415, 703); + this.Controls.Add(this.button11); this.Controls.Add(this.button10); this.Controls.Add(this.chartControl1); this.Controls.Add(this.button9); @@ -249,6 +261,7 @@ private System.Windows.Forms.Button button9; private DevExpress.XtraCharts.ChartControl chartControl1; private System.Windows.Forms.Button button10; + private System.Windows.Forms.Button button11; } } diff --git a/Million Prototype/Form1.cs b/Million Prototype/Form1.cs index 930d59b..3e148f4 100644 --- a/Million Prototype/Form1.cs +++ b/Million Prototype/Form1.cs @@ -17,6 +17,7 @@ using Million; using System.IO; using Million.FileDBManagement; using Million.SaveData; +using Million.DbManagement; namespace Million_Prototype { @@ -379,11 +380,68 @@ namespace Million_Prototype } #endregion } - - } } + /// + /// File 에서 DB로 데이터 입력 + /// + /// + /// + private void button11_Click(object sender, EventArgs e) + { + //1회용임 Class 변경 때문에 + + //// Result Data DB에 생성 + //Million.DbManagement.DBConnection.QueryUpdateExcuter + // (CommonProperty.DbConnectionResultData, DbServiceFunctions.CreateSavedAnalysisDataTableQuery()); + //Million.DbManagement.DBConnection.QueryUpdateExcuter + // (CommonProperty.DbConnectionResultData, DbServiceFunctions.CreateSavedResultDataTableQuery()); + + ////file Data전체 불러와서 처리 + + //var savedResultDatas = new List(); + + //foreach (var filePath in Directory.GetFiles(CommonProperty.SaveProgramDirecotryPath).ToList() + // .FindAll(item => item.Contains(CommonProperty.InfoExtend))) + //{ + // var savedResult = FileManager.LoadResultDataInfoFromFile(filePath); + // savedResult.SavedInfoDataPath = filePath; + // savedResult.SavedResultDataPath = + // filePath.Replace(CommonProperty.InfoExtend, CommonProperty.DataExtend); + // savedResult.SavedResultAnalysisDataPath = + // filePath.Replace(CommonProperty.InfoExtend, CommonProperty.AnalysisExtendFolder); + + // savedResult.SearchResultList = FileManager.LoadResultDataFromFile(savedResult.SavedResultDataPath); + // savedResultDatas.Add(savedResult); + //} + + ////saved result for문 돌면서 데이터 처리 + //foreach(var item in savedResultDatas) + //{ + // var savedAnalysisDataList = new List(); + // if (Directory.Exists(item.SavedResultAnalysisDataPath)) + // { + // var fileList = Directory.GetFiles(item.SavedResultAnalysisDataPath, "*info"); + + // foreach (var filePath in fileList) + // { + // var savedSnalysisData = FileManager.LoadResultAnalysisDataInfoFromFile(filePath); + // savedSnalysisData.SavedInfoDataPath = filePath; + // savedSnalysisData.SavedResultDataPath = filePath.Replace("info", "data"); + // savedSnalysisData.AnalysisDataList = FileManager.LoadResultAnalysisDataFromFile(savedSnalysisData.SavedResultDataPath); + // savedAnalysisDataList.Add(savedSnalysisData); + // } + // } + // //SavedResultData 먼저 DB에 Insert 후 SavedAnalysisData 처리 + // Million.DbManagement.DBConnection.QueryUpdateExcuter_SavedResultData(item); + // foreach(var analysis in savedAnalysisDataList) + // { + // Million.DbManagement.DBConnection.QueryUpdateExcuter_SavedAnalysisData(analysis, item); + // } + //} + } + private void button4_Click(object sender, EventArgs e) { //DbServiceFunctions.GetMarketTable_FromDB("Upbit"); @@ -1101,6 +1159,7 @@ namespace Million_Prototype //diagram.AxisX.VisualRange. } + } public class DataPoint { diff --git a/Million/CommonProperty.cs b/Million/CommonProperty.cs index 901c517..4e2450b 100644 --- a/Million/CommonProperty.cs +++ b/Million/CommonProperty.cs @@ -263,6 +263,7 @@ namespace Million private const string DbServerUserPassword = "million!"; public static string DbConnectionStr = $"Data Source={DbServerIp};uid={DbServerUserId};pwd={DbServerUserPassword};Database="; public static string DbConnectionMarket = DbConnectionStr + "Market"; + public static string DbConnectionResultData = DbConnectionStr + "ResultData"; #endregion diff --git a/Million/DbMangement/DBConnection.cs b/Million/DbMangement/DBConnection.cs index 084c861..5012f5a 100644 --- a/Million/DbMangement/DBConnection.cs +++ b/Million/DbMangement/DBConnection.cs @@ -2,10 +2,13 @@ using System.Collections.Generic; using System.Data; using System.Data.SqlClient; +using System.IO; +using System.Runtime.Serialization.Formatters.Binary; using System.Windows.Forms; using DevExpress.Charts.Native; using DevExpress.DataAccess.Native.Sql; using Million.Data; +using Million.SaveData; namespace Million.DbManagement { @@ -212,5 +215,107 @@ namespace Million.DbManagement } } + /// + /// Insert SavedResultData + /// + /// + public static void QueryUpdateExcuter_SavedResultData(SavedResultData item) + { + var baBinaryFormatter = new BinaryFormatter(); + + var sqlQuery = DbServiceFunctions.InsertSavedResultDataQuery(item); + var strDBCon = CommonProperty.DbConnectionResultData; + + SqlConnection conn = null; + SqlDataReader rdr = null; + + try + { + using (conn = new SqlConnection(strDBCon)) + { + using (var cmd = new SqlCommand(sqlQuery, conn)) + { + var buySetupListStream = new MemoryStream(); + baBinaryFormatter.Serialize(buySetupListStream, item.BuySetupList); + buySetupListStream.Position = 0; + + var sellSetupListStream = new MemoryStream(); + baBinaryFormatter.Serialize(sellSetupListStream, item.SellSetupList); + sellSetupListStream.Position = 0; + + var searchResultListStream = new MemoryStream(); + baBinaryFormatter.Serialize(searchResultListStream, item.SearchResultList); + searchResultListStream.Position = 0; + + + cmd.Parameters.Add("@BuySetupList", SqlDbType.VarBinary, (int)buySetupListStream.Length).Value = buySetupListStream.ToArray(); + cmd.Parameters.Add("@SellSetupList", SqlDbType.VarBinary, (int)sellSetupListStream.Length).Value = sellSetupListStream.ToArray(); + cmd.Parameters.Add("@SearchResultList", SqlDbType.VarBinary, (int)searchResultListStream.Length).Value = searchResultListStream.ToArray(); + conn.Open(); + using (rdr = cmd.ExecuteReader()) + { + } + } + + conn.Close(); + } + } + catch (Exception e) + { + Console.WriteLine(" ============= exception ==============="); + Console.WriteLine(e.Message); + if (rdr != null) + rdr.Close(); + if (conn != null) + conn.Close(); + } + } + + /// + /// Insert SavedAnalysisData + /// + /// + /// + public static void QueryUpdateExcuter_SavedAnalysisData(SavedAnalysisData savedAnalysisData, SavedResultData savedResultData) + { + var baBinaryFormatter = new BinaryFormatter(); + + var sqlQuery = DbServiceFunctions.InsertSavedAnalysisDataQuery(savedAnalysisData, savedResultData); + var strDBCon = CommonProperty.DbConnectionResultData; + + SqlConnection conn = null; + SqlDataReader rdr = null; + + try + { + using (conn = new SqlConnection(strDBCon)) + { + using (var cmd = new SqlCommand(sqlQuery, conn)) + { + var analysisDataListStream = new MemoryStream(); + baBinaryFormatter.Serialize(analysisDataListStream, savedAnalysisData.AnalysisDataList); + analysisDataListStream.Position = 0; + + cmd.Parameters.Add("@AnalysisDataList", SqlDbType.VarBinary, (int)analysisDataListStream.Length).Value = analysisDataListStream.ToArray(); + + conn.Open(); + using (rdr = cmd.ExecuteReader()) + { + } + } + + conn.Close(); + } + } + catch (Exception e) + { + Console.WriteLine(" ============= exception ==============="); + Console.WriteLine(e.Message); + if (rdr != null) + rdr.Close(); + if (conn != null) + conn.Close(); + } + } } } diff --git a/Million/DbMangement/DBServiceFunctions.cs b/Million/DbMangement/DBServiceFunctions.cs index ac0a39b..3257ba0 100644 --- a/Million/DbMangement/DBServiceFunctions.cs +++ b/Million/DbMangement/DBServiceFunctions.cs @@ -7,11 +7,64 @@ using System.Threading; using System.Windows.Forms; using System.Threading.Tasks; using Million.Manager; +using Million.SaveData; namespace Million.DbManagement { public static class DbServiceFunctions { + /// + /// Create SavedAnalysisData table + /// + /// + public static string CreateSavedAnalysisDataTableQuery() + { + return @"if not exists (select * from sysobjects where name='SavedAnalysisData' and xtype='U') + create table " + "\"SavedAnalysisData\"" + @"( + Id int IDENTITY (1,1) NOT NULL, + SavedResultDataId int NOT NULL, + Name nvarchar(50) NOT NULL, + TreeListFilterString nvarchar(50) NOT NULL, + AnalysisDataList varbinary(MAX) NOT NULL, + Description nvarchar(MAX) NULL, + ResultDataCount int NOT NULL, + FirstProfitRate float NOT NULL, + FirstWinRate float NOT NULL, + SavedDateTime datetime NOT NULL + )"; + } + /// + /// Create SavedResultData Table + /// + /// + public static string CreateSavedResultDataTableQuery() + { + return @"if not exists (select * from sysobjects where name='SavedResultData' and xtype='U') + create table " + "\"SavedResultData\"" + @"( + Id int IDENTITY (1,1) NOT NULL, + ParentId int NULL, + Name nvarchar(50) NOT NULL, + StartDateTime datetime NOT NULL, + EndDateTime datetime NOT NULL, + SavedDateTime datetime NOT NULL, + BuySetupList varbinary(MAX) NULL, + SellSetupList varbinary(MAX) NULL, + BuyRegularExpression varchar(100) NOT NULL, + SellRegularExpression varchar(100) NOT NULL, + SearchResultList varbinary(MAX) NULL, + ResultDataCount int NOT NULL, + WinRate float NOT NULL, + ProfitRate float NOT NULL, + FirstProfitRate float NOT NULL, + FirstWinRate float NOT NULL, + ExchangePlace nvarchar(50) NOT NULL, + Type nvarchar(50) NOT NULL, + SaveResultType nvarchar(50) NOT NULL, + Description nvarchar(MAX) NULL + + )"; + } + /// /// DB Market 테이블 생성 /// @@ -182,6 +235,8 @@ namespace Million.DbManagement return returnData; } + + /// /// DB에서 각 Market 별 가장 최신, 오래된 데이터 한개씩 가져오기 /// @@ -386,6 +441,117 @@ namespace Million.DbManagement Console.WriteLine("Completed Set Candle Data of Table : " + tableName + ", Times : " + sw.Elapsed.ToString()); } return flag; - } + } + + /// + /// Get Insert SavedResultData Query + /// + /// + /// + public static string InsertSavedResultDataQuery(SavedResultData item) + { + + var str = string.Format(@"INSERT INTO [ResultData].[dbo].[SavedResultData] + ( + [ParentId] + ,[Name] + ,[StartDateTime] + ,[EndDateTime] + ,[SavedDateTime] + ,[BuySetupList] + ,[SellSetupList] + ,[SearchResultList] + ,[BuyRegularExpression] + ,[SellRegularExpression] + ,[ResultDataCount] + ,[WinRate] + ,[ProfitRate] + ,[FirstProfitRate] + ,[FirstWinRate] + ,[ExchangePlace] + ,[Type] + ,[SaveResultType] + ,[Description] + )VALUES(NULL, + '{0}', + '{1}', + '{2}', + '{3}', + @BuySetupList, + @SellSetupList, + @SearchResultList, + '{4}', + '{5}', + '{6}', + '{7}', + '{8}', + '{9}', + '{10}', + '{11}', + '{12}', + '{13}', + '{14}' + );", + item.ParentId, + item.Name, + item.StartDateTime.ToString("yyyy-MM-dd HH:mm:ss"), + item.EndDateTime.ToString("yyyy-MM-dd HH:mm:ss"), + item.SavedDateTime.ToString("yyyy-MM-dd HH:mm:ss"), + item.BuyRegularExpression, + item.SellRegularExpression, + item.ResultDataCount.ToString(), + item.WinRate, + item.ProfitRate, + item.FirstProfitRate, + item.FirstWinRate, + item.ExchangePlace, + item.Type, + item.SaveResultType, + item.Description + ); + return str; + } + + /// + /// + /// + /// + /// + /// + public static string InsertSavedAnalysisDataQuery(SavedAnalysisData savedAnalysisData, SavedResultData savedResultData) + { + var str = string.Format(@"INSERT INTO [ResultData].[dbo].[SavedResultData] + ( + [SavedResultDataId] + ,[Name] + ,[TreeListFilterString] + ,[AnalysisDataList] + ,[Description] + ,[ResultDataCount] + ,[FirstProfitRate] + ,[FirstWinRate] + ,[SavedDateTime] + )VALUES( + '{0}', + '{1}', + '{2}', + @AnalysisDataList, + '{3}', + '{4}', + '{5}', + '{6}', + '{7}' + );", + savedResultData.Id, + savedAnalysisData.Name, + savedAnalysisData.TreeListFilterString, + savedAnalysisData.Description, + savedAnalysisData.ResultDataCount, + savedAnalysisData.FirstProfitRate, + savedAnalysisData.FirstWinRate, + savedAnalysisData.SavedTime.ToString("yyyy-MM-dd HH:mm:ss") + ); + return str; + } } } diff --git a/Million/SaveData/SavedAnalysisData.cs b/Million/SaveData/SavedAnalysisData.cs index b75a0af..f7dbd80 100644 --- a/Million/SaveData/SavedAnalysisData.cs +++ b/Million/SaveData/SavedAnalysisData.cs @@ -10,6 +10,8 @@ namespace Million.SaveData [Serializable] public class SavedAnalysisData { + public int Id { get; set; } + public string Name { get; set; } // 적용된 필터 스트링 public string TreeListFilterString { get; set; } diff --git a/Million/SaveData/SavedResultData.cs b/Million/SaveData/SavedResultData.cs index 845edf7..94d08da 100644 --- a/Million/SaveData/SavedResultData.cs +++ b/Million/SaveData/SavedResultData.cs @@ -13,6 +13,14 @@ namespace Million.SaveData [Serializable] public class SavedResultData { + public int Id { get; set; } + public int? ParentId { get; set; } + public string Name { get; set; } + public string ExchangePlace { get; set; } + + public string Type { get; set; } + public string SaveResultType { get; set; } + public string Description { get; set; } // 기간 public DateTime StartDateTime { get; set; } public DateTime EndDateTime { get; set; } @@ -22,7 +30,7 @@ namespace Million.SaveData // 조건 설정 public List BuySetupList { get; set; } - public List SellSetupList { get; set; } + public List SellSetupList { get; set; } // 정규식 (Buy) public string BuyRegularExpression { get; set; } @@ -61,6 +69,11 @@ namespace Million.SaveData { var clone = new SavedResultData { + Id = Id, + ExchangePlace = ExchangePlace, + Type = Type, + SaveResultType = SaveResultType, + Description = Description, StartDateTime = StartDateTime, EndDateTime = EndDateTime, SavedDateTime = SavedDateTime, @@ -74,9 +87,5 @@ namespace Million.SaveData }; return clone; } - } - - - }