diff --git a/DataSaver/MainForm.cs b/DataSaver/MainForm.cs index 3a894e2..8f809d9 100644 --- a/DataSaver/MainForm.cs +++ b/DataSaver/MainForm.cs @@ -140,7 +140,7 @@ namespace DataSaver var recentlyDbDataList = Million.DbManagement.DbServiceFunctions.GetOldNewDataList_FromDB (marketList, placeName, (CommonProperty.MCandleTimeType)item); - //Million.DbManagement.DbServiceFunctions.SetCandleData(placeName, type, recentlyDbDataList, (CommonProperty.MCandleTimeType)item); + Million.DbManagement.DbServiceFunctions.SetCandleData(placeName, type, recentlyDbDataList, (CommonProperty.MCandleTimeType)item); } MessageBox.Show("Completed Set Candle Data"); } diff --git a/Million Hunter/HunterSubForm/ResultViewerForm.Designer.cs b/Million Hunter/HunterSubForm/ResultViewerForm.Designer.cs index 6057eb4..aff55f5 100644 --- a/Million Hunter/HunterSubForm/ResultViewerForm.Designer.cs +++ b/Million Hunter/HunterSubForm/ResultViewerForm.Designer.cs @@ -30,38 +30,658 @@ namespace Million_Hunter.HunterSubForm private void InitializeComponent() { this.panelControl_IndicatorCondition = new DevExpress.XtraEditors.PanelControl(); + this.groupBox_ = new System.Windows.Forms.GroupBox(); + this.groupBox9 = new System.Windows.Forms.GroupBox(); + this.textEdit_SellRegularExpression = new DevExpress.XtraEditors.TextEdit(); + this.groupBox8 = new System.Windows.Forms.GroupBox(); + this.textEdit_BuyRegularExpression = new DevExpress.XtraEditors.TextEdit(); + this.splitContainer_SetupPanel = new System.Windows.Forms.SplitContainer(); + this.groupBox3 = new System.Windows.Forms.GroupBox(); + this.treeList_BuySetupList = new DevExpress.XtraTreeList.TreeList(); + this.treeListColumn_IndexString = new DevExpress.XtraTreeList.Columns.TreeListColumn(); + this.treeListColumn_IndicatorType = new DevExpress.XtraTreeList.Columns.TreeListColumn(); + this.treeListColumn_Description = new DevExpress.XtraTreeList.Columns.TreeListColumn(); + this.groupBox4 = new System.Windows.Forms.GroupBox(); + this.treeList_SellSetupList = new DevExpress.XtraTreeList.TreeList(); + this.treeListColumn_SellSetupCondition_IndexString = new DevExpress.XtraTreeList.Columns.TreeListColumn(); + this.treeListColumn_SellSetupCondition_IndicatorType = new DevExpress.XtraTreeList.Columns.TreeListColumn(); + this.treeListColumn_SellSetupCondition_Description = new DevExpress.XtraTreeList.Columns.TreeListColumn(); + this.labelControl5 = new DevExpress.XtraEditors.LabelControl(); + this.labelControl4 = new DevExpress.XtraEditors.LabelControl(); + this.labelControl3 = new DevExpress.XtraEditors.LabelControl(); this.treeList_ResultData = new DevExpress.XtraTreeList.TreeList(); + this.treeListColumn_Inclusion = new DevExpress.XtraTreeList.Columns.TreeListColumn(); + this.repositoryItemCheckEdit_Inclustion = new DevExpress.XtraEditors.Repository.RepositoryItemCheckEdit(); + this.treeListColumn_ExchangePlace = new DevExpress.XtraTreeList.Columns.TreeListColumn(); + this.treeListColumn_CodeFullName = new DevExpress.XtraTreeList.Columns.TreeListColumn(); + this.treeListColumn_KorName = new DevExpress.XtraTreeList.Columns.TreeListColumn(); + this.treeListColumn_BuyCountForTime = new DevExpress.XtraTreeList.Columns.TreeListColumn(); + this.treeListColumn_StartDate = new DevExpress.XtraTreeList.Columns.TreeListColumn(); + this.treeListColumn_BuyValue = new DevExpress.XtraTreeList.Columns.TreeListColumn(); + this.treeListColumn_EndDate = new DevExpress.XtraTreeList.Columns.TreeListColumn(); + this.treeListColumn_SellValue = new DevExpress.XtraTreeList.Columns.TreeListColumn(); + this.treeListColumn_WinFlag = new DevExpress.XtraTreeList.Columns.TreeListColumn(); + this.treeListColumn_EarningRate = new DevExpress.XtraTreeList.Columns.TreeListColumn(); + this.treeListColumn_AnalysisDescrption = new DevExpress.XtraTreeList.Columns.TreeListColumn(); + this.treeListColumn_OriginalData = new DevExpress.XtraTreeList.Columns.TreeListColumn(); + this.panelControl1 = new DevExpress.XtraEditors.PanelControl(); + this.simpleButton_SavaAnalysisData = new DevExpress.XtraEditors.SimpleButton(); + this.dateEdit_StartDateTime = new DevExpress.XtraEditors.DateEdit(); + this.dateEdit_EndDateTime = new DevExpress.XtraEditors.DateEdit(); + this.dateEdit_SavedDateTime = new DevExpress.XtraEditors.DateEdit(); + this.simpleButton_LoadAnalysisResultData = new DevExpress.XtraEditors.SimpleButton(); + this.textEdit_Description = new DevExpress.XtraEditors.TextEdit(); + this.labelControl1 = new DevExpress.XtraEditors.LabelControl(); ((System.ComponentModel.ISupportInitialize)(this.panelControl_IndicatorCondition)).BeginInit(); + this.panelControl_IndicatorCondition.SuspendLayout(); + this.groupBox_.SuspendLayout(); + this.groupBox9.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.textEdit_SellRegularExpression.Properties)).BeginInit(); + this.groupBox8.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.textEdit_BuyRegularExpression.Properties)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.splitContainer_SetupPanel)).BeginInit(); + this.splitContainer_SetupPanel.Panel1.SuspendLayout(); + this.splitContainer_SetupPanel.Panel2.SuspendLayout(); + this.splitContainer_SetupPanel.SuspendLayout(); + this.groupBox3.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.treeList_BuySetupList)).BeginInit(); + this.groupBox4.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.treeList_SellSetupList)).BeginInit(); ((System.ComponentModel.ISupportInitialize)(this.treeList_ResultData)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.repositoryItemCheckEdit_Inclustion)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.panelControl1)).BeginInit(); + this.panelControl1.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.dateEdit_StartDateTime.Properties.CalendarTimeProperties)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.dateEdit_StartDateTime.Properties)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.dateEdit_EndDateTime.Properties.CalendarTimeProperties)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.dateEdit_EndDateTime.Properties)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.dateEdit_SavedDateTime.Properties.CalendarTimeProperties)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.dateEdit_SavedDateTime.Properties)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.textEdit_Description.Properties)).BeginInit(); this.SuspendLayout(); // // panelControl_IndicatorCondition // + this.panelControl_IndicatorCondition.Controls.Add(this.groupBox_); this.panelControl_IndicatorCondition.Dock = System.Windows.Forms.DockStyle.Top; this.panelControl_IndicatorCondition.Location = new System.Drawing.Point(0, 0); this.panelControl_IndicatorCondition.Name = "panelControl_IndicatorCondition"; - this.panelControl_IndicatorCondition.Size = new System.Drawing.Size(1271, 120); + this.panelControl_IndicatorCondition.Size = new System.Drawing.Size(1275, 231); this.panelControl_IndicatorCondition.TabIndex = 3; // + // groupBox_ + // + this.groupBox_.Controls.Add(this.dateEdit_EndDateTime); + this.groupBox_.Controls.Add(this.dateEdit_SavedDateTime); + this.groupBox_.Controls.Add(this.dateEdit_StartDateTime); + this.groupBox_.Controls.Add(this.groupBox9); + this.groupBox_.Controls.Add(this.groupBox8); + this.groupBox_.Controls.Add(this.splitContainer_SetupPanel); + this.groupBox_.Controls.Add(this.labelControl5); + this.groupBox_.Controls.Add(this.labelControl4); + this.groupBox_.Controls.Add(this.labelControl3); + this.groupBox_.Dock = System.Windows.Forms.DockStyle.Fill; + this.groupBox_.Location = new System.Drawing.Point(2, 2); + this.groupBox_.Name = "groupBox_"; + this.groupBox_.Size = new System.Drawing.Size(1271, 227); + this.groupBox_.TabIndex = 1; + this.groupBox_.TabStop = false; + this.groupBox_.Text = "메뉴"; + // + // groupBox9 + // + this.groupBox9.Controls.Add(this.textEdit_SellRegularExpression); + this.groupBox9.Location = new System.Drawing.Point(6, 168); + this.groupBox9.Name = "groupBox9"; + this.groupBox9.Size = new System.Drawing.Size(661, 45); + this.groupBox9.TabIndex = 8; + this.groupBox9.TabStop = false; + this.groupBox9.Text = "판매 조건 조합"; + // + // textEdit_SellRegularExpression + // + this.textEdit_SellRegularExpression.Dock = System.Windows.Forms.DockStyle.Fill; + this.textEdit_SellRegularExpression.Location = new System.Drawing.Point(3, 18); + this.textEdit_SellRegularExpression.Name = "textEdit_SellRegularExpression"; + this.textEdit_SellRegularExpression.Properties.ReadOnly = true; + this.textEdit_SellRegularExpression.Size = new System.Drawing.Size(655, 20); + this.textEdit_SellRegularExpression.TabIndex = 0; + // + // groupBox8 + // + this.groupBox8.Controls.Add(this.textEdit_BuyRegularExpression); + this.groupBox8.Location = new System.Drawing.Point(673, 169); + this.groupBox8.Name = "groupBox8"; + this.groupBox8.Size = new System.Drawing.Size(589, 45); + this.groupBox8.TabIndex = 9; + this.groupBox8.TabStop = false; + this.groupBox8.Text = "구매 조건 조합"; + // + // textEdit_BuyRegularExpression + // + this.textEdit_BuyRegularExpression.Dock = System.Windows.Forms.DockStyle.Fill; + this.textEdit_BuyRegularExpression.Location = new System.Drawing.Point(3, 18); + this.textEdit_BuyRegularExpression.Name = "textEdit_BuyRegularExpression"; + this.textEdit_BuyRegularExpression.Properties.ReadOnly = true; + this.textEdit_BuyRegularExpression.Size = new System.Drawing.Size(583, 20); + this.textEdit_BuyRegularExpression.TabIndex = 0; + // + // splitContainer_SetupPanel + // + this.splitContainer_SetupPanel.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.splitContainer_SetupPanel.Location = new System.Drawing.Point(6, 39); + this.splitContainer_SetupPanel.Name = "splitContainer_SetupPanel"; + // + // splitContainer_SetupPanel.Panel1 + // + this.splitContainer_SetupPanel.Panel1.Controls.Add(this.groupBox3); + // + // splitContainer_SetupPanel.Panel2 + // + this.splitContainer_SetupPanel.Panel2.Controls.Add(this.groupBox4); + this.splitContainer_SetupPanel.Size = new System.Drawing.Size(1259, 131); + this.splitContainer_SetupPanel.SplitterDistance = 662; + this.splitContainer_SetupPanel.TabIndex = 2; + // + // groupBox3 + // + this.groupBox3.Controls.Add(this.treeList_BuySetupList); + this.groupBox3.Dock = System.Windows.Forms.DockStyle.Fill; + this.groupBox3.Location = new System.Drawing.Point(0, 0); + this.groupBox3.Name = "groupBox3"; + this.groupBox3.Size = new System.Drawing.Size(662, 131); + this.groupBox3.TabIndex = 0; + this.groupBox3.TabStop = false; + this.groupBox3.Text = "구매 조건 조합"; + // + // treeList_BuySetupList + // + this.treeList_BuySetupList.Columns.AddRange(new DevExpress.XtraTreeList.Columns.TreeListColumn[] { + this.treeListColumn_IndexString, + this.treeListColumn_IndicatorType, + this.treeListColumn_Description}); + this.treeList_BuySetupList.Cursor = System.Windows.Forms.Cursors.Default; + this.treeList_BuySetupList.Dock = System.Windows.Forms.DockStyle.Fill; + this.treeList_BuySetupList.Location = new System.Drawing.Point(3, 18); + this.treeList_BuySetupList.Name = "treeList_BuySetupList"; + this.treeList_BuySetupList.OptionsBehavior.Editable = false; + this.treeList_BuySetupList.OptionsBehavior.ReadOnly = true; + this.treeList_BuySetupList.OptionsView.ShowIndicator = false; + this.treeList_BuySetupList.OptionsView.ShowRoot = false; + this.treeList_BuySetupList.Size = new System.Drawing.Size(656, 110); + this.treeList_BuySetupList.TabIndex = 1; + // + // treeListColumn_IndexString + // + this.treeListColumn_IndexString.Caption = "번호"; + this.treeListColumn_IndexString.FieldName = "IndexString"; + this.treeListColumn_IndexString.Name = "treeListColumn_IndexString"; + this.treeListColumn_IndexString.Visible = true; + this.treeListColumn_IndexString.VisibleIndex = 0; + this.treeListColumn_IndexString.Width = 45; + // + // treeListColumn_IndicatorType + // + this.treeListColumn_IndicatorType.Caption = "지표"; + this.treeListColumn_IndicatorType.FieldName = "IndicatorType"; + this.treeListColumn_IndicatorType.Name = "treeListColumn_IndicatorType"; + this.treeListColumn_IndicatorType.UnboundType = DevExpress.XtraTreeList.Data.UnboundColumnType.Object; + this.treeListColumn_IndicatorType.Visible = true; + this.treeListColumn_IndicatorType.VisibleIndex = 1; + this.treeListColumn_IndicatorType.Width = 41; + // + // treeListColumn_Description + // + this.treeListColumn_Description.Caption = "내용"; + this.treeListColumn_Description.FieldName = "Description"; + this.treeListColumn_Description.Name = "treeListColumn_Description"; + this.treeListColumn_Description.Visible = true; + this.treeListColumn_Description.VisibleIndex = 2; + this.treeListColumn_Description.Width = 395; + // + // groupBox4 + // + this.groupBox4.Controls.Add(this.treeList_SellSetupList); + this.groupBox4.Dock = System.Windows.Forms.DockStyle.Fill; + this.groupBox4.Location = new System.Drawing.Point(0, 0); + this.groupBox4.Name = "groupBox4"; + this.groupBox4.Size = new System.Drawing.Size(593, 131); + this.groupBox4.TabIndex = 0; + this.groupBox4.TabStop = false; + this.groupBox4.Text = "판매 조건 조합"; + // + // treeList_SellSetupList + // + this.treeList_SellSetupList.Columns.AddRange(new DevExpress.XtraTreeList.Columns.TreeListColumn[] { + this.treeListColumn_SellSetupCondition_IndexString, + this.treeListColumn_SellSetupCondition_IndicatorType, + this.treeListColumn_SellSetupCondition_Description}); + this.treeList_SellSetupList.Cursor = System.Windows.Forms.Cursors.Default; + this.treeList_SellSetupList.Dock = System.Windows.Forms.DockStyle.Fill; + this.treeList_SellSetupList.Location = new System.Drawing.Point(3, 18); + this.treeList_SellSetupList.Name = "treeList_SellSetupList"; + this.treeList_SellSetupList.OptionsBehavior.Editable = false; + this.treeList_SellSetupList.OptionsBehavior.ReadOnly = true; + this.treeList_SellSetupList.OptionsView.ShowIndicator = false; + this.treeList_SellSetupList.OptionsView.ShowRoot = false; + this.treeList_SellSetupList.Size = new System.Drawing.Size(587, 110); + this.treeList_SellSetupList.TabIndex = 2; + // + // treeListColumn_SellSetupCondition_IndexString + // + this.treeListColumn_SellSetupCondition_IndexString.Caption = "번호"; + this.treeListColumn_SellSetupCondition_IndexString.FieldName = "IndexString"; + this.treeListColumn_SellSetupCondition_IndexString.Name = "treeListColumn_SellSetupCondition_IndexString"; + this.treeListColumn_SellSetupCondition_IndexString.Visible = true; + this.treeListColumn_SellSetupCondition_IndexString.VisibleIndex = 0; + this.treeListColumn_SellSetupCondition_IndexString.Width = 41; + // + // treeListColumn_SellSetupCondition_IndicatorType + // + this.treeListColumn_SellSetupCondition_IndicatorType.Caption = "지표"; + this.treeListColumn_SellSetupCondition_IndicatorType.FieldName = "IndicatorType"; + this.treeListColumn_SellSetupCondition_IndicatorType.Name = "treeListColumn_SellSetupCondition_IndicatorType"; + this.treeListColumn_SellSetupCondition_IndicatorType.UnboundType = DevExpress.XtraTreeList.Data.UnboundColumnType.Object; + this.treeListColumn_SellSetupCondition_IndicatorType.Visible = true; + this.treeListColumn_SellSetupCondition_IndicatorType.VisibleIndex = 1; + this.treeListColumn_SellSetupCondition_IndicatorType.Width = 41; + // + // treeListColumn_SellSetupCondition_Description + // + this.treeListColumn_SellSetupCondition_Description.Caption = "내용"; + this.treeListColumn_SellSetupCondition_Description.FieldName = "Description"; + this.treeListColumn_SellSetupCondition_Description.Name = "treeListColumn_SellSetupCondition_Description"; + this.treeListColumn_SellSetupCondition_Description.Visible = true; + this.treeListColumn_SellSetupCondition_Description.VisibleIndex = 2; + this.treeListColumn_SellSetupCondition_Description.Width = 341; + // + // labelControl5 + // + this.labelControl5.Location = new System.Drawing.Point(592, 19); + this.labelControl5.Name = "labelControl5"; + this.labelControl5.Size = new System.Drawing.Size(52, 14); + this.labelControl5.TabIndex = 1; + this.labelControl5.Text = "저장시간 : "; + // + // labelControl4 + // + this.labelControl4.Location = new System.Drawing.Point(298, 19); + this.labelControl4.Name = "labelControl4"; + this.labelControl4.Size = new System.Drawing.Size(52, 14); + this.labelControl4.TabIndex = 1; + this.labelControl4.Text = "종료시간 : "; + // + // labelControl3 + // + this.labelControl3.Location = new System.Drawing.Point(16, 19); + this.labelControl3.Name = "labelControl3"; + this.labelControl3.Size = new System.Drawing.Size(52, 14); + this.labelControl3.TabIndex = 1; + this.labelControl3.Text = "시작시간 : "; + // // treeList_ResultData // + this.treeList_ResultData.Columns.AddRange(new DevExpress.XtraTreeList.Columns.TreeListColumn[] { + this.treeListColumn_Inclusion, + this.treeListColumn_ExchangePlace, + this.treeListColumn_CodeFullName, + this.treeListColumn_KorName, + this.treeListColumn_BuyCountForTime, + this.treeListColumn_StartDate, + this.treeListColumn_BuyValue, + this.treeListColumn_EndDate, + this.treeListColumn_SellValue, + this.treeListColumn_WinFlag, + this.treeListColumn_EarningRate, + 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, 120); + this.treeList_ResultData.Location = new System.Drawing.Point(0, 275); this.treeList_ResultData.Name = "treeList_ResultData"; - this.treeList_ResultData.Size = new System.Drawing.Size(1271, 681); - this.treeList_ResultData.TabIndex = 4; + this.treeList_ResultData.RepositoryItems.AddRange(new DevExpress.XtraEditors.Repository.RepositoryItem[] { + this.repositoryItemCheckEdit_Inclustion}); + this.treeList_ResultData.Size = new System.Drawing.Size(1275, 626); + this.treeList_ResultData.TabIndex = 5; + // + // treeListColumn_Inclusion + // + this.treeListColumn_Inclusion.AppearanceCell.Options.UseTextOptions = true; + this.treeListColumn_Inclusion.AppearanceCell.TextOptions.HAlignment = DevExpress.Utils.HorzAlignment.Center; + this.treeListColumn_Inclusion.AppearanceCell.TextOptions.VAlignment = DevExpress.Utils.VertAlignment.Center; + this.treeListColumn_Inclusion.AppearanceHeader.Options.UseTextOptions = true; + this.treeListColumn_Inclusion.AppearanceHeader.TextOptions.HAlignment = DevExpress.Utils.HorzAlignment.Center; + this.treeListColumn_Inclusion.AppearanceHeader.TextOptions.VAlignment = DevExpress.Utils.VertAlignment.Center; + this.treeListColumn_Inclusion.Caption = "결과 반영"; + this.treeListColumn_Inclusion.ColumnEdit = this.repositoryItemCheckEdit_Inclustion; + this.treeListColumn_Inclusion.FieldName = "Inclusion"; + this.treeListColumn_Inclusion.Name = "treeListColumn_Inclusion"; + this.treeListColumn_Inclusion.Visible = true; + this.treeListColumn_Inclusion.VisibleIndex = 0; + this.treeListColumn_Inclusion.Width = 60; + // + // repositoryItemCheckEdit_Inclustion + // + this.repositoryItemCheckEdit_Inclustion.AutoHeight = false; + this.repositoryItemCheckEdit_Inclustion.Name = "repositoryItemCheckEdit_Inclustion"; + // + // treeListColumn_ExchangePlace + // + this.treeListColumn_ExchangePlace.AppearanceCell.Options.UseTextOptions = true; + this.treeListColumn_ExchangePlace.AppearanceCell.TextOptions.HAlignment = DevExpress.Utils.HorzAlignment.Center; + this.treeListColumn_ExchangePlace.AppearanceCell.TextOptions.VAlignment = DevExpress.Utils.VertAlignment.Center; + this.treeListColumn_ExchangePlace.AppearanceHeader.Options.UseTextOptions = true; + this.treeListColumn_ExchangePlace.AppearanceHeader.TextOptions.HAlignment = DevExpress.Utils.HorzAlignment.Center; + this.treeListColumn_ExchangePlace.AppearanceHeader.TextOptions.VAlignment = DevExpress.Utils.VertAlignment.Center; + this.treeListColumn_ExchangePlace.Caption = "거래소"; + this.treeListColumn_ExchangePlace.FieldName = "ExchangePlace"; + this.treeListColumn_ExchangePlace.Name = "treeListColumn_ExchangePlace"; + this.treeListColumn_ExchangePlace.OptionsColumn.AllowEdit = false; + this.treeListColumn_ExchangePlace.Visible = true; + this.treeListColumn_ExchangePlace.VisibleIndex = 1; + this.treeListColumn_ExchangePlace.Width = 60; + // + // treeListColumn_CodeFullName + // + this.treeListColumn_CodeFullName.AppearanceCell.Options.UseTextOptions = true; + this.treeListColumn_CodeFullName.AppearanceCell.TextOptions.HAlignment = DevExpress.Utils.HorzAlignment.Center; + this.treeListColumn_CodeFullName.AppearanceCell.TextOptions.VAlignment = DevExpress.Utils.VertAlignment.Center; + this.treeListColumn_CodeFullName.AppearanceHeader.Options.UseTextOptions = true; + this.treeListColumn_CodeFullName.AppearanceHeader.TextOptions.HAlignment = DevExpress.Utils.HorzAlignment.Center; + this.treeListColumn_CodeFullName.AppearanceHeader.TextOptions.VAlignment = DevExpress.Utils.VertAlignment.Center; + this.treeListColumn_CodeFullName.Caption = "종목 코드"; + this.treeListColumn_CodeFullName.FieldName = "CodeFullName"; + this.treeListColumn_CodeFullName.Name = "treeListColumn_CodeFullName"; + this.treeListColumn_CodeFullName.OptionsColumn.AllowEdit = false; + this.treeListColumn_CodeFullName.Visible = true; + this.treeListColumn_CodeFullName.VisibleIndex = 2; + this.treeListColumn_CodeFullName.Width = 80; + // + // treeListColumn_KorName + // + this.treeListColumn_KorName.AppearanceCell.Options.UseTextOptions = true; + this.treeListColumn_KorName.AppearanceCell.TextOptions.HAlignment = DevExpress.Utils.HorzAlignment.Center; + this.treeListColumn_KorName.AppearanceCell.TextOptions.VAlignment = DevExpress.Utils.VertAlignment.Center; + this.treeListColumn_KorName.AppearanceHeader.Options.UseTextOptions = true; + this.treeListColumn_KorName.AppearanceHeader.TextOptions.HAlignment = DevExpress.Utils.HorzAlignment.Center; + this.treeListColumn_KorName.AppearanceHeader.TextOptions.VAlignment = DevExpress.Utils.VertAlignment.Center; + this.treeListColumn_KorName.Caption = "종목 이름"; + this.treeListColumn_KorName.FieldName = "KorName"; + this.treeListColumn_KorName.Name = "treeListColumn_KorName"; + this.treeListColumn_KorName.OptionsColumn.AllowEdit = false; + this.treeListColumn_KorName.Visible = true; + this.treeListColumn_KorName.VisibleIndex = 3; + this.treeListColumn_KorName.Width = 70; + // + // treeListColumn_BuyCountForTime + // + this.treeListColumn_BuyCountForTime.AppearanceCell.Options.UseTextOptions = true; + this.treeListColumn_BuyCountForTime.AppearanceCell.TextOptions.HAlignment = DevExpress.Utils.HorzAlignment.Center; + this.treeListColumn_BuyCountForTime.AppearanceCell.TextOptions.VAlignment = DevExpress.Utils.VertAlignment.Center; + this.treeListColumn_BuyCountForTime.AppearanceHeader.Options.UseTextOptions = true; + this.treeListColumn_BuyCountForTime.AppearanceHeader.TextOptions.HAlignment = DevExpress.Utils.HorzAlignment.Center; + this.treeListColumn_BuyCountForTime.AppearanceHeader.TextOptions.VAlignment = DevExpress.Utils.VertAlignment.Center; + this.treeListColumn_BuyCountForTime.Caption = "기간 내 구매 수"; + this.treeListColumn_BuyCountForTime.FieldName = "BuyCountForTime"; + this.treeListColumn_BuyCountForTime.Name = "treeListColumn_BuyCountForTime"; + this.treeListColumn_BuyCountForTime.OptionsColumn.AllowEdit = false; + this.treeListColumn_BuyCountForTime.Visible = true; + this.treeListColumn_BuyCountForTime.VisibleIndex = 4; + this.treeListColumn_BuyCountForTime.Width = 80; + // + // treeListColumn_StartDate + // + this.treeListColumn_StartDate.AppearanceCell.Options.UseTextOptions = true; + this.treeListColumn_StartDate.AppearanceCell.TextOptions.HAlignment = DevExpress.Utils.HorzAlignment.Center; + this.treeListColumn_StartDate.AppearanceCell.TextOptions.VAlignment = DevExpress.Utils.VertAlignment.Center; + this.treeListColumn_StartDate.AppearanceHeader.Options.UseTextOptions = true; + this.treeListColumn_StartDate.AppearanceHeader.TextOptions.HAlignment = DevExpress.Utils.HorzAlignment.Center; + this.treeListColumn_StartDate.AppearanceHeader.TextOptions.VAlignment = DevExpress.Utils.VertAlignment.Center; + this.treeListColumn_StartDate.Caption = "구매 시간"; + this.treeListColumn_StartDate.FieldName = "StartDate"; + this.treeListColumn_StartDate.Format.FormatString = "u"; + this.treeListColumn_StartDate.Format.FormatType = DevExpress.Utils.FormatType.DateTime; + this.treeListColumn_StartDate.Name = "treeListColumn_StartDate"; + this.treeListColumn_StartDate.OptionsColumn.AllowEdit = false; + this.treeListColumn_StartDate.Visible = true; + this.treeListColumn_StartDate.VisibleIndex = 5; + this.treeListColumn_StartDate.Width = 135; + // + // treeListColumn_BuyValue + // + this.treeListColumn_BuyValue.AppearanceCell.Options.UseTextOptions = true; + this.treeListColumn_BuyValue.AppearanceCell.TextOptions.HAlignment = DevExpress.Utils.HorzAlignment.Center; + this.treeListColumn_BuyValue.AppearanceCell.TextOptions.VAlignment = DevExpress.Utils.VertAlignment.Center; + this.treeListColumn_BuyValue.AppearanceHeader.Options.UseTextOptions = true; + this.treeListColumn_BuyValue.AppearanceHeader.TextOptions.HAlignment = DevExpress.Utils.HorzAlignment.Center; + this.treeListColumn_BuyValue.AppearanceHeader.TextOptions.VAlignment = DevExpress.Utils.VertAlignment.Center; + this.treeListColumn_BuyValue.Caption = "구매 가격"; + this.treeListColumn_BuyValue.FieldName = "BuyValue"; + this.treeListColumn_BuyValue.Name = "treeListColumn_BuyValue"; + this.treeListColumn_BuyValue.OptionsColumn.AllowEdit = false; + this.treeListColumn_BuyValue.Visible = true; + this.treeListColumn_BuyValue.VisibleIndex = 6; + this.treeListColumn_BuyValue.Width = 80; + // + // treeListColumn_EndDate + // + this.treeListColumn_EndDate.AppearanceCell.Options.UseTextOptions = true; + this.treeListColumn_EndDate.AppearanceCell.TextOptions.HAlignment = DevExpress.Utils.HorzAlignment.Center; + this.treeListColumn_EndDate.AppearanceCell.TextOptions.VAlignment = DevExpress.Utils.VertAlignment.Center; + this.treeListColumn_EndDate.AppearanceHeader.Options.UseTextOptions = true; + this.treeListColumn_EndDate.AppearanceHeader.TextOptions.HAlignment = DevExpress.Utils.HorzAlignment.Center; + this.treeListColumn_EndDate.AppearanceHeader.TextOptions.VAlignment = DevExpress.Utils.VertAlignment.Center; + this.treeListColumn_EndDate.Caption = "판매 시간"; + this.treeListColumn_EndDate.FieldName = "EndDate"; + this.treeListColumn_EndDate.Format.FormatString = "u"; + this.treeListColumn_EndDate.Format.FormatType = DevExpress.Utils.FormatType.DateTime; + this.treeListColumn_EndDate.Name = "treeListColumn_EndDate"; + this.treeListColumn_EndDate.OptionsColumn.AllowEdit = false; + this.treeListColumn_EndDate.Visible = true; + this.treeListColumn_EndDate.VisibleIndex = 7; + this.treeListColumn_EndDate.Width = 135; + // + // treeListColumn_SellValue + // + this.treeListColumn_SellValue.AppearanceCell.Options.UseTextOptions = true; + this.treeListColumn_SellValue.AppearanceCell.TextOptions.HAlignment = DevExpress.Utils.HorzAlignment.Center; + this.treeListColumn_SellValue.AppearanceCell.TextOptions.VAlignment = DevExpress.Utils.VertAlignment.Center; + this.treeListColumn_SellValue.AppearanceHeader.Options.UseTextOptions = true; + this.treeListColumn_SellValue.AppearanceHeader.TextOptions.HAlignment = DevExpress.Utils.HorzAlignment.Center; + this.treeListColumn_SellValue.AppearanceHeader.TextOptions.VAlignment = DevExpress.Utils.VertAlignment.Center; + this.treeListColumn_SellValue.Caption = "판매 가격"; + this.treeListColumn_SellValue.FieldName = "SellValue"; + this.treeListColumn_SellValue.Name = "treeListColumn_SellValue"; + this.treeListColumn_SellValue.OptionsColumn.AllowEdit = false; + this.treeListColumn_SellValue.Visible = true; + this.treeListColumn_SellValue.VisibleIndex = 8; + this.treeListColumn_SellValue.Width = 80; + // + // treeListColumn_WinFlag + // + this.treeListColumn_WinFlag.AppearanceCell.Options.UseTextOptions = true; + this.treeListColumn_WinFlag.AppearanceCell.TextOptions.HAlignment = DevExpress.Utils.HorzAlignment.Center; + this.treeListColumn_WinFlag.AppearanceCell.TextOptions.VAlignment = DevExpress.Utils.VertAlignment.Center; + this.treeListColumn_WinFlag.AppearanceHeader.Options.UseTextOptions = true; + this.treeListColumn_WinFlag.AppearanceHeader.TextOptions.HAlignment = DevExpress.Utils.HorzAlignment.Center; + this.treeListColumn_WinFlag.AppearanceHeader.TextOptions.VAlignment = DevExpress.Utils.VertAlignment.Center; + this.treeListColumn_WinFlag.Caption = "수익"; + this.treeListColumn_WinFlag.FieldName = "WinFlag"; + this.treeListColumn_WinFlag.Name = "treeListColumn_WinFlag"; + this.treeListColumn_WinFlag.OptionsColumn.AllowEdit = false; + this.treeListColumn_WinFlag.Visible = true; + this.treeListColumn_WinFlag.VisibleIndex = 9; + this.treeListColumn_WinFlag.Width = 40; + // + // treeListColumn_EarningRate + // + this.treeListColumn_EarningRate.AppearanceCell.Options.UseTextOptions = true; + this.treeListColumn_EarningRate.AppearanceCell.TextOptions.HAlignment = DevExpress.Utils.HorzAlignment.Center; + this.treeListColumn_EarningRate.AppearanceCell.TextOptions.VAlignment = DevExpress.Utils.VertAlignment.Center; + this.treeListColumn_EarningRate.AppearanceHeader.Options.UseTextOptions = true; + this.treeListColumn_EarningRate.AppearanceHeader.TextOptions.HAlignment = DevExpress.Utils.HorzAlignment.Center; + this.treeListColumn_EarningRate.AppearanceHeader.TextOptions.VAlignment = DevExpress.Utils.VertAlignment.Center; + this.treeListColumn_EarningRate.Caption = "수익률"; + this.treeListColumn_EarningRate.FieldName = "EarningRate"; + this.treeListColumn_EarningRate.Name = "treeListColumn_EarningRate"; + this.treeListColumn_EarningRate.OptionsColumn.AllowEdit = false; + this.treeListColumn_EarningRate.Visible = true; + this.treeListColumn_EarningRate.VisibleIndex = 10; + this.treeListColumn_EarningRate.Width = 50; + // + // treeListColumn_AnalysisDescrption + // + this.treeListColumn_AnalysisDescrption.AppearanceCell.Options.UseTextOptions = true; + this.treeListColumn_AnalysisDescrption.AppearanceCell.TextOptions.HAlignment = DevExpress.Utils.HorzAlignment.Center; + this.treeListColumn_AnalysisDescrption.AppearanceCell.TextOptions.VAlignment = DevExpress.Utils.VertAlignment.Center; + this.treeListColumn_AnalysisDescrption.AppearanceHeader.Options.UseTextOptions = true; + this.treeListColumn_AnalysisDescrption.AppearanceHeader.TextOptions.HAlignment = DevExpress.Utils.HorzAlignment.Center; + this.treeListColumn_AnalysisDescrption.AppearanceHeader.TextOptions.VAlignment = DevExpress.Utils.VertAlignment.Center; + this.treeListColumn_AnalysisDescrption.Caption = "기타"; + this.treeListColumn_AnalysisDescrption.FieldName = "Description"; + this.treeListColumn_AnalysisDescrption.Name = "treeListColumn_AnalysisDescrption"; + this.treeListColumn_AnalysisDescrption.Visible = true; + this.treeListColumn_AnalysisDescrption.VisibleIndex = 11; + this.treeListColumn_AnalysisDescrption.Width = 387; + // + // treeListColumn_OriginalData + // + this.treeListColumn_OriginalData.Caption = "Data"; + this.treeListColumn_OriginalData.FieldName = "OriginalSearchResult"; + this.treeListColumn_OriginalData.Name = "treeListColumn_OriginalData"; + // + // panelControl1 + // + this.panelControl1.Controls.Add(this.labelControl1); + this.panelControl1.Controls.Add(this.textEdit_Description); + this.panelControl1.Controls.Add(this.simpleButton_LoadAnalysisResultData); + this.panelControl1.Controls.Add(this.simpleButton_SavaAnalysisData); + 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(1275, 44); + this.panelControl1.TabIndex = 4; + // + // simpleButton_SavaAnalysisData + // + this.simpleButton_SavaAnalysisData.Location = new System.Drawing.Point(1134, 6); + this.simpleButton_SavaAnalysisData.Name = "simpleButton_SavaAnalysisData"; + this.simpleButton_SavaAnalysisData.Size = new System.Drawing.Size(136, 32); + this.simpleButton_SavaAnalysisData.TabIndex = 0; + this.simpleButton_SavaAnalysisData.Text = "결과 저장"; + this.simpleButton_SavaAnalysisData.Click += new System.EventHandler(this.simpleButton_SavaAnalysisData_Click); + // + // dateEdit_StartDateTime + // + this.dateEdit_StartDateTime.EditValue = null; + this.dateEdit_StartDateTime.Location = new System.Drawing.Point(74, 16); + this.dateEdit_StartDateTime.Name = "dateEdit_StartDateTime"; + this.dateEdit_StartDateTime.Properties.Buttons.AddRange(new DevExpress.XtraEditors.Controls.EditorButton[] { + new DevExpress.XtraEditors.Controls.EditorButton(DevExpress.XtraEditors.Controls.ButtonPredefines.Combo)}); + this.dateEdit_StartDateTime.Properties.CalendarTimeProperties.Buttons.AddRange(new DevExpress.XtraEditors.Controls.EditorButton[] { + new DevExpress.XtraEditors.Controls.EditorButton(DevExpress.XtraEditors.Controls.ButtonPredefines.Combo)}); + this.dateEdit_StartDateTime.Properties.DisplayFormat.FormatString = "u"; + this.dateEdit_StartDateTime.Properties.DisplayFormat.FormatType = DevExpress.Utils.FormatType.DateTime; + this.dateEdit_StartDateTime.Properties.Mask.EditMask = "u"; + this.dateEdit_StartDateTime.Properties.ReadOnly = true; + this.dateEdit_StartDateTime.Size = new System.Drawing.Size(193, 20); + this.dateEdit_StartDateTime.TabIndex = 6; + // + // dateEdit_EndDateTime + // + this.dateEdit_EndDateTime.EditValue = null; + this.dateEdit_EndDateTime.Location = new System.Drawing.Point(356, 16); + this.dateEdit_EndDateTime.Name = "dateEdit_EndDateTime"; + this.dateEdit_EndDateTime.Properties.Buttons.AddRange(new DevExpress.XtraEditors.Controls.EditorButton[] { + new DevExpress.XtraEditors.Controls.EditorButton(DevExpress.XtraEditors.Controls.ButtonPredefines.Combo)}); + this.dateEdit_EndDateTime.Properties.CalendarTimeProperties.Buttons.AddRange(new DevExpress.XtraEditors.Controls.EditorButton[] { + new DevExpress.XtraEditors.Controls.EditorButton(DevExpress.XtraEditors.Controls.ButtonPredefines.Combo)}); + this.dateEdit_EndDateTime.Properties.DisplayFormat.FormatString = "u"; + this.dateEdit_EndDateTime.Properties.DisplayFormat.FormatType = DevExpress.Utils.FormatType.DateTime; + this.dateEdit_EndDateTime.Properties.Mask.EditMask = "u"; + this.dateEdit_EndDateTime.Properties.ReadOnly = true; + this.dateEdit_EndDateTime.Size = new System.Drawing.Size(193, 20); + this.dateEdit_EndDateTime.TabIndex = 6; + // + // dateEdit_SavedDateTime + // + this.dateEdit_SavedDateTime.EditValue = null; + this.dateEdit_SavedDateTime.Location = new System.Drawing.Point(650, 16); + this.dateEdit_SavedDateTime.Name = "dateEdit_SavedDateTime"; + this.dateEdit_SavedDateTime.Properties.Buttons.AddRange(new DevExpress.XtraEditors.Controls.EditorButton[] { + new DevExpress.XtraEditors.Controls.EditorButton(DevExpress.XtraEditors.Controls.ButtonPredefines.Combo)}); + this.dateEdit_SavedDateTime.Properties.CalendarTimeProperties.Buttons.AddRange(new DevExpress.XtraEditors.Controls.EditorButton[] { + new DevExpress.XtraEditors.Controls.EditorButton(DevExpress.XtraEditors.Controls.ButtonPredefines.Combo)}); + this.dateEdit_SavedDateTime.Properties.DisplayFormat.FormatString = "u"; + this.dateEdit_SavedDateTime.Properties.DisplayFormat.FormatType = DevExpress.Utils.FormatType.DateTime; + this.dateEdit_SavedDateTime.Properties.Mask.EditMask = "u"; + this.dateEdit_SavedDateTime.Properties.ReadOnly = true; + this.dateEdit_SavedDateTime.Size = new System.Drawing.Size(193, 20); + this.dateEdit_SavedDateTime.TabIndex = 6; + // + // simpleButton_LoadAnalysisResultData + // + this.simpleButton_LoadAnalysisResultData.Location = new System.Drawing.Point(5, 7); + this.simpleButton_LoadAnalysisResultData.Name = "simpleButton_LoadAnalysisResultData"; + this.simpleButton_LoadAnalysisResultData.Size = new System.Drawing.Size(136, 32); + this.simpleButton_LoadAnalysisResultData.TabIndex = 0; + this.simpleButton_LoadAnalysisResultData.Text = "불러오기"; + this.simpleButton_LoadAnalysisResultData.Click += new System.EventHandler(this.simpleButton_SavaAnalysisData_Click); + // + // textEdit_Description + // + this.textEdit_Description.Location = new System.Drawing.Point(775, 12); + this.textEdit_Description.Name = "textEdit_Description"; + this.textEdit_Description.Size = new System.Drawing.Size(344, 20); + this.textEdit_Description.TabIndex = 1; + // + // labelControl1 + // + this.labelControl1.Location = new System.Drawing.Point(737, 15); + this.labelControl1.Name = "labelControl1"; + this.labelControl1.Size = new System.Drawing.Size(32, 14); + this.labelControl1.TabIndex = 2; + this.labelControl1.Text = "내용 : "; // // ResultViewerForm // this.AutoScaleDimensions = new System.Drawing.SizeF(7F, 14F); this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; - this.ClientSize = new System.Drawing.Size(1271, 801); + this.ClientSize = new System.Drawing.Size(1275, 901); this.Controls.Add(this.treeList_ResultData); + this.Controls.Add(this.panelControl1); this.Controls.Add(this.panelControl_IndicatorCondition); this.Name = "ResultViewerForm"; this.Text = "결과 뷰"; ((System.ComponentModel.ISupportInitialize)(this.panelControl_IndicatorCondition)).EndInit(); + this.panelControl_IndicatorCondition.ResumeLayout(false); + this.groupBox_.ResumeLayout(false); + this.groupBox_.PerformLayout(); + this.groupBox9.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.textEdit_SellRegularExpression.Properties)).EndInit(); + this.groupBox8.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.textEdit_BuyRegularExpression.Properties)).EndInit(); + this.splitContainer_SetupPanel.Panel1.ResumeLayout(false); + this.splitContainer_SetupPanel.Panel2.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.splitContainer_SetupPanel)).EndInit(); + this.splitContainer_SetupPanel.ResumeLayout(false); + this.groupBox3.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.treeList_BuySetupList)).EndInit(); + this.groupBox4.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.treeList_SellSetupList)).EndInit(); ((System.ComponentModel.ISupportInitialize)(this.treeList_ResultData)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.repositoryItemCheckEdit_Inclustion)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.panelControl1)).EndInit(); + this.panelControl1.ResumeLayout(false); + this.panelControl1.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.dateEdit_StartDateTime.Properties.CalendarTimeProperties)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.dateEdit_StartDateTime.Properties)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.dateEdit_EndDateTime.Properties.CalendarTimeProperties)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.dateEdit_EndDateTime.Properties)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.dateEdit_SavedDateTime.Properties.CalendarTimeProperties)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.dateEdit_SavedDateTime.Properties)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.textEdit_Description.Properties)).EndInit(); this.ResumeLayout(false); } @@ -70,5 +690,46 @@ namespace Million_Hunter.HunterSubForm private DevExpress.XtraEditors.PanelControl panelControl_IndicatorCondition; private DevExpress.XtraTreeList.TreeList treeList_ResultData; + private System.Windows.Forms.GroupBox groupBox_; + private System.Windows.Forms.SplitContainer splitContainer_SetupPanel; + private System.Windows.Forms.GroupBox groupBox3; + private DevExpress.XtraTreeList.TreeList treeList_BuySetupList; + private DevExpress.XtraTreeList.Columns.TreeListColumn treeListColumn_IndexString; + private DevExpress.XtraTreeList.Columns.TreeListColumn treeListColumn_IndicatorType; + private DevExpress.XtraTreeList.Columns.TreeListColumn treeListColumn_Description; + private System.Windows.Forms.GroupBox groupBox4; + private DevExpress.XtraTreeList.TreeList treeList_SellSetupList; + private DevExpress.XtraTreeList.Columns.TreeListColumn treeListColumn_SellSetupCondition_IndexString; + private DevExpress.XtraTreeList.Columns.TreeListColumn treeListColumn_SellSetupCondition_IndicatorType; + private DevExpress.XtraTreeList.Columns.TreeListColumn treeListColumn_SellSetupCondition_Description; + private DevExpress.XtraEditors.LabelControl labelControl5; + private DevExpress.XtraEditors.LabelControl labelControl4; + private DevExpress.XtraEditors.LabelControl labelControl3; + private System.Windows.Forms.GroupBox groupBox9; + private DevExpress.XtraEditors.TextEdit textEdit_SellRegularExpression; + private System.Windows.Forms.GroupBox groupBox8; + private DevExpress.XtraEditors.TextEdit textEdit_BuyRegularExpression; + private DevExpress.XtraTreeList.Columns.TreeListColumn treeListColumn_Inclusion; + private DevExpress.XtraTreeList.Columns.TreeListColumn treeListColumn_ExchangePlace; + private DevExpress.XtraTreeList.Columns.TreeListColumn treeListColumn_CodeFullName; + private DevExpress.XtraTreeList.Columns.TreeListColumn treeListColumn_KorName; + private DevExpress.XtraTreeList.Columns.TreeListColumn treeListColumn_BuyCountForTime; + private DevExpress.XtraEditors.Repository.RepositoryItemCheckEdit repositoryItemCheckEdit_Inclustion; + private DevExpress.XtraTreeList.Columns.TreeListColumn treeListColumn_StartDate; + private DevExpress.XtraTreeList.Columns.TreeListColumn treeListColumn_BuyValue; + private DevExpress.XtraTreeList.Columns.TreeListColumn treeListColumn_EndDate; + private DevExpress.XtraTreeList.Columns.TreeListColumn treeListColumn_SellValue; + private DevExpress.XtraTreeList.Columns.TreeListColumn treeListColumn_WinFlag; + private DevExpress.XtraTreeList.Columns.TreeListColumn treeListColumn_EarningRate; + private DevExpress.XtraTreeList.Columns.TreeListColumn treeListColumn_AnalysisDescrption; + private DevExpress.XtraTreeList.Columns.TreeListColumn treeListColumn_OriginalData; + private DevExpress.XtraEditors.PanelControl panelControl1; + private DevExpress.XtraEditors.SimpleButton simpleButton_SavaAnalysisData; + private DevExpress.XtraEditors.DateEdit dateEdit_EndDateTime; + private DevExpress.XtraEditors.DateEdit dateEdit_SavedDateTime; + private DevExpress.XtraEditors.DateEdit dateEdit_StartDateTime; + private DevExpress.XtraEditors.LabelControl labelControl1; + private DevExpress.XtraEditors.TextEdit textEdit_Description; + private DevExpress.XtraEditors.SimpleButton simpleButton_LoadAnalysisResultData; } } \ No newline at end of file diff --git a/Million Hunter/HunterSubForm/ResultViewerForm.cs b/Million Hunter/HunterSubForm/ResultViewerForm.cs index 66e556f..6445f20 100644 --- a/Million Hunter/HunterSubForm/ResultViewerForm.cs +++ b/Million Hunter/HunterSubForm/ResultViewerForm.cs @@ -9,6 +9,8 @@ using System.Text; using System.Threading.Tasks; using System.Windows.Forms; using Million.SaveData; +using Million.FileDBManagement; +using Million.Data; namespace Million_Hunter.HunterSubForm { @@ -16,6 +18,8 @@ namespace Million_Hunter.HunterSubForm { // 저장 또는 불러온 Result Data public SavedResultData _savedResultData; + // TreeList에 옮길 가공 데이터 + public List_analysisDatas; public ResultViewerForm(SavedResultData savedResultData) { @@ -29,6 +33,87 @@ namespace Million_Hunter.HunterSubForm private void InitForm() { // 1. 결과 데이터 TreeList에 표기 + // 시간 데이터 추가 + //_savedResultData.SearchResultList.ToLookup() + dateEdit_StartDateTime.DateTime = _savedResultData.StartDateTime.Date; + dateEdit_EndDateTime.DateTime = _savedResultData.EndDateTime.Date; + dateEdit_SavedDateTime.DateTime = _savedResultData.SavedDateTime.Date; + textEdit_BuyRegularExpression.Text = _savedResultData.BuyRegularExpression; + textEdit_SellRegularExpression.Text = _savedResultData.SellRegularExpression; + + // Buy/Sell 리스트에 데이터 추가 + treeList_BuySetupList.DataSource = _savedResultData.BuySetupList; + treeList_SellSetupList.DataSource = _savedResultData.SellSetupList; + treeList_BuySetupList.RefreshDataSource(); + treeList_SellSetupList.RefreshDataSource(); + + // _analysisDatas 리스트 초기화 + if (_analysisDatas != null) + { + // 메모리 헤제 + _analysisDatas.Clear(); + _analysisDatas = null; + } + _analysisDatas = new List(); + + // 데이터 가공하기 (List _analysisDatas) + foreach (var searchResult in _savedResultData.SearchResultList) + { + var analysisData = AnalysisData.GetAnalysisData(true, searchResult.MarketData.ExchangePlace, searchResult.MarketData.CodeFullName, searchResult.MarketData.KorName, + searchResult.BuyValueList.Count, searchResult.StartDate, searchResult.BuyValueList.First(), searchResult.EndDate, searchResult.SellValue, searchResult.FirstEarningRate, searchResult.FirstWinFlag, + "", searchResult); + + _analysisDatas.Add(analysisData); + } + + treeList_ResultData.DataSource = _analysisDatas; + treeList_ResultData.RefreshDataSource(); + + //var loadedData = FileManager.LoadFormBinaryFile(_savedResultData.SavedResultAnalysisDataPath); + } + + // 분석 결과 저장 버튼 클릭 이벤트 + private void simpleButton_SavaAnalysisData_Click(object sender, EventArgs e) + { + // 결과 반영 체크 && Filter 된 노드만 리스트로 모음 + var nodeList = treeList_ResultData.FindNodes(item => item.Visible == true && Convert.ToBoolean(item["Inclusion"]) == true); + + var saveDataList = new List(); + + // 승률 계산하기 + double winRate = 0; + // 수익률 계산하기 + double profitRate = 0; + + // 값이 있으면 저장 + if (nodeList != null && nodeList.Count() > 0) + { + foreach (var node in nodeList) + { + var data = (AnalysisData)treeList_ResultData.GetDataRecordByNode(node); + + // 승률 계산하기 + winRate = 0; + // 수익률 계산하기 + profitRate = 0; + + saveDataList.Add(data); + } + } + + // 저장 데이터 클래스 만들기 + SavedAnalysisData savedAnalysisData = new SavedAnalysisData() + { + AnalysisDataList = saveDataList, + TreeListFilterString = treeList_ResultData.ActiveFilterString, + Description = textEdit_Description.Text, + FirstWinRate = winRate, + FirstProfitRate = profitRate, + SavedTime = DateTime.Now + }; + + // 저장 하기 + FileManager.SavedResultAnalysisDataToFile(savedAnalysisData, _savedResultData.SavedResultAnalysisDataPath); } } -} \ No newline at end of file +} \ No newline at end of file diff --git a/Million Hunter/HunterSubForm/SavedResultViewerForm.Designer.cs b/Million Hunter/HunterSubForm/SavedResultViewerForm.Designer.cs index a1ad950..8dc6c33 100644 --- a/Million Hunter/HunterSubForm/SavedResultViewerForm.Designer.cs +++ b/Million Hunter/HunterSubForm/SavedResultViewerForm.Designer.cs @@ -299,7 +299,7 @@ namespace Million_Hunter.HunterSubForm this.simpleButton_SavedResultDataLoad.Name = "simpleButton_SavedResultDataLoad"; this.simpleButton_SavedResultDataLoad.Size = new System.Drawing.Size(142, 38); this.simpleButton_SavedResultDataLoad.TabIndex = 0; - this.simpleButton_SavedResultDataLoad.Text = "불러오기"; + this.simpleButton_SavedResultDataLoad.Text = "항목 불러오기"; this.simpleButton_SavedResultDataLoad.Click += new System.EventHandler(this.simpleButton_SavedResultDataLoad_Click); // // treeList_SavedResultData @@ -382,7 +382,7 @@ namespace Million_Hunter.HunterSubForm // treeListColumn_WinRate // this.treeListColumn_WinRate.Caption = "승률(%)"; - this.treeListColumn_WinRate.FieldName = "WinRate"; + this.treeListColumn_WinRate.FieldName = "FirstWinRate"; this.treeListColumn_WinRate.Name = "treeListColumn_WinRate"; this.treeListColumn_WinRate.Visible = true; this.treeListColumn_WinRate.VisibleIndex = 5; @@ -391,7 +391,7 @@ namespace Million_Hunter.HunterSubForm // treeListColumn_ProfitRate // this.treeListColumn_ProfitRate.Caption = "수익률(%)"; - this.treeListColumn_ProfitRate.FieldName = "ProfitRate"; + this.treeListColumn_ProfitRate.FieldName = "FirstProfitRate"; this.treeListColumn_ProfitRate.Format.FormatType = DevExpress.Utils.FormatType.Custom; this.treeListColumn_ProfitRate.Name = "treeListColumn_ProfitRate"; this.treeListColumn_ProfitRate.Visible = true; diff --git a/Million Hunter/HunterSubForm/SavedResultViewerForm.cs b/Million Hunter/HunterSubForm/SavedResultViewerForm.cs index 71e5a67..a25ad96 100644 --- a/Million Hunter/HunterSubForm/SavedResultViewerForm.cs +++ b/Million Hunter/HunterSubForm/SavedResultViewerForm.cs @@ -49,8 +49,18 @@ namespace Million_Hunter.HunterSubForm } // 결과 데이터 정보 가져오기 - foreach (var filePath in Directory.GetFiles(CommonProperty.SaveProgramDirecotryPath).ToList().FindAll(item => item.Contains(CommonProperty.InfoExtend))) - savedResultDatas.Add(FileManager.LoadResultDataInfoFromFile(filePath)); + 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); + savedResultDatas.Add(savedResult); + } + // 트리 리스트에 추가 treeList_SavedResultData.DataSource = savedResultDatas; @@ -105,14 +115,28 @@ namespace Million_Hunter.HunterSubForm var selectedResultData = (SavedResultData)treeList.GetDataRecordByNode(hitInfo.Node); - // Main 폼의 SaveResultData 초기화 + //Main 폼의 SaveResultData 초기화 _mainForm._saveResultData = null; - // Main 폼의 SaveResultData 초기화 (클론 복사 해야할 수 있음) + //Main 폼의 SaveResultData 초기화 (클론 복사 해야할 수 있음) _mainForm._saveResultData = selectedResultData.Clone(); + _mainForm._saveResultData.SearchResultList = + FileManager.LoadResultDataFromFile(selectedResultData.SavedResultDataPath); + + _mainForm._saveResultData.SavedInfoDataPath = selectedResultData.SavedResultDataPath; + _mainForm._saveResultData.SavedResultDataPath = selectedResultData.SavedResultDataPath; + _mainForm._saveResultData.SavedResultAnalysisDataPath = selectedResultData.SavedResultAnalysisDataPath; + + // 데이터가 있는 경우 버튼 색 변경 + if (_mainForm._saveResultData.SearchResultList != null) + { + _mainForm.simpleButton_ViewResultData.Appearance.BackColor = Color.FromArgb(128, 128, 255); + } + + this.DialogResult = DialogResult.OK; this.Close(); } } -} \ No newline at end of file +} \ No newline at end of file diff --git a/Million Hunter/MainForm.Designer.cs b/Million Hunter/MainForm.Designer.cs index ae0f544..88067c3 100644 --- a/Million Hunter/MainForm.Designer.cs +++ b/Million Hunter/MainForm.Designer.cs @@ -210,7 +210,7 @@ namespace Million_Hunter this.panelControl_IndicatorSetup.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) | System.Windows.Forms.AnchorStyles.Left) | System.Windows.Forms.AnchorStyles.Right))); - this.panelControl_IndicatorSetup.BorderStyle = DevExpress.XtraEditors.Controls.BorderStyles.NoBorder; + this.panelControl_IndicatorSetup.BorderStyle = DevExpress.XtraEditors.Controls.BorderStyles.Flat; this.panelControl_IndicatorSetup.Location = new System.Drawing.Point(19, 83); this.panelControl_IndicatorSetup.Name = "panelControl_IndicatorSetup"; this.panelControl_IndicatorSetup.Size = new System.Drawing.Size(885, 263); @@ -237,6 +237,8 @@ namespace Million_Hunter new DevExpress.XtraEditors.Controls.EditorButton(DevExpress.XtraEditors.Controls.ButtonPredefines.Combo)}); this.dateEdit_EndDateTime.Properties.CalendarTimeProperties.Buttons.AddRange(new DevExpress.XtraEditors.Controls.EditorButton[] { new DevExpress.XtraEditors.Controls.EditorButton(DevExpress.XtraEditors.Controls.ButtonPredefines.Combo)}); + this.dateEdit_EndDateTime.Properties.DisplayFormat.FormatString = "u"; + this.dateEdit_EndDateTime.Properties.DisplayFormat.FormatType = DevExpress.Utils.FormatType.DateTime; this.dateEdit_EndDateTime.Properties.Mask.EditMask = "u"; this.dateEdit_EndDateTime.Size = new System.Drawing.Size(193, 20); this.dateEdit_EndDateTime.TabIndex = 4; @@ -248,8 +250,13 @@ namespace Million_Hunter this.dateEdit_StartDateTime.Name = "dateEdit_StartDateTime"; this.dateEdit_StartDateTime.Properties.Buttons.AddRange(new DevExpress.XtraEditors.Controls.EditorButton[] { new DevExpress.XtraEditors.Controls.EditorButton(DevExpress.XtraEditors.Controls.ButtonPredefines.Combo)}); + this.dateEdit_StartDateTime.Properties.CalendarTimeEditing = DevExpress.Utils.DefaultBoolean.True; this.dateEdit_StartDateTime.Properties.CalendarTimeProperties.Buttons.AddRange(new DevExpress.XtraEditors.Controls.EditorButton[] { new DevExpress.XtraEditors.Controls.EditorButton(DevExpress.XtraEditors.Controls.ButtonPredefines.Combo)}); + this.dateEdit_StartDateTime.Properties.DisplayFormat.FormatString = "u"; + this.dateEdit_StartDateTime.Properties.DisplayFormat.FormatType = DevExpress.Utils.FormatType.DateTime; + this.dateEdit_StartDateTime.Properties.EditFormat.FormatString = "u"; + this.dateEdit_StartDateTime.Properties.EditFormat.FormatType = DevExpress.Utils.FormatType.DateTime; this.dateEdit_StartDateTime.Properties.Mask.EditMask = "u"; this.dateEdit_StartDateTime.Size = new System.Drawing.Size(193, 20); this.dateEdit_StartDateTime.TabIndex = 4; @@ -576,7 +583,6 @@ namespace Million_Hunter private System.Windows.Forms.GroupBox groupBox6; private DevExpress.XtraTreeList.TreeList treeList_BuySetupList; private DevExpress.XtraEditors.SimpleButton simpleButton_CalcurateData; - private DevExpress.XtraEditors.SimpleButton simpleButton_ViewResultData; private System.Windows.Forms.GroupBox groupBox7; private DevExpress.XtraEditors.SimpleButton simpleButton_SavedResultViewer; private DevExpress.XtraEditors.DateEdit dateEdit_StartDateTime; @@ -599,6 +605,7 @@ namespace Million_Hunter private System.Windows.Forms.GroupBox groupBox8; private System.Windows.Forms.GroupBox groupBox9; private DevExpress.XtraEditors.SimpleButton simpleButton_SaveTest; + public DevExpress.XtraEditors.SimpleButton simpleButton_ViewResultData; } } diff --git a/Million Hunter/MainForm.cs b/Million Hunter/MainForm.cs index 2f8cbd4..e9616ba 100644 --- a/Million Hunter/MainForm.cs +++ b/Million Hunter/MainForm.cs @@ -15,6 +15,8 @@ using Million.Manager; using Million.SaveData; using Microsoft.CodeAnalysis.CSharp.Scripting; using System.Threading.Tasks; +using DevExpress.Data.Helpers; +using System.Drawing; namespace Million_Hunter { @@ -265,123 +267,71 @@ namespace Million_Hunter var totalIndicator = new List(); totalIndicator.AddRange(buyIndicatorList); - totalIndicator.AddRange(sellIndicatorList); - - var candleTypeList = totalIndicator.Select(t => t.MCandleTimeType).ToList(); - candleTypeList.Add(CommonProperty.MCandleTimeType.M1); - candleTypeList = candleTypeList.Distinct().ToList(); + totalIndicator.AddRange(sellIndicatorList); var tableList = CommonProperty.selectedMarketOfPlaceList; var totalResultList = new List(); - //임시로 하나만 + Parallel.For(0, tableList.Count, i => { + //임시로 하나만 //for (var i = 0; i < tableList.Count; i++) //{ - var selectTable = tableList[i]; + var selectTable = tableList[i]; //data setting var distinctIndicator = IndicatorSetupManager.Distinct(totalIndicator); - var dic = new Dictionary>>(); - - foreach (var item in candleTypeList) - { - var candleDataListClass = DbServiceFunctions.GetCandleData(selectTable, - _saveResultData.StartDateTime, _saveResultData.EndDateTime, item); - - var indicatorSetUpList = distinctIndicator.Where(t => t.MCandleTimeType == item).ToList(); - foreach (var setup in indicatorSetUpList) - { - setup.excute(candleDataListClass.CandleDataLists_Im); - } - - dic[item] = ValidationCheckManager.SplitValidationCandleDataList(candleDataListClass.CandleDataLists_Im, item); - } - - var resultCandleDataList = new List(); + // 총 데이터 + var dic = DataManager.GetStandardData(totalIndicator, _saveResultData.StartDateTime, _saveResultData.EndDateTime, selectTable, distinctIndicator, true); // buy, sell 계산 var lossIndicator = new List(); - //var totalCalculateCandleList = new List(); - - foreach (var item in dic[CommonProperty.MCandleTimeType.M1]) - resultCandleDataList.AddRange(item); + // 1분봉 데이터 Setting + var resultCandleDataList = dic[CommonProperty.MCandleTimeType.M1]; resultCandleDataList = resultCandleDataList.Where(t => _saveResultData.StartDateTime <= t.DateTime && t.DateTime < _saveResultData.EndDateTime).ToList(); - // 최초와 cross의 조건먼저 계산이 필요함(선처리) - var subIndicator = totalIndicator.Where(t => t.SubIndicatorSetupType == CommonProperty.SubIndicatorSetupType.최초돌파 || - t.SubIndicatorSetupType == CommonProperty.SubIndicatorSetupType.크로스).ToList(); - var indiList = new List(); - foreach(var item in subIndicator) - indiList.AddRange(item.FirstOverSubRegExpression.Split(',').ToList()); + // Sub Indicator string list 반환 + var subIndStringiList = DataManager.GetSubIndicatorStringList(totalIndicator); - indiList = indiList.Distinct().ToList(); - - foreach(var item in indiList) - { - var indicator = totalIndicator.FirstOrDefault(t => t.IndexString == item); - if(indicator != null) - { - if (indicator.IndicatorType == CommonProperty.IndicatorType.가격비율) - { - //추후 가격도 처리 해야함 EX: 호가 단위 등등 - var temp = (PriceRateCondtionSetup)indicator; - if(temp.PriceRateSetupConditionType == CommonProperty.PriceRateSetupConditionType.비율) { - lossIndicator.Add(indicator); - continue; - } - } - var list = new List(); + // Sub Indicator Class + var subIndicator = totalIndicator.Where(t => subIndStringiList.Any(u => u == t.IndexString)).ToList(); - foreach (var parent in dic[indicator.MCandleTimeType]) list.AddRange(parent); + // 선처리 + CalculateManager.GetCalculateIndicator(totalIndicator, subIndStringiList, lossIndicator, _saveResultData.StartDateTime, + _saveResultData.EndDateTime, resultCandleDataList, subIndicator, dic); - list = list.Where(t => _saveResultData.StartDateTime <= t.DateTime && t.DateTime < _saveResultData.EndDateTime).ToList(); + + var totalIndi = totalIndicator.Select(t => t.IndexString).ToList(); - CalculateManager.SwitchFun(indicator, list, resultCandleDataList, subIndicator); - //totalCalculateCandleList.AddRange(CalculateManager.SwitchFun(indicator, list, resultCandleDataList)); - } - } + // 중복계산 방지 + foreach (var item in subIndStringiList) + totalIndi.Remove(item); // 후처리 - foreach (var indicator in totalIndicator) - { - if (indiList.Any(t => t == indicator.IndexString)) continue; - - if (indicator.IndicatorType == CommonProperty.IndicatorType.가격비율) - { - var temp = (PriceRateCondtionSetup)indicator; - - //추후 가격도 처리 해야함 EX: 호가 단위 등등 - if (temp.PriceRateSetupConditionType == CommonProperty.PriceRateSetupConditionType.비율) - { - lossIndicator.Add(indicator); - continue; - } - } - var list = new List(); - foreach (var parent in dic[indicator.MCandleTimeType]) list.AddRange(parent); - list = list.Where(t => _saveResultData.StartDateTime <= t.DateTime && t.DateTime < _saveResultData.EndDateTime).ToList(); - - CalculateManager.SwitchFun(indicator, list, resultCandleDataList, subIndicator); - //totalCalculateCandleList.AddRange(CalculateManager.SwitchFun(indicator, list, resultCandleDataList)); - } - - //계산되지 않는 범위의 데이터 Filter - //totalCalculateCandleList = totalCalculateCandleList.Where(t => t.DateTime >= _saveResultData.StartDateTime && t.DateTime < _saveResultData.EndDateTime).ToList(); + CalculateManager.GetCalculateIndicator(totalIndicator, totalIndi, lossIndicator, _saveResultData.StartDateTime, + _saveResultData.EndDateTime, resultCandleDataList, subIndicator, dic); + // 계산 로직 var resultLsit = ResultLogicManager.GetSearchResultList(resultCandleDataList, lossIndicator, _saveResultData.BuyRegularExpression, _saveResultData.SellRegularExpression, selectTable, totalIndicator); totalResultList.AddRange(resultLsit); - //} + //} }); + //수익 률 계산 로직 -> 이거는 추후 빼도 될듯 double totalVal = 0; double win = 0; double lose = 0; + double firstProfitRate = 0; + double firstWin = 0; + //승률, 수익률 계산 foreach (var item in totalResultList) { + if (item.FirstWinFlag) firstWin++; + + firstProfitRate += item.FirstEarningRate; win += item.WinCount; lose += item.LoseCount; totalVal += item.TotalEarningRate; @@ -414,7 +364,8 @@ namespace Million_Hunter tt /= totalResultList.Count; - + _saveResultData.FirstWinRate = (firstWin * 100) / totalResultList.Count; + _saveResultData.FirstProfitRate = firstProfitRate / totalResultList.Count; _saveResultData.WinRate = winRate; _saveResultData.ProfitRate = totalVal / totalResultList.Count; _saveResultData.SearchResultList = totalResultList; @@ -424,6 +375,13 @@ namespace Million_Hunter MessageBox.Show("데이터 저장 성공"); else MessageBox.Show("데이터 저장 실패"); + + // 데이터가 있는 경우 버튼 색 변경 + if (_saveResultData.SearchResultList != null) + { + simpleButton_ViewResultData.Appearance.BackColor = Color.FromArgb(128, 128, 255); + } + } @@ -437,7 +395,7 @@ namespace Million_Hunter return; } - var resultViewerForm = new ResultViewerForm(_saveResultData) { StartPosition = FormStartPosition.CenterScreen }; + var resultViewerForm = new ResultViewerForm(_saveResultData) { StartPosition = FormStartPosition.CenterScreen}; resultViewerForm.Visible = true; } @@ -448,8 +406,8 @@ namespace Million_Hunter if (savedResultViewerForm.ShowDialog() != DialogResult.OK) return; // 시간 데이터 추가 - dateEdit_StartDateTime.Text = _saveResultData.StartDateTime.Date.ToString(); - dateEdit_EndDateTime.Text = _saveResultData.EndDateTime.Date.ToString(); + dateEdit_StartDateTime.DateTime = _saveResultData.StartDateTime.Date; + dateEdit_EndDateTime.DateTime = _saveResultData.EndDateTime.Date; textEdit_BuyRegularExpression.Text = _saveResultData.BuyRegularExpression; textEdit_SellRegularExpression.Text = _saveResultData.SellRegularExpression; @@ -480,7 +438,8 @@ namespace Million_Hunter _saveResultData.StartDateTime = dateEdit_StartDateTime.DateTime; _saveResultData.EndDateTime = dateEdit_EndDateTime.DateTime; _saveResultData.SavedDateTime = DateTime.Now; - _saveResultData.SearchResultList = new List(); + if(_saveResultData == null) + _saveResultData.SearchResultList = new List(); _saveResultData.BuyRegularExpression = textEdit_BuyRegularExpression.Text; _saveResultData.SellRegularExpression = textEdit_SellRegularExpression.Text; diff --git a/Million Hunter/Million Hunter.csproj b/Million Hunter/Million Hunter.csproj index 4a3de8d..5358c22 100644 --- a/Million Hunter/Million Hunter.csproj +++ b/Million Hunter/Million Hunter.csproj @@ -179,7 +179,6 @@ MainForm.cs - ResXFileCodeGenerator Resources.Designer.cs diff --git a/Million Prototype/Form1.cs b/Million Prototype/Form1.cs index dd3027b..17812c5 100644 --- a/Million Prototype/Form1.cs +++ b/Million Prototype/Form1.cs @@ -114,15 +114,15 @@ namespace Million_Prototype private void button3_Click(object sender, EventArgs e) { List list = null; - DataSettingManager realTimeMsg = null; + RealtimeDataSettingManager realTimeMsg = null; int firstFlag = 0; for (; ; ) { if (firstFlag == 0) { - realTimeMsg = new DataSettingManager(null, PaymentType.KRW); + realTimeMsg = new RealtimeDataSettingManager(null, PaymentType.KRW); realTimeMsg.StartGetRealTimeTicker(null); - var dsm = new DataSettingManager(null, PaymentType.KRW); + var dsm = new RealtimeDataSettingManager(null, PaymentType.KRW); list = dsm.GetRealTimeCandleData(MCandleTimeType.M1, 200); firstFlag = 1; } diff --git a/Million/CommonProperty.cs b/Million/CommonProperty.cs index 65adf79..901c517 100644 --- a/Million/CommonProperty.cs +++ b/Million/CommonProperty.cs @@ -296,6 +296,8 @@ namespace Million public static string InfoExtend = ".info"; // Save 결과 리스트 파일 확장자 public static string DataExtend = ".data"; + // Save 결과 분석 데이터 + public static string AnalysisExtendFolder = "_analysis"; #endregion } diff --git a/Million/Data/AnalysisData.cs b/Million/Data/AnalysisData.cs new file mode 100644 index 0000000..17c51f4 --- /dev/null +++ b/Million/Data/AnalysisData.cs @@ -0,0 +1,74 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Million.Data +{ + [Serializable] + public class AnalysisData + { + + // 결과에 포함 및 제외 조건 + public bool Inclusion { get; set; } = true; + + // 거래소 + public string ExchangePlace { get; set; } + + // 종목 코드 + public string CodeFullName { get; set; } + + // 종목 이름 + public string KorName { get; set; } + + // 기간 내 총 구매 횟수 + public int BuyCountForTime { get; set; } + + // 구매 시간 + public DateTime StartDate { get; set; } + + // 구매 가격 + public double BuyValue { get; set; } + + // 판매 시간 + public DateTime EndDate { get; set; } + + // 판매 가격 + public double SellValue { get; set; } + + // 승률 + public double EarningRate { get; set; } + + // 수익률 + public bool WinFlag { get; set; } + + // 기타 기입 내용 + public string Description { get; set; } + + // 원본 데이터 참조 + public SearchResult OriginalSearchResult { get; set; } + + public static AnalysisData GetAnalysisData(bool Inclusion, string ExchangePlace, string CodeFullName, string KorName, + int BuyCountForTime, DateTime StartDate, double BuyValue, DateTime EndDate, double SellValue, + double EarningRate, bool WinFlag, string Description, SearchResult OriginalSearchResult) + { + var analysis = new AnalysisData(); + analysis.Inclusion = Inclusion; + analysis.ExchangePlace = ExchangePlace; + analysis.CodeFullName = CodeFullName; + analysis.KorName = KorName; + analysis.BuyCountForTime = BuyCountForTime; + analysis.StartDate = StartDate; + analysis.BuyValue = BuyValue; + analysis.EndDate = EndDate; + analysis.SellValue = SellValue; + analysis.EarningRate = EarningRate; + analysis.WinFlag = WinFlag; + analysis.Description = Description; + analysis.OriginalSearchResult = OriginalSearchResult; + + return analysis; + } + } +} diff --git a/Million/Data/BollingerData.cs b/Million/Data/BollingerData.cs index 90d0c23..16fa9ab 100644 --- a/Million/Data/BollingerData.cs +++ b/Million/Data/BollingerData.cs @@ -6,6 +6,7 @@ using System.Threading.Tasks; namespace Million.Data { + [Serializable] public class BollingerData : IndicatorData { public MovingAverageData movingAverage; diff --git a/Million/Data/CandleData.cs b/Million/Data/CandleData.cs index 4160c22..e58879c 100644 --- a/Million/Data/CandleData.cs +++ b/Million/Data/CandleData.cs @@ -4,6 +4,7 @@ using static Million.CommonProperty; namespace Million.Data { + [Serializable] public class CandleData { // 시간 @@ -23,13 +24,10 @@ namespace Million.Data public int CandleTimeType { get; set; } public Dictionary IndicatorDic { get; set; } = new Dictionary(); - public Dictionary SellLogicFlag { get; set; } = new Dictionary(); - public Dictionary CalculateFlag { get; set; } = new Dictionary(); - public CandleType CandleType { get; set; } = CandleType.None; /// diff --git a/Million/Data/CandleDataList.cs b/Million/Data/CandleDataList.cs index cc49a83..abf69f2 100644 --- a/Million/Data/CandleDataList.cs +++ b/Million/Data/CandleDataList.cs @@ -1,7 +1,9 @@ -using System.Collections.Generic; +using System; +using System.Collections.Generic; namespace Million.Data { + [Serializable] public class CandleDataList { // 코인 종목 diff --git a/Million/Data/IchimokData.cs b/Million/Data/IchimokData.cs index c9bf3aa..afb1ec9 100644 --- a/Million/Data/IchimokData.cs +++ b/Million/Data/IchimokData.cs @@ -6,6 +6,7 @@ using System.Threading.Tasks; namespace Million.Data { + [Serializable] public class IchimokData : IndicatorData { /// diff --git a/Million/Data/IndicatorData.cs b/Million/Data/IndicatorData.cs index a7dbfaa..b3dbe5e 100644 --- a/Million/Data/IndicatorData.cs +++ b/Million/Data/IndicatorData.cs @@ -9,43 +9,44 @@ namespace Million.Data /// /// 결과값 저장 클레스 원형 /// + [Serializable] public class IndicatorData { /// /// 종가값 위,아래 비교 - 시가 돌파여부 검색 /// - public CommonProperty.Indicator_over indicator_over = CommonProperty.Indicator_over.없음; + public CommonProperty.Indicator_over indicator_over { get; set; } = CommonProperty.Indicator_over.없음; /// /// 종가로 계산할때 해당 봉 고가 값 /// - public double highValue = 0; + public double highValue { get; set; } = 0; /// /// 종가로 계산할때 해당 봉 고가 값 /// - public double lowValue = 0; + public double lowValue { get; set; } = 0; /// /// 종가로 계산할때 해당 봉 시가 값 /// - public double startValue = 0; + public double startValue { get; set; } = 0; /// /// 값 /// - public double value = 0; + public double value { get; set; } = 0; /// /// 돌파지점과 종가가 같아지는 값 /// 0이면 값 없음 /// - public double overlapValue = 0; + public double overlapValue { get; set; } = 0; /// /// 상,하 돌파 여부 /// - public CommonProperty.OverStatus overStatus = CommonProperty.OverStatus.None; + public CommonProperty.OverStatus overStatus { get; set; } = CommonProperty.OverStatus.None; /// /// 데이터 존재 여부 반환 diff --git a/Million/Data/MarketData.cs b/Million/Data/MarketData.cs index 908838f..ac85beb 100644 --- a/Million/Data/MarketData.cs +++ b/Million/Data/MarketData.cs @@ -1,5 +1,8 @@ -namespace Million.Data +using System; + +namespace Million.Data { + [Serializable] public class MarketData { // 거래소 diff --git a/Million/Data/MovingAverageData.cs b/Million/Data/MovingAverageData.cs index f930fa6..78eef73 100644 --- a/Million/Data/MovingAverageData.cs +++ b/Million/Data/MovingAverageData.cs @@ -6,6 +6,7 @@ using System.Threading.Tasks; namespace Million.Data { + [Serializable] public class MovingAverageData { public int period; diff --git a/Million/Data/SearchResult.cs b/Million/Data/SearchResult.cs index 70a474c..fc88aca 100644 --- a/Million/Data/SearchResult.cs +++ b/Million/Data/SearchResult.cs @@ -22,6 +22,9 @@ namespace Million.Data public string CodeFullName { get; set; } + public double FirstEarningRate { get; set; } + public bool FirstWinFlag { get; set; } = false; + public DateTime StartDate { get; set; } public DateTime EndDate { get; set; } @@ -29,9 +32,9 @@ namespace Million.Data public List BuyEarningRate { get; set; } = new List(); public List BuyValueList { get; set; } = new List(); - public double SellValue; + public double SellValue { get; set; } - public double TotalEarningRate; + public double TotalEarningRate { get; set; } public int WinCount { get; set; } = 0; public int LoseCount { get; set; } = 0; diff --git a/Million/FileManagement/FileContoler.cs b/Million/FileManagement/FileContoler.cs index 2ac456d..605456a 100644 --- a/Million/FileManagement/FileContoler.cs +++ b/Million/FileManagement/FileContoler.cs @@ -6,6 +6,7 @@ using System.Runtime.Serialization.Formatters.Binary; using System.Text; using System.Threading.Tasks; using DevExpress.Xpo; +using DevExpress.XtraTreeList.Nodes; using DocumentFormat.OpenXml.Drawing; using Million.Data; using Million.SaveData; @@ -75,11 +76,29 @@ namespace Million.FileDBManagement try { - // saveResultData 저장하기 - SaveToBinaryFile(savedResultData.SearchResultList, guid.ToString() + CommonProperty.DataExtend); // Info Data 저장하기 SaveToBinaryFile(savedResultData, guid.ToString() + CommonProperty.InfoExtend); + // saveResultData 저장하기 + SaveToBinaryFile(savedResultData.SearchResultList, guid.ToString() + CommonProperty.DataExtend); + + return true; + } + catch (Exception) { return false; } + } + + // 결과 분석 데이터 저장하기 + public static bool SavedResultAnalysisDataToFile(SavedAnalysisData savedAnalysisData, string AnalysisFolderPath) + { + try + { + if (!Directory.Exists(AnalysisFolderPath)) + Directory.CreateDirectory(AnalysisFolderPath); + + // 저장하기 + var guid = Guid.NewGuid(); + SaveToBinaryFile(savedAnalysisData,null, AnalysisFolderPath + "\\" + guid); + return true; } catch (Exception) { return false; } @@ -100,8 +119,15 @@ namespace Million.FileDBManagement } + // 결과 분석 데이터 불러오기 + public static TreeListNodes LoadResultAnalysisDataFromFile(string fileFullPath) + { + var savedResultData = (TreeListNodes)LoadFormBinaryFile(fileFullPath); + return savedResultData; + } + // 클래스 Binary 파일로 저장 - public static bool SaveToBinaryFile(object saveData, string fileName) + public static bool SaveToBinaryFile(object saveData, string fileName, string fullfilePath = null) { var baBinaryFormatter = new BinaryFormatter(); Stream stream = null; @@ -111,6 +137,8 @@ namespace Million.FileDBManagement var directoryInfo = new DirectoryInfo(CommonProperty.SaveProgramDirecotryPath); var fileFullPath = string.Format(@"{0}\{1}", directoryInfo.FullName, fileName); + if (fullfilePath != null) + fileFullPath = fullfilePath; // 폴더 없으면 파일 생성 if (!directoryInfo.Exists) @@ -122,7 +150,7 @@ namespace Million.FileDBManagement return true; } - catch (Exception) + catch (Exception e) { return false; } diff --git a/Million/Manager/CalculateManager.cs b/Million/Manager/CalculateManager.cs index f6e974b..6451ed2 100644 --- a/Million/Manager/CalculateManager.cs +++ b/Million/Manager/CalculateManager.cs @@ -1,4 +1,5 @@ using Million.Data; +using Million.DbManagement; using Million.IndicatorConditionSetup; using System; using System.Collections.Generic; @@ -428,30 +429,32 @@ namespace Million.Manager for (var i = 0; i < parentCandleDataList.Count; i++) { var parent = parentCandleDataList[i]; - if (!parent.IndicatorDic.ContainsKey(subSetup.IndexString)) continue; + var subKey = GetKeyData(subSetup); + if (!parent.IndicatorDic.ContainsKey(subKey)) continue; - var subIndiOverlapVal = parent.IndicatorDic[subSetup.IndexString].overlapValue; - var overlapValue = parent.IndicatorDic[setUp.IndexString].overlapValue; + var subIndiOverlapVal = parent.IndicatorDic[subKey].overlapValue; + + var overlapValue = GetValueData(setUp, parent, key); // 고가 - if(type == 1) + if (type == 1) { - if (parent.IndicatorDic[subSetup.IndexString].highValue != 0 && - parent.IndicatorDic[setUp.IndexString].highValue != 0) + if (parent.IndicatorDic[subKey].highValue != 0 && + parent.IndicatorDic[key].highValue != 0) { - subIndiOverlapVal = parent.IndicatorDic[subSetup.IndexString].highValue; - overlapValue = parent.IndicatorDic[setUp.IndexString].highValue; + subIndiOverlapVal = parent.IndicatorDic[subKey].highValue; + overlapValue = parent.IndicatorDic[key].highValue; } } // 저가 if(type == 2) { - if (parent.IndicatorDic[subSetup.IndexString].lowValue != 0 && - parent.IndicatorDic[setUp.IndexString].lowValue != 0) + if (parent.IndicatorDic[subKey].lowValue != 0 && + parent.IndicatorDic[key].lowValue != 0) { - subIndiOverlapVal = parent.IndicatorDic[subSetup.IndexString].lowValue; - overlapValue = parent.IndicatorDic[setUp.IndexString].lowValue; + subIndiOverlapVal = parent.IndicatorDic[subKey].lowValue; + overlapValue = parent.IndicatorDic[key].lowValue; } } @@ -489,7 +492,7 @@ namespace Million.Manager if (((MovingAverageConditionSetup)subSetup).MovingAverageType == MovingAverageType.거래량) childs = GetChildrenDatas(parent, subSetup.MCandleTimeType, childrenCandleDataList); - var subIndiOver = setUp.GetQuoteValue(subList, childs); + var subIndiOver = subSetup.GetQuoteValue(subList, childs); double overlapVal = 0; foreach(var item in indiOver) { @@ -499,57 +502,39 @@ namespace Million.Manager break; } } + parent.CalculateFlag[setUp.IndexString] = true; + + if (!parent.IndicatorDic.ContainsKey(key)) + { + parent.IndicatorDic[key] = new IndicatorData(); + parent.IndicatorDic[key].overlapValue = overlapVal; + } + else + { + parent.IndicatorDic[key].overlapValue = overlapVal; + } childs = GetChildrenDatas(parent, setUp.MCandleTimeType, childrenCandleDataList); - - foreach(var item in childs) + + foreach (var item in childs) { - if(item.EndValue > overlapVal) + if (item.CalculateFlag[setUp.IndexString]) continue; + + item.CalculateFlag[setUp.IndexString] = true; + + if (!(item.HighValue <= overlapVal && item.LowValue >= overlapVal)) { - item.CalculateFlag[setUp.IndexString] = true; - parent.CalculateFlag[setUp.IndexString] = true; + overlapVal = item.StartValue; + } - if (parent.IndicatorDic.ContainsKey(key)) - { - parent.IndicatorDic[key].overlapValue = overlapVal; - } - else - { - parent.IndicatorDic[key] = new IndicatorData(); - parent.IndicatorDic[key] = parent.IndicatorDic[key]; - parent.IndicatorDic[key].overlapValue = overlapVal; - } - - if (item.IndicatorDic.ContainsKey(key)) - { - if (setUp.CrossType == CrossType.CrossOverStatus) - { - item.IndicatorDic[key].overlapValue = overlapVal; - } - else - { - if (item.StartValue > overlapVal) - item.IndicatorDic[key].overlapValue = item.StartValue; - else - item.IndicatorDic[key].overlapValue = overlapVal; - } - } - else - { - item.IndicatorDic[key] = new IndicatorData(); - item.IndicatorDic[key] = parent.IndicatorDic[key]; - if (setUp.CrossType == CrossType.CrossOverStatus) - { - item.IndicatorDic[key].overlapValue = overlapVal; - } - else - { - if (item.StartValue > overlapVal) - item.IndicatorDic[key].overlapValue = item.StartValue; - else - item.IndicatorDic[key].overlapValue = overlapVal; - } - } + if (!item.IndicatorDic.ContainsKey(key)) + { + item.IndicatorDic[key] = new IndicatorData(); + item.IndicatorDic[key].overlapValue = overlapVal; + } + else + { + item.IndicatorDic[key].overlapValue = overlapVal; } } @@ -778,7 +763,7 @@ namespace Million.Manager { if (!item.IndicatorDic.ContainsKey(key)) continue; double value = GetValue(item, setUp); - var overlapData = GetOverlapValueData(setUp, item, key); + var overlapData = GetValueData(setUp, item, key); if (CompareSettingValueOfTranspierce(setUp.IndicatorOver, overlapData, value)) { @@ -852,6 +837,10 @@ namespace Million.Manager child.IndicatorDic[key] = new IndicatorData(); child.IndicatorDic[key] = item.IndicatorDic[key]; } + else + { + child.IndicatorDic[key] = item.IndicatorDic[key]; + } if (!trueVal) { @@ -866,7 +855,13 @@ namespace Million.Manager if (trueVal) { child.CalculateFlag[setUp.IndexString] = true; - child.IndicatorDic[key].overlapValue = val; + if(child.IndicatorDic.ContainsKey(key)) + child.IndicatorDic[key].overlapValue = val; + else + { + child.IndicatorDic[key] = new IndicatorData(); + child.IndicatorDic[key].overlapValue = val; + } } } } @@ -928,6 +923,37 @@ namespace Million.Manager return false; } + /// + /// 계산된 값 가져오는 함수 + /// + /// + /// + /// + /// + private static double GetValueData(IndicatorCoditionSetup setUp, CandleData candleData, string key) + { + var data = candleData.IndicatorDic[key].value; + + #region 비교할 데이터 추출 + if (candleData.IndicatorDic[key].GetType() == typeof(IchimokData)) + { + if (((IchimokuConditionSetup)setUp).IndicatorIchmokuOverLine == CommonProperty.Indicator_IchmokuOverLine.선행스팬1) + { + data = ((IchimokData)candleData.IndicatorDic[key]).value; + } + else if (((IchimokuConditionSetup)setUp).IndicatorIchmokuOverLine == CommonProperty.Indicator_IchmokuOverLine.선행스팬2) + { + data = ((IchimokData)candleData.IndicatorDic[key]).value2; + } + else if (((IchimokuConditionSetup)setUp).IndicatorIchmokuOverLine == CommonProperty.Indicator_IchmokuOverLine.선행스팬1OR2중고가) + { + data = ((IchimokData)candleData.IndicatorDic[key]).GetOverValue(); + } + } + #endregion + return data; + } + /// /// 조건별 Overlap value 데이터 리턴 /// @@ -953,7 +979,7 @@ namespace Million.Manager { overlapData = ((IchimokData)candleData.IndicatorDic[key]).GetOverValue(); } - } + } #endregion return overlapData; } @@ -1093,5 +1119,42 @@ namespace Million.Manager if (list.Count == count) return list; return new List(); } + + /// + /// Indicator 계산 로직 + /// + /// + /// + /// + /// + /// + /// + /// + public static void GetCalculateIndicator(List totalIndicator, List indiList, List lossIndicator, + DateTime startDate, DateTime endDate, List resultCandleDataList, List subIndicator, Dictionary> parentList) + { + foreach (var item in indiList) + { + var indicator = totalIndicator.FirstOrDefault(t => t.IndexString == item); + if (indicator != null) + { + if (indicator.IndicatorType == CommonProperty.IndicatorType.가격비율) + { + //추후 가격도 처리 해야함 EX: 호가 단위 등등 + var temp = (PriceRateCondtionSetup)indicator; + if (temp.PriceRateSetupConditionType == CommonProperty.PriceRateSetupConditionType.비율) + { + lossIndicator.Add(indicator); + continue; + } + } + var list = parentList[indicator.MCandleTimeType]; + + list = list.Where(t => startDate <= t.DateTime && t.DateTime < endDate).ToList(); + + SwitchFun(indicator, list, resultCandleDataList, subIndicator); + } + } + } } } diff --git a/Million/Manager/DataManager.cs b/Million/Manager/DataManager.cs new file mode 100644 index 0000000..04bdfa7 --- /dev/null +++ b/Million/Manager/DataManager.cs @@ -0,0 +1,84 @@ +using Million.Data; +using Million.DbManagement; +using Million.IndicatorConditionSetup; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using static Million.CommonProperty; + +namespace Million.Manager +{ + /// + /// 데이터 구성 Manager Class + /// + public static class DataManager + { + + /// + /// DB에서 데이터 가져오며 Setting 처리 함 + /// + /// + /// + /// + /// + /// + /// + public static Dictionary> GetStandardData(List totalIndicator, DateTime startDate, + DateTime endDate, MarketData market, List distinctIndicator, bool flag = false) + { + var candleTypeList = totalIndicator.Select(t => t.MCandleTimeType).ToList(); + candleTypeList.Add(CommonProperty.MCandleTimeType.M1); + candleTypeList = candleTypeList.Distinct().ToList(); + + + var dic = new Dictionary>(); + //계산로직에 필요한 Data setting + foreach (var item in candleTypeList) + { + var candleDataListClass = DbServiceFunctions.GetCandleData(market, + startDate, endDate, item); + + var indicatorSetUpList = distinctIndicator.Where(t => t.MCandleTimeType == item).ToList(); + foreach (var setup in indicatorSetUpList) + { + setup.excute(candleDataListClass.CandleDataLists_Im); + } + var list = new List(); + if (flag) + { + var parentData = ValidationCheckManager.SplitValidationCandleDataList(candleDataListClass.CandleDataLists_Im, item); + foreach (var parent in parentData) list.AddRange(parent); + dic.Add(item, list); + } + else + dic.Add(item, candleDataListClass.CandleDataLists_Im); + } + return dic; + } + + /// + /// Sub Indicator List String 반환 Function + /// + /// + /// + public static List GetSubIndicatorStringList(List totalIndicator) + { + // 최초와 cross의 조건먼저 계산이 필요함(선처리) + var parentIndicator = totalIndicator.Where(t => t.SubIndicatorSetupType == CommonProperty.SubIndicatorSetupType.최초돌파 || + t.SubIndicatorSetupType == CommonProperty.SubIndicatorSetupType.크로스).ToList(); + + var subIndStringiList = new List(); + foreach (var item in parentIndicator) + { + var subRegExpression = item.FirstOverSubRegExpression; + if (item.SubIndicatorSetupType == CommonProperty.SubIndicatorSetupType.크로스) + subRegExpression = item.CrossSubRegExpression; + subIndStringiList.AddRange(subRegExpression.Split(',').ToList()); + } + subIndStringiList = subIndStringiList.Distinct().ToList(); + return subIndStringiList; + } + } +} diff --git a/Million/Manager/DataSettingManager.cs b/Million/Manager/RealtimeDataSettingManager.cs similarity index 98% rename from Million/Manager/DataSettingManager.cs rename to Million/Manager/RealtimeDataSettingManager.cs index d5d9f92..972c476 100644 --- a/Million/Manager/DataSettingManager.cs +++ b/Million/Manager/RealtimeDataSettingManager.cs @@ -15,7 +15,7 @@ namespace Million.Manager /// /// Data Setting하는 Manager Class /// - public class DataSettingManager + public class RealtimeDataSettingManager { /// /// Ticker에 들어갈 데이터 @@ -33,7 +33,7 @@ namespace Million.Manager /// /// 생성자 /// - public DataSettingManager(List codeFullNameList, PaymentType buyType, string tableName = "Upbit") + public RealtimeDataSettingManager(List codeFullNameList, PaymentType buyType, string tableName = "Upbit") { this.buyType = buyType; marketList = DbServiceFunctions.GetMarketDatas(tableName, Enum.GetName(typeof(PaymentType), buyType)); @@ -86,7 +86,7 @@ namespace Million.Manager } return returnData; - } + } public void StartGetRealTimeTicker(object state, int duTime = 0, int period = 50) { diff --git a/Million/Manager/ResultLogicManager.cs b/Million/Manager/ResultLogicManager.cs index 735e084..38560d8 100644 --- a/Million/Manager/ResultLogicManager.cs +++ b/Million/Manager/ResultLogicManager.cs @@ -147,7 +147,10 @@ namespace Million.Manager var result = new SearchResult(); var rate = ((item.SellValue - buyValue) / buyValue) * 100; + result.FirstEarningRate = rate; result.EndDate = item.DateTime; + result.CodeFullName = market.CodeFullName; + result.MarketData = market; result.BuyEarningRate.Add(rate); result.BuyValueList.Add(buyValue); result.BuyList.ConGoodsData = market; @@ -158,6 +161,7 @@ namespace Million.Manager result.TotalEarningRate = rate; result.WinCount = rate > 0 ? 1 : 0; result.LoseCount = rate < 0 ? 1 : 0; + result.FirstWinFlag = rate > 0 ? true : false; result.TermCandleDataList = termList; resultList.Add(result); removeBuyList.Add(buy); @@ -182,16 +186,25 @@ namespace Million.Manager item.SellValue = val - Math.Round(val * 0.0005); var result = new SearchResult(); - + result.CodeFullName = market.CodeFullName; + result.MarketData = market; result.BuyList.ConGoodsData = market; result.SellData = item; result.SellValue = item.SellValue; result.EndDate = item.DateTime; - + double firstRate = 0; double totalRate = 0; + var firstFlag = true; + var firstWinFlag = false; foreach (var buy in buyList) { var rate = ((item.SellValue - buy.BuyValue) / buy.BuyValue) * 100; + + if (firstFlag) { + firstRate = rate; + firstFlag = false; + firstWinFlag = rate > 0 ? true : false; + } totalRate += rate; if(rate > 0) @@ -209,7 +222,8 @@ namespace Million.Manager result.StartDate = result.BuyList.CandleDataLists_Im[0].DateTime; result.TermCandleDataList = termList; - + result.FirstWinFlag = firstWinFlag; + result.FirstEarningRate = firstRate; result.TotalEarningRate = totalRate; resultList.Add(result); diff --git a/Million/Million Core.csproj b/Million/Million Core.csproj index 92bcc98..7648bf1 100644 --- a/Million/Million Core.csproj +++ b/Million/Million Core.csproj @@ -152,6 +152,7 @@ + @@ -190,7 +191,8 @@ - + + @@ -200,6 +202,7 @@ + UserControl diff --git a/Million/SaveData/SavedAnalysisData.cs b/Million/SaveData/SavedAnalysisData.cs new file mode 100644 index 0000000..4588441 --- /dev/null +++ b/Million/SaveData/SavedAnalysisData.cs @@ -0,0 +1,31 @@ +using Million.Data; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Million.SaveData +{ + [Serializable] + public class SavedAnalysisData + { + // 적용된 필터 스트링 + public string TreeListFilterString { get; set; } + + // 분석 데이터 리스트 + public List AnalysisDataList { get; set; } = null; + + // 기타 + public string Description { get; set; } = null; + + // 승률 + public double FirstWinRate { get; set; } + + // 수익률 + public double FirstProfitRate { get; set; } + + // 저장 시간 + public DateTime SavedTime { get; set; } + } +} diff --git a/Million/SaveData/SavedResultData.cs b/Million/SaveData/SavedResultData.cs index 4ba2c50..54b7c2e 100644 --- a/Million/SaveData/SavedResultData.cs +++ b/Million/SaveData/SavedResultData.cs @@ -30,6 +30,16 @@ namespace Million.SaveData // 정규식 (Sell) public string SellRegularExpression { get; set; } + [field: NonSerialized] + // 실제 데이터 경로 (Data Info) + public string SavedInfoDataPath { get; set; } + // 실제 데이터 경로 (결과 Data) + [field: NonSerialized] + public string SavedResultDataPath { get; set; } + // 실제 데이터 경로 (결과 분석 데이터) + [field: NonSerialized] + public string SavedResultAnalysisDataPath { get; set; } + [field: NonSerialized] // 결과 데이터 public List SearchResultList { get; set; } @@ -39,6 +49,10 @@ namespace Million.SaveData public double WinRate { get; set; } // 수익휼 public double ProfitRate { get; set; } + // 승률 (매도 전 첫번째만 포함) + public double FirstProfitRate { get; set; } + // 수익률 (매도 전 첫번째만 포함) + public double FirstWinRate { get; set; } public SavedResultData Clone() {