diff --git a/Million Hunter/HunterSubForm/TestBoardForm.Designer.cs b/Million Hunter/HunterSubForm/TestBoardForm.Designer.cs
index fe3b486..d9cc598 100644
--- a/Million Hunter/HunterSubForm/TestBoardForm.Designer.cs
+++ b/Million Hunter/HunterSubForm/TestBoardForm.Designer.cs
@@ -38,11 +38,15 @@ namespace Million_Hunter.HunterSubForm
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.groupBox1.SuspendLayout();
this.groupBox2.SuspendLayout();
((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();
this.SuspendLayout();
//
// simpleButton_FullInsertCandle
@@ -68,6 +72,8 @@ namespace Million_Hunter.HunterSubForm
//
// groupBox2
//
+ this.groupBox2.Controls.Add(this.checkEdit_구매전봉기준가중이동평균5봉이40봉크로스이후구매);
+ this.groupBox2.Controls.Add(this.checkEdit_구름떼상한선하락시판매);
this.groupBox2.Controls.Add(this.checkEdit_구매이전봉볼린저40_1이하);
this.groupBox2.Controls.Add(this.checkEdit_이전봉40_2볼린저이하);
this.groupBox2.Location = new System.Drawing.Point(12, 90);
@@ -103,14 +109,15 @@ namespace Million_Hunter.HunterSubForm
this.groupBox3.Size = new System.Drawing.Size(154, 63);
this.groupBox3.TabIndex = 4;
this.groupBox3.TabStop = false;
- this.groupBox3.Text = "데이터 채우기";
+ this.groupBox3.Text = "관리";
//
// simpleButton_Reset
//
- this.simpleButton_Reset.Location = new System.Drawing.Point(0, 0);
+ this.simpleButton_Reset.Location = new System.Drawing.Point(6, 21);
this.simpleButton_Reset.Name = "simpleButton_Reset";
- this.simpleButton_Reset.Size = new System.Drawing.Size(75, 23);
+ this.simpleButton_Reset.Size = new System.Drawing.Size(109, 32);
this.simpleButton_Reset.TabIndex = 0;
+ this.simpleButton_Reset.Text = "Reset";
//
// progressBar1
//
@@ -129,6 +136,24 @@ namespace Million_Hunter.HunterSubForm
this.simpleButton_찬.Text = "찬테스트";
this.simpleButton_찬.Click += new System.EventHandler(this.simpleButton_찬_Click);
//
+ // 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_구매전봉기준가중이동평균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);
+ //
// TestBoardForm
//
this.AutoScaleDimensions = new System.Drawing.SizeF(7F, 14F);
@@ -136,6 +161,7 @@ namespace Million_Hunter.HunterSubForm
this.ClientSize = new System.Drawing.Size(853, 297);
this.Controls.Add(this.progressBar1);
this.Controls.Add(this.simpleButton_찬);
+ this.Controls.Add(this.groupBox3);
this.Controls.Add(this.groupBox2);
this.Controls.Add(this.groupBox1);
this.Name = "TestBoardForm";
@@ -145,6 +171,8 @@ namespace Million_Hunter.HunterSubForm
((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();
this.ResumeLayout(false);
}
@@ -161,5 +189,7 @@ namespace Million_Hunter.HunterSubForm
private System.Windows.Forms.GroupBox groupBox3;
private DevExpress.XtraEditors.SimpleButton simpleButton_Reset;
private DevExpress.XtraEditors.CheckEdit checkEdit_구매이전봉볼린저40_1이하;
+ private DevExpress.XtraEditors.CheckEdit checkEdit_구매전봉기준가중이동평균5봉이40봉크로스이후구매;
+ 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 329e132..85157c7 100644
--- a/Million Hunter/HunterSubForm/TestBoardForm.cs
+++ b/Million Hunter/HunterSubForm/TestBoardForm.cs
@@ -195,28 +195,9 @@ namespace Million_Hunter.HunterSubForm
var 구매이전봉 = startDate;
//차트 Date Time 설정하기
- var StartDateInterval = 1;
+ var StartDateInterval = -1;
- switch (MCandleTimeType)
- {
- case CommonProperty.MCandleTimeType.H1:
- 구매이전봉 = Convert.ToDateTime(startDate.ToString("yyyy-MM-dd HH:00")) - new TimeSpan(0, StartDateInterval, 0, 0);
- break;
- case CommonProperty.MCandleTimeType.H4:
- 구매이전봉 = Convert.ToDateTime(startDate.ToString("yyyy-MM-dd HH:00")) - new TimeSpan(0, StartDateInterval * 4, 0, 0);
- break;
- case CommonProperty.MCandleTimeType.M1:
- break;
- case CommonProperty.MCandleTimeType.M10:
- case CommonProperty.MCandleTimeType.M15:
- case CommonProperty.MCandleTimeType.M3:
- case CommonProperty.MCandleTimeType.M30:
- case CommonProperty.MCandleTimeType.M5:
- break;
- case CommonProperty.MCandleTimeType.D1:
- 구매이전봉 = Convert.ToDateTime(endDate.ToString("yyyy-MM-dd")) - new TimeSpan(StartDateInterval, 0, 0, 0);
- break;
- }
+ 구매이전봉 = changeDatetimeFormat(구매이전봉, StartDateInterval);
var candleData = analysisData.CandleDatas[MCandleTimeType].Find(item => item.DateTime == 구매이전봉);
// 시간대 캔들이 없으면 결과에서 제외
@@ -264,28 +245,9 @@ namespace Million_Hunter.HunterSubForm
var 구매이전봉 = startDate;
//차트 Date Time 설정하기
- var StartDateInterval = 1;
+ var StartDateInterval = -1;
- switch (MCandleTimeType)
- {
- case CommonProperty.MCandleTimeType.H1:
- 구매이전봉 = Convert.ToDateTime(startDate.ToString("yyyy-MM-dd HH:00")) - new TimeSpan(0, StartDateInterval, 0, 0);
- break;
- case CommonProperty.MCandleTimeType.H4:
- 구매이전봉 = Convert.ToDateTime(startDate.ToString("yyyy-MM-dd HH:00")) - new TimeSpan(0, StartDateInterval * 4, 0, 0);
- break;
- case CommonProperty.MCandleTimeType.M1:
- break;
- case CommonProperty.MCandleTimeType.M10:
- case CommonProperty.MCandleTimeType.M15:
- case CommonProperty.MCandleTimeType.M3:
- case CommonProperty.MCandleTimeType.M30:
- case CommonProperty.MCandleTimeType.M5:
- break;
- case CommonProperty.MCandleTimeType.D1:
- 구매이전봉 = Convert.ToDateTime(endDate.ToString("yyyy-MM-dd")) - new TimeSpan(StartDateInterval, 0, 0, 0);
- break;
- }
+ 구매이전봉 = changeDatetimeFormat(구매이전봉, StartDateInterval);
var candleData = analysisData.CandleDatas[MCandleTimeType].Find(item => item.DateTime == 구매이전봉);
// 시간대 캔들이 없으면 결과에서 제외
@@ -318,12 +280,125 @@ namespace Million_Hunter.HunterSubForm
}
}
}
+
+ if (checkEdit_구름떼상한선하락시판매.Checked)
+ {
+ // 평균 승률 계산하기
+ double winRate = 0;
+ // 평균 수익률 계산하기
+ double profitRate = 0;
+
+ var count__ = 0;
+ var count_2 = 0;
+ var count_3 = 0;
+
+ foreach (var analysisData in parentForm._analysisDatas)
+ {
+ if (!analysisData.Inclusion) continue;
+
+ var startDate = changeDatetimeFormat(analysisData.StartDate, 0);
+ var endDate = changeDatetimeFormat(analysisData.EndDate, 0);
+
+ var candleData = analysisData.CandleDatas.First().Value.Find(item => item.DateTime >= startDate &&
+ item.IndicatorDic["Ich2695226"]?.value != null && item.IndicatorDic["Ich2695226"]?.value > item.LowValue);
+
+
+ if(candleData != null)
+ {
+ var endResut = changeDatetimeFormat(candleData.DateTime, 0);
+ var ichValue = ((IchimokData)candleData.IndicatorDic["Ich2695226"]).GetOverValue();
+
+ // 판매 시간 이전에 하락 시 다시 계산
+ if (endDate > endResut)
+ {
+ // 수익이면
+ if (analysisData.BuyValue > ichValue)
+ {
+ winRate++;
+ count__++;
+ }
+
+ //var profitRate1 = profitRate1 + (-100 + (Convert.ToDouble(ichValue) / Convert.ToDouble(analysisData.BuyValue) * 100));
+ profitRate += -1 * ((analysisData.BuyValue - ichValue) / analysisData.BuyValue * 100);
+
+ }
+ else
+ {
+ if (analysisData.WinFlag)
+ {
+ winRate++;
+ count_2++;
+ }
+
+ profitRate = profitRate + analysisData.EarningRate;
+ }
+ }
+ else
+ {
+ if(startDate != endDate)
+ {
+
+ }
+
+ if (analysisData.WinFlag)
+ {
+ count_2++;
+ winRate++;
+ }
+ else { }
+
+ profitRate = profitRate + analysisData.EarningRate;
+ }
+ }
+
+ var allCount = parentForm._analysisDatas.Count(item => item.Inclusion == true);
+
+ winRate = winRate * 100 / allCount;
+
+ 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();
}
+
+ ///
+ /// 시간/분/일 등의 Datetime 과 비교하기 위한 Format String 변경 함수
+ ///
+ ///
+ ///
+ ///
+ public DateTime changeDatetimeFormat(DateTime dateTime, int StartDateInterval)
+ {
+ var _dateTime = dateTime;
+
+ switch (MCandleTimeType)
+ {
+ case CommonProperty.MCandleTimeType.H1:
+ _dateTime = Convert.ToDateTime(dateTime.ToString("yyyy-MM-dd HH:00")) + new TimeSpan(0, StartDateInterval, 0, 0);
+ break;
+ case CommonProperty.MCandleTimeType.H4:
+ _dateTime = Convert.ToDateTime(dateTime.ToString("yyyy-MM-dd HH:00")) + new TimeSpan(0, StartDateInterval * 4, 0, 0);
+ break;
+ case CommonProperty.MCandleTimeType.M1:
+ break;
+ case CommonProperty.MCandleTimeType.M10:
+ case CommonProperty.MCandleTimeType.M15:
+ case CommonProperty.MCandleTimeType.M3:
+ case CommonProperty.MCandleTimeType.M30:
+ case CommonProperty.MCandleTimeType.M5:
+ break;
+ case CommonProperty.MCandleTimeType.D1:
+ _dateTime = Convert.ToDateTime(dateTime.ToString("yyyy-MM-dd")) + new TimeSpan(StartDateInterval, 0, 0, 0);
+ break;
+ }
+
+ return _dateTime;
+ }
+
///
/// 이전봉40_2볼린저이하
///