From 1fb5d2aeb437372426950869ae719212e56f8ca0 Mon Sep 17 00:00:00 2001 From: jwlee Date: Mon, 15 May 2023 13:03:33 +0900 Subject: [PATCH] =?UTF-8?q?=ED=85=8C=EC=8A=A4=ED=8A=B8=20=ED=8F=BC=20?= =?UTF-8?q?=EA=B5=AC=ED=98=84=20=EC=A4=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ResultViewerForm.Designer.cs | 21 +++- .../HunterSubForm/ResultViewerForm.cs | 40 +++++++- .../HunterSubForm/TestBoardForm.Designer.cs | 68 +++++++++---- Million Hunter/HunterSubForm/TestBoardForm.cs | 98 ++++++++++++++++++- Million/Data/AnalysisData.cs | 4 + 5 files changed, 199 insertions(+), 32 deletions(-) diff --git a/Million Hunter/HunterSubForm/ResultViewerForm.Designer.cs b/Million Hunter/HunterSubForm/ResultViewerForm.Designer.cs index d55fc39..fb4266e 100644 --- a/Million Hunter/HunterSubForm/ResultViewerForm.Designer.cs +++ b/Million Hunter/HunterSubForm/ResultViewerForm.Designer.cs @@ -76,6 +76,7 @@ namespace Million.HunterSubForm this.simpleButton_resetData = new DevExpress.XtraEditors.SimpleButton(); this.simpleButton_LoadAnalysisResultData = new DevExpress.XtraEditors.SimpleButton(); this.simpleButton_SavaAnalysisData = new DevExpress.XtraEditors.SimpleButton(); + this.treeListColumn_PurchasedCount = new DevExpress.XtraTreeList.Columns.TreeListColumn(); ((System.ComponentModel.ISupportInitialize)(this.panelControl_IndicatorCondition)).BeginInit(); this.panelControl_IndicatorCondition.SuspendLayout(); this.groupBox_.SuspendLayout(); @@ -388,17 +389,18 @@ namespace Million.HunterSubForm this.treeListColumn_SellValue, this.treeListColumn_WinFlag, this.treeListColumn_EarningRate, + this.treeListColumn_PurchasedCount, this.treeListColumn_AnalysisDescrption, this.treeListColumn_OriginalData}); this.treeList_ResultData.Cursor = System.Windows.Forms.Cursors.Default; this.treeList_ResultData.Dock = System.Windows.Forms.DockStyle.Fill; - this.treeList_ResultData.Location = new System.Drawing.Point(0, 275); + this.treeList_ResultData.Location = new System.Drawing.Point(0, 301); this.treeList_ResultData.Name = "treeList_ResultData"; this.treeList_ResultData.OptionsFilter.ShowAllValuesInFilterPopup = true; this.treeList_ResultData.OptionsSelection.MultiSelect = true; this.treeList_ResultData.RepositoryItems.AddRange(new DevExpress.XtraEditors.Repository.RepositoryItem[] { this.repositoryItemCheckEdit_Inclustion}); - this.treeList_ResultData.Size = new System.Drawing.Size(1271, 636); + this.treeList_ResultData.Size = new System.Drawing.Size(1271, 610); this.treeList_ResultData.TabIndex = 5; this.treeList_ResultData.KeyUp += new System.Windows.Forms.KeyEventHandler(this.treeList_ResultData_KeyUp); this.treeList_ResultData.MouseDoubleClick += new System.Windows.Forms.MouseEventHandler(this.treeList_ResultData_MouseDoubleClick); @@ -600,7 +602,7 @@ namespace Million.HunterSubForm this.treeListColumn_AnalysisDescrption.FieldName = "Description"; this.treeListColumn_AnalysisDescrption.Name = "treeListColumn_AnalysisDescrption"; this.treeListColumn_AnalysisDescrption.Visible = true; - this.treeListColumn_AnalysisDescrption.VisibleIndex = 11; + this.treeListColumn_AnalysisDescrption.VisibleIndex = 12; this.treeListColumn_AnalysisDescrption.Width = 375; // // treeListColumn_OriginalData @@ -622,7 +624,7 @@ namespace Million.HunterSubForm this.panelControl1.Dock = System.Windows.Forms.DockStyle.Top; this.panelControl1.Location = new System.Drawing.Point(0, 231); this.panelControl1.Name = "panelControl1"; - this.panelControl1.Size = new System.Drawing.Size(1271, 44); + this.panelControl1.Size = new System.Drawing.Size(1271, 70); this.panelControl1.TabIndex = 4; // // simpleButton_TestBoard @@ -639,7 +641,7 @@ namespace Million.HunterSubForm // labelControl_WinRateProfitRate // this.labelControl_WinRateProfitRate.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); - this.labelControl_WinRateProfitRate.Location = new System.Drawing.Point(369, 15); + this.labelControl_WinRateProfitRate.Location = new System.Drawing.Point(652, 50); this.labelControl_WinRateProfitRate.Name = "labelControl_WinRateProfitRate"; this.labelControl_WinRateProfitRate.Size = new System.Drawing.Size(19, 14); this.labelControl_WinRateProfitRate.TabIndex = 2; @@ -705,6 +707,14 @@ namespace Million.HunterSubForm this.simpleButton_SavaAnalysisData.Text = "결과 저장"; this.simpleButton_SavaAnalysisData.Click += new System.EventHandler(this.simpleButton_SavaAnalysisData_Click); // + // treeListColumn_PurchasedCount + // + this.treeListColumn_PurchasedCount.Caption = "구종목 보유 수"; + this.treeListColumn_PurchasedCount.FieldName = "PurchasedCount"; + this.treeListColumn_PurchasedCount.Name = "treeListColumn_PurchasedCount"; + this.treeListColumn_PurchasedCount.Visible = true; + this.treeListColumn_PurchasedCount.VisibleIndex = 11; + // // ResultViewerForm // this.AutoScaleDimensions = new System.Drawing.SizeF(7F, 14F); @@ -796,5 +806,6 @@ namespace Million.HunterSubForm private DevExpress.XtraEditors.SimpleButton simpleButton_WinRateProfitRate; public DevExpress.XtraEditors.SimpleButton simpleButton_TestBoard; public DevExpress.XtraTreeList.TreeList treeList_ResultData; + private DevExpress.XtraTreeList.Columns.TreeListColumn treeListColumn_PurchasedCount; } } \ No newline at end of file diff --git a/Million Hunter/HunterSubForm/ResultViewerForm.cs b/Million Hunter/HunterSubForm/ResultViewerForm.cs index cfb4c76..f596aaa 100644 --- a/Million Hunter/HunterSubForm/ResultViewerForm.cs +++ b/Million Hunter/HunterSubForm/ResultViewerForm.cs @@ -92,10 +92,27 @@ namespace Million.HunterSubForm _analysisDatas.Add(analysisData); } + var evaeragePurchasedCount = 0; + + // 보유한 종목 수 계산 + foreach (var item in _analysisDatas) + { + // Ts <= Os <= Te + // Ts <= Oe <= Te + var count = _analysisDatas.Count(target => (target.StartDate <= item.StartDate && target.EndDate >= item.StartDate) || + (target.StartDate <= item.EndDate && target.EndDate >= item.EndDate) + ); + + item.PurchasedCount = count; + evaeragePurchasedCount += count; + } + + evaeragePurchasedCount /= _analysisDatas.Count(); + winRate = winRate * 100 / _analysisDatas.Count(); - labelControl_WinRateProfitRate.Text = string.Format("승률 : {0:0.00} % 수익률 : {1:0.00} % 개수 : {2}", - double.Parse(winRate.ToString()), double.Parse(profitRate.ToString()), _analysisDatas.Count()); + labelControl_WinRateProfitRate.Text = string.Format("승률 : {0:0.00} % 수익률 : {1:0.00} % 개수 : {2} 평균 보유 수 : {3}" , + double.Parse(winRate.ToString()), double.Parse(profitRate.ToString()), _analysisDatas.Count(), evaeragePurchasedCount); treeList_ResultData.DataSource = _analysisDatas; treeList_ResultData.RefreshDataSource(); @@ -228,6 +245,8 @@ namespace Million.HunterSubForm double winRate = 0; // 평균 수익률 계산하기 double profitRate = 0; + // 종목 보유 수 + var evaeragePurchasedCount = 0; // 값이 있으면 저장 if (nodeList != null && nodeList.Count() > 0) @@ -242,14 +261,27 @@ namespace Million.HunterSubForm // 수익률 계산하기 profitRate += data.EarningRate; + + // 종목 보유 수 계산하기 + // Ts <= Os <= Te + // Ts <= Oe <= Te + + var count = nodeList.Count(target => (Convert.ToDateTime(target["StartDate"]) <= data.StartDate && Convert.ToDateTime(target["EndDate"]) >= data.StartDate) || + (Convert.ToDateTime(target["StartDate"]) <= data.EndDate && Convert.ToDateTime(target["EndDate"]) >= data.EndDate) + ); + + evaeragePurchasedCount += count; + data.PurchasedCount = count; } winRate = winRate * 100 / nodeList.Count(); + evaeragePurchasedCount /= nodeList.Count(); } - labelControl_WinRateProfitRate.Text = string.Format("승률 : {0:0.00} % 수익률 : {1:0.00} % 개수 : {2}", - double.Parse(winRate.ToString()), double.Parse(profitRate.ToString()), nodeList.Count()); + labelControl_WinRateProfitRate.Text = string.Format("승률 : {0:0.00} % 수익률 : {1:0.00} % 개수 : {2} 평균 보유 수 : {3}", + double.Parse(winRate.ToString()), double.Parse(profitRate.ToString()), nodeList.Count(), evaeragePurchasedCount); } + private void treeList_ResultData_KeyUp(object sender, KeyEventArgs e) { switch (e.KeyCode) diff --git a/Million Hunter/HunterSubForm/TestBoardForm.Designer.cs b/Million Hunter/HunterSubForm/TestBoardForm.Designer.cs index d9cc598..f4167a3 100644 --- a/Million Hunter/HunterSubForm/TestBoardForm.Designer.cs +++ b/Million Hunter/HunterSubForm/TestBoardForm.Designer.cs @@ -32,21 +32,25 @@ namespace Million_Hunter.HunterSubForm this.simpleButton_FullInsertCandle = new DevExpress.XtraEditors.SimpleButton(); this.groupBox1 = new System.Windows.Forms.GroupBox(); this.groupBox2 = new System.Windows.Forms.GroupBox(); + this.checkEdit_구매전봉기준가중이동평균5봉이40봉크로스이후구매 = new DevExpress.XtraEditors.CheckEdit(); + this.checkEdit_구름떼상한선하락시판매 = new DevExpress.XtraEditors.CheckEdit(); this.checkEdit_구매이전봉볼린저40_1이하 = new DevExpress.XtraEditors.CheckEdit(); this.checkEdit_이전봉40_2볼린저이하 = new DevExpress.XtraEditors.CheckEdit(); this.groupBox3 = new System.Windows.Forms.GroupBox(); this.simpleButton_Reset = new DevExpress.XtraEditors.SimpleButton(); this.progressBar1 = new System.Windows.Forms.ProgressBar(); this.simpleButton_찬 = new DevExpress.XtraEditors.SimpleButton(); - this.checkEdit_구름떼상한선하락시판매 = new DevExpress.XtraEditors.CheckEdit(); - this.checkEdit_구매전봉기준가중이동평균5봉이40봉크로스이후구매 = new DevExpress.XtraEditors.CheckEdit(); + this.checkEdit_종목보유수별수익률계산 = new DevExpress.XtraEditors.CheckEdit(); + this.textEdit_종목보유수별수익률계산 = new DevExpress.XtraEditors.TextEdit(); this.groupBox1.SuspendLayout(); this.groupBox2.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.checkEdit_구매전봉기준가중이동평균5봉이40봉크로스이후구매.Properties)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.checkEdit_구름떼상한선하락시판매.Properties)).BeginInit(); ((System.ComponentModel.ISupportInitialize)(this.checkEdit_구매이전봉볼린저40_1이하.Properties)).BeginInit(); ((System.ComponentModel.ISupportInitialize)(this.checkEdit_이전봉40_2볼린저이하.Properties)).BeginInit(); this.groupBox3.SuspendLayout(); - ((System.ComponentModel.ISupportInitialize)(this.checkEdit_구름떼상한선하락시판매.Properties)).BeginInit(); - ((System.ComponentModel.ISupportInitialize)(this.checkEdit_구매전봉기준가중이동평균5봉이40봉크로스이후구매.Properties)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.checkEdit_종목보유수별수익률계산.Properties)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.textEdit_종목보유수별수익률계산.Properties)).BeginInit(); this.SuspendLayout(); // // simpleButton_FullInsertCandle @@ -72,6 +76,8 @@ namespace Million_Hunter.HunterSubForm // // groupBox2 // + this.groupBox2.Controls.Add(this.textEdit_종목보유수별수익률계산); + this.groupBox2.Controls.Add(this.checkEdit_종목보유수별수익률계산); this.groupBox2.Controls.Add(this.checkEdit_구매전봉기준가중이동평균5봉이40봉크로스이후구매); this.groupBox2.Controls.Add(this.checkEdit_구름떼상한선하락시판매); this.groupBox2.Controls.Add(this.checkEdit_구매이전봉볼린저40_1이하); @@ -83,6 +89,24 @@ namespace Million_Hunter.HunterSubForm this.groupBox2.TabStop = false; this.groupBox2.Text = "지표"; // + // checkEdit_구매전봉기준가중이동평균5봉이40봉크로스이후구매 + // + this.checkEdit_구매전봉기준가중이동평균5봉이40봉크로스이후구매.Location = new System.Drawing.Point(19, 47); + this.checkEdit_구매전봉기준가중이동평균5봉이40봉크로스이후구매.Name = "checkEdit_구매전봉기준가중이동평균5봉이40봉크로스이후구매"; + this.checkEdit_구매전봉기준가중이동평균5봉이40봉크로스이후구매.Properties.Caption = "구매 전봉 기준 가중이동평균 5봉이 40봉 크로스 이후 구매"; + this.checkEdit_구매전봉기준가중이동평균5봉이40봉크로스이후구매.Size = new System.Drawing.Size(310, 19); + this.checkEdit_구매전봉기준가중이동평균5봉이40봉크로스이후구매.TabIndex = 3; + this.checkEdit_구매전봉기준가중이동평균5봉이40봉크로스이후구매.CheckedChanged += new System.EventHandler(this.checkEdit_common_CheckedChanged); + // + // checkEdit_구름떼상한선하락시판매 + // + this.checkEdit_구름떼상한선하락시판매.Location = new System.Drawing.Point(379, 22); + this.checkEdit_구름떼상한선하락시판매.Name = "checkEdit_구름떼상한선하락시판매"; + this.checkEdit_구름떼상한선하락시판매.Properties.Caption = "구름떼 상한선 하락시 판매 (1%)"; + this.checkEdit_구름떼상한선하락시판매.Size = new System.Drawing.Size(179, 19); + this.checkEdit_구름떼상한선하락시판매.TabIndex = 2; + this.checkEdit_구름떼상한선하락시판매.CheckedChanged += new System.EventHandler(this.checkEdit_common_CheckedChanged); + // // checkEdit_구매이전봉볼린저40_1이하 // this.checkEdit_구매이전봉볼린저40_1이하.Location = new System.Drawing.Point(204, 22); @@ -118,6 +142,7 @@ namespace Million_Hunter.HunterSubForm this.simpleButton_Reset.Size = new System.Drawing.Size(109, 32); this.simpleButton_Reset.TabIndex = 0; this.simpleButton_Reset.Text = "Reset"; + this.simpleButton_Reset.Click += new System.EventHandler(this.simpleButton_Reset_Click); // // progressBar1 // @@ -136,23 +161,22 @@ namespace Million_Hunter.HunterSubForm this.simpleButton_찬.Text = "찬테스트"; this.simpleButton_찬.Click += new System.EventHandler(this.simpleButton_찬_Click); // - // checkEdit_구름떼상한선하락시판매 + // checkEdit_종목보유수별수익률계산 // - this.checkEdit_구름떼상한선하락시판매.Location = new System.Drawing.Point(379, 22); - this.checkEdit_구름떼상한선하락시판매.Name = "checkEdit_구름떼상한선하락시판매"; - this.checkEdit_구름떼상한선하락시판매.Properties.Caption = "구름떼 상한선 하락시 판매 (1%)"; - this.checkEdit_구름떼상한선하락시판매.Size = new System.Drawing.Size(179, 19); - this.checkEdit_구름떼상한선하락시판매.TabIndex = 2; - this.checkEdit_구름떼상한선하락시판매.CheckedChanged += new System.EventHandler(this.checkEdit_common_CheckedChanged); + this.checkEdit_종목보유수별수익률계산.Location = new System.Drawing.Point(19, 72); + this.checkEdit_종목보유수별수익률계산.Name = "checkEdit_종목보유수별수익률계산"; + this.checkEdit_종목보유수별수익률계산.Properties.Caption = "종목 보유수 별 수익률 계산"; + this.checkEdit_종목보유수별수익률계산.Size = new System.Drawing.Size(310, 19); + this.checkEdit_종목보유수별수익률계산.TabIndex = 3; + this.checkEdit_종목보유수별수익률계산.CheckedChanged += new System.EventHandler(this.checkEdit_common_CheckedChanged); // - // checkEdit_구매전봉기준가중이동평균5봉이40봉크로스이후구매 + // textEdit_종목보유수별수익률계산 // - this.checkEdit_구매전봉기준가중이동평균5봉이40봉크로스이후구매.Location = new System.Drawing.Point(19, 47); - this.checkEdit_구매전봉기준가중이동평균5봉이40봉크로스이후구매.Name = "checkEdit_구매전봉기준가중이동평균5봉이40봉크로스이후구매"; - this.checkEdit_구매전봉기준가중이동평균5봉이40봉크로스이후구매.Properties.Caption = "구매 전봉 기준 가중이동평균 5봉이 40봉 크로스 이후 구매"; - this.checkEdit_구매전봉기준가중이동평균5봉이40봉크로스이후구매.Size = new System.Drawing.Size(310, 19); - this.checkEdit_구매전봉기준가중이동평균5봉이40봉크로스이후구매.TabIndex = 3; - this.checkEdit_구매전봉기준가중이동평균5봉이40봉크로스이후구매.CheckedChanged += new System.EventHandler(this.checkEdit_common_CheckedChanged); + this.textEdit_종목보유수별수익률계산.EditValue = "1"; + this.textEdit_종목보유수별수익률계산.Location = new System.Drawing.Point(175, 72); + this.textEdit_종목보유수별수익률계산.Name = "textEdit_종목보유수별수익률계산"; + this.textEdit_종목보유수별수익률계산.Size = new System.Drawing.Size(42, 20); + this.textEdit_종목보유수별수익률계산.TabIndex = 4; // // TestBoardForm // @@ -168,11 +192,13 @@ namespace Million_Hunter.HunterSubForm this.Text = "TestBoard"; this.groupBox1.ResumeLayout(false); this.groupBox2.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.checkEdit_구매전봉기준가중이동평균5봉이40봉크로스이후구매.Properties)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.checkEdit_구름떼상한선하락시판매.Properties)).EndInit(); ((System.ComponentModel.ISupportInitialize)(this.checkEdit_구매이전봉볼린저40_1이하.Properties)).EndInit(); ((System.ComponentModel.ISupportInitialize)(this.checkEdit_이전봉40_2볼린저이하.Properties)).EndInit(); this.groupBox3.ResumeLayout(false); - ((System.ComponentModel.ISupportInitialize)(this.checkEdit_구름떼상한선하락시판매.Properties)).EndInit(); - ((System.ComponentModel.ISupportInitialize)(this.checkEdit_구매전봉기준가중이동평균5봉이40봉크로스이후구매.Properties)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.checkEdit_종목보유수별수익률계산.Properties)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.textEdit_종목보유수별수익률계산.Properties)).EndInit(); this.ResumeLayout(false); } @@ -191,5 +217,7 @@ namespace Million_Hunter.HunterSubForm private DevExpress.XtraEditors.CheckEdit checkEdit_구매이전봉볼린저40_1이하; private DevExpress.XtraEditors.CheckEdit checkEdit_구매전봉기준가중이동평균5봉이40봉크로스이후구매; private DevExpress.XtraEditors.CheckEdit checkEdit_구름떼상한선하락시판매; + private DevExpress.XtraEditors.TextEdit textEdit_종목보유수별수익률계산; + private DevExpress.XtraEditors.CheckEdit checkEdit_종목보유수별수익률계산; } } \ No newline at end of file diff --git a/Million Hunter/HunterSubForm/TestBoardForm.cs b/Million Hunter/HunterSubForm/TestBoardForm.cs index c8adfe3..3bb244d 100644 --- a/Million Hunter/HunterSubForm/TestBoardForm.cs +++ b/Million Hunter/HunterSubForm/TestBoardForm.cs @@ -358,10 +358,102 @@ namespace Million_Hunter.HunterSubForm MessageBox.Show(string.Format("승률 : {0:0.00} % 수익률 : {1:0.00} % 개수 : {2}", double.Parse(winRate.ToString()), double.Parse(profitRate.ToString()), allCount.ToString()) ); } - - parentForm.treeList_ResultData.RefreshDataSource(); - parentForm.CalcurateProfitAndWinRate(); + if (checkEdit_구매전봉기준가중이동평균5봉이40봉크로스이후구매.Checked) + { + var Interval_5 = 5; + var Interval_40 = 40; + + // 분모 구하기 + var 분모5일 = 0; + var 분모40일 = 0; + for (int i = 1; i <= Interval_5; i++) 분모5일 += i; + for (int i=1; i<=Interval_40; i++) 분모40일 += i; + + var ttt = parentForm._totalIndicator.First().MCandleTimeType; + + foreach (var analysisData in parentForm._analysisDatas) + { + // 현재 시간 데이터 포함 + var 구매이전봉_5일전거래시간 = changeDatetimeFormat(analysisData.StartDate, -Interval_5); + var 구매이전봉_40일전거래시간 = changeDatetimeFormat(analysisData.StartDate, -Interval_40); + var 구매이전봉_거래시간 = changeDatetimeFormat(analysisData.StartDate, -1); + + var 가중이동평균5일 = 0.0; + var 가중이동평균40일 = 0.0; + + + int count_40 = Interval_40; + int count_5 = Interval_5; + var curDateTime = 구매이전봉_거래시간; + while (curDateTime >= 구매이전봉_40일전거래시간) + { + var candleData = analysisData.CandleDatas[MCandleTimeType].Find(item => item.DateTime == curDateTime); + + var 거래량 = 0.0; + + // 데이터가 없으면 거래량 0으로 사용 + if (candleData == null) 거래량 = 0; + else 거래량 = Convert.ToDouble(candleData.MoneyVolume); + + // 5일치 누적 및 계산이 끝났으면 그만 계산 + if (curDateTime >= 구매이전봉_5일전거래시간) + { + 가중이동평균5일 += count_5 * 거래량; + } + // 5일 계산 + if (curDateTime == 구매이전봉_5일전거래시간) + { + 가중이동평균5일 /= 분모5일; + // 5일 계산 + 거래량 = 0.0; + } + + // 40일 누적 + 가중이동평균40일 += count_40 * 거래량; + // 40일 계산 + if (curDateTime == 구매이전봉_40일전거래시간) + { + 가중이동평균40일 /= 분모40일; + } + + curDateTime = changeDatetimeFormat(curDateTime, -1); + count_40--; + count_5--; + } + + // 제외된 조건인 아닌 경우 (만족 조건 중에서만 검색) + if (analysisData.Inclusion) + { + var result = false; + if (가중이동평균5일 > 가중이동평균40일) + { + result = true; + analysisData.Inclusion = true; + } + else + { + result = false; + analysisData.Inclusion = false; + } + + analysisData.Description = string.Format("[{0},5일:{1:0.0},40일:{2:0.0}]",result, 가중이동평균5일, 가중이동평균40일); + } + + } + + if (checkEdit_종목보유수별수익률계산.Checked) + { + var coinCount = Convert.ToInt32(textEdit_종목보유수별수익률계산.Text); + + //inCount = + + + } + + parentForm.CalcurateProfitAndWinRate(); + parentForm.treeList_ResultData.RefreshDataSource(); + } } diff --git a/Million/Data/AnalysisData.cs b/Million/Data/AnalysisData.cs index cdb531a..ca94096 100644 --- a/Million/Data/AnalysisData.cs +++ b/Million/Data/AnalysisData.cs @@ -46,6 +46,10 @@ namespace Million.Data // 기타 기입 내용 public string Description { get; set; } + // 현재 시간으로 구매된 종목 개수 + [field: NonSerialized] + public int PurchasedCount { get; set; } + [field: NonSerialized] public Dictionary> CandleDatas { get; set; }