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