Merge branch 'master' of http://222.96.13.116/Million
This commit is contained in:
@@ -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");
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
@@ -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<AnalysisData>_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<AnalysisData>();
|
||||
|
||||
// 데이터 가공하기 (List<AnalysisData> _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<AnalysisData>();
|
||||
|
||||
// 승률 계산하기
|
||||
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);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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;
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
11
Million Hunter/MainForm.Designer.cs
generated
11
Million Hunter/MainForm.Designer.cs
generated
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -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<IndicatorCoditionSetup>();
|
||||
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<SearchResult>();
|
||||
//임시로 하나만
|
||||
|
||||
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<CommonProperty.MCandleTimeType, List<List<CandleData>>>();
|
||||
|
||||
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<CandleData>();
|
||||
// 총 데이터
|
||||
var dic = DataManager.GetStandardData(totalIndicator, _saveResultData.StartDateTime, _saveResultData.EndDateTime, selectTable, distinctIndicator, true);
|
||||
|
||||
// buy, sell 계산
|
||||
var lossIndicator = new List<IndicatorCoditionSetup>();
|
||||
//var totalCalculateCandleList = new List<CandleData>();
|
||||
|
||||
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<string>();
|
||||
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<CandleData>();
|
||||
// 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<CandleData>();
|
||||
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<SearchResult>();
|
||||
if(_saveResultData == null)
|
||||
_saveResultData.SearchResultList = new List<SearchResult>();
|
||||
_saveResultData.BuyRegularExpression = textEdit_BuyRegularExpression.Text;
|
||||
_saveResultData.SellRegularExpression = textEdit_SellRegularExpression.Text;
|
||||
|
||||
|
||||
@@ -179,7 +179,6 @@
|
||||
<EmbeddedResource Include="MainForm.resx">
|
||||
<DependentUpon>MainForm.cs</DependentUpon>
|
||||
</EmbeddedResource>
|
||||
<EmbeddedResource Include="Properties\licenses.licx" />
|
||||
<EmbeddedResource Include="Properties\Resources.resx">
|
||||
<Generator>ResXFileCodeGenerator</Generator>
|
||||
<LastGenOutput>Resources.Designer.cs</LastGenOutput>
|
||||
|
||||
@@ -114,15 +114,15 @@ namespace Million_Prototype
|
||||
private void button3_Click(object sender, EventArgs e)
|
||||
{
|
||||
List<CandleDataList> 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;
|
||||
}
|
||||
|
||||
@@ -296,6 +296,8 @@ namespace Million
|
||||
public static string InfoExtend = ".info";
|
||||
// Save 결과 리스트 파일 확장자
|
||||
public static string DataExtend = ".data";
|
||||
// Save 결과 분석 데이터
|
||||
public static string AnalysisExtendFolder = "_analysis";
|
||||
#endregion
|
||||
|
||||
}
|
||||
|
||||
74
Million/Data/AnalysisData.cs
Normal file
74
Million/Data/AnalysisData.cs
Normal file
@@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -6,6 +6,7 @@ using System.Threading.Tasks;
|
||||
|
||||
namespace Million.Data
|
||||
{
|
||||
[Serializable]
|
||||
public class BollingerData : IndicatorData
|
||||
{
|
||||
public MovingAverageData movingAverage;
|
||||
|
||||
@@ -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<string, IndicatorData> IndicatorDic { get; set; } = new Dictionary<string, IndicatorData>();
|
||||
|
||||
public Dictionary<string, bool> SellLogicFlag { get; set; } = new Dictionary<string, bool>();
|
||||
|
||||
public Dictionary<string, bool> CalculateFlag { get; set; } = new Dictionary<string, bool>();
|
||||
|
||||
|
||||
|
||||
public CandleType CandleType { get; set; } = CandleType.None;
|
||||
|
||||
/// <summary>
|
||||
|
||||
@@ -1,7 +1,9 @@
|
||||
using System.Collections.Generic;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
|
||||
namespace Million.Data
|
||||
{
|
||||
[Serializable]
|
||||
public class CandleDataList
|
||||
{
|
||||
// 코인 종목
|
||||
|
||||
@@ -6,6 +6,7 @@ using System.Threading.Tasks;
|
||||
|
||||
namespace Million.Data
|
||||
{
|
||||
[Serializable]
|
||||
public class IchimokData : IndicatorData
|
||||
{
|
||||
/// <summary>
|
||||
|
||||
@@ -9,43 +9,44 @@ namespace Million.Data
|
||||
/// <summary>
|
||||
/// 결과값 저장 클레스 원형
|
||||
/// </summary>
|
||||
[Serializable]
|
||||
public class IndicatorData
|
||||
{
|
||||
/// <summary>
|
||||
/// 종가값 위,아래 비교 - 시가 돌파여부 검색
|
||||
/// </summary>
|
||||
public CommonProperty.Indicator_over indicator_over = CommonProperty.Indicator_over.없음;
|
||||
public CommonProperty.Indicator_over indicator_over { get; set; } = CommonProperty.Indicator_over.없음;
|
||||
|
||||
/// <summary>
|
||||
/// 종가로 계산할때 해당 봉 고가 값
|
||||
/// </summary>
|
||||
public double highValue = 0;
|
||||
public double highValue { get; set; } = 0;
|
||||
|
||||
/// <summary>
|
||||
/// 종가로 계산할때 해당 봉 고가 값
|
||||
/// </summary>
|
||||
public double lowValue = 0;
|
||||
public double lowValue { get; set; } = 0;
|
||||
|
||||
/// <summary>
|
||||
/// 종가로 계산할때 해당 봉 시가 값
|
||||
/// </summary>
|
||||
public double startValue = 0;
|
||||
public double startValue { get; set; } = 0;
|
||||
|
||||
/// <summary>
|
||||
/// 값
|
||||
/// </summary>
|
||||
public double value = 0;
|
||||
public double value { get; set; } = 0;
|
||||
|
||||
/// <summary>
|
||||
/// 돌파지점과 종가가 같아지는 값
|
||||
/// 0이면 값 없음
|
||||
/// </summary>
|
||||
public double overlapValue = 0;
|
||||
public double overlapValue { get; set; } = 0;
|
||||
|
||||
/// <summary>
|
||||
/// 상,하 돌파 여부
|
||||
/// </summary>
|
||||
public CommonProperty.OverStatus overStatus = CommonProperty.OverStatus.None;
|
||||
public CommonProperty.OverStatus overStatus { get; set; } = CommonProperty.OverStatus.None;
|
||||
|
||||
/// <summary>
|
||||
/// 데이터 존재 여부 반환
|
||||
|
||||
@@ -1,5 +1,8 @@
|
||||
namespace Million.Data
|
||||
using System;
|
||||
|
||||
namespace Million.Data
|
||||
{
|
||||
[Serializable]
|
||||
public class MarketData
|
||||
{
|
||||
// 거래소
|
||||
|
||||
@@ -6,6 +6,7 @@ using System.Threading.Tasks;
|
||||
|
||||
namespace Million.Data
|
||||
{
|
||||
[Serializable]
|
||||
public class MovingAverageData
|
||||
{
|
||||
public int period;
|
||||
|
||||
@@ -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<double> BuyEarningRate { get; set; } = new List<double>();
|
||||
public List<double> BuyValueList { get; set; } = new List<double>();
|
||||
|
||||
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;
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 계산된 값 가져오는 함수
|
||||
/// </summary>
|
||||
/// <param name="setUp"></param>
|
||||
/// <param name="candleData"></param>
|
||||
/// <param name="key"></param>
|
||||
/// <returns></returns>
|
||||
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;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 조건별 Overlap value 데이터 리턴
|
||||
/// </summary>
|
||||
@@ -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<CandleData>();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Indicator 계산 로직
|
||||
/// </summary>
|
||||
/// <param name="totalIndicator"></param>
|
||||
/// <param name="indiList"></param>
|
||||
/// <param name="lossIndicator"></param>
|
||||
/// <param name="startDate"></param>
|
||||
/// <param name="endDate"></param>
|
||||
/// <param name="resultCandleDataList"></param>
|
||||
/// <param name="subIndicator"></param>
|
||||
public static void GetCalculateIndicator(List<IndicatorCoditionSetup> totalIndicator, List<string> indiList, List<IndicatorCoditionSetup> lossIndicator,
|
||||
DateTime startDate, DateTime endDate, List<CandleData> resultCandleDataList, List<IndicatorCoditionSetup> subIndicator, Dictionary<MCandleTimeType, List<CandleData>> 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);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
84
Million/Manager/DataManager.cs
Normal file
84
Million/Manager/DataManager.cs
Normal file
@@ -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
|
||||
{
|
||||
/// <summary>
|
||||
/// 데이터 구성 Manager Class
|
||||
/// </summary>
|
||||
public static class DataManager
|
||||
{
|
||||
|
||||
/// <summary>
|
||||
/// DB에서 데이터 가져오며 Setting 처리 함
|
||||
/// </summary>
|
||||
/// <param name="candleTypeList"></param>
|
||||
/// <param name="startDate"></param>
|
||||
/// <param name="endDate"></param>
|
||||
/// <param name="market"></param>
|
||||
/// <param name="distinctIndicator"></param>
|
||||
/// <returns></returns>
|
||||
public static Dictionary<MCandleTimeType, List<CandleData>> GetStandardData(List<IndicatorCoditionSetup> totalIndicator, DateTime startDate,
|
||||
DateTime endDate, MarketData market, List<IndicatorCoditionSetup> 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<CommonProperty.MCandleTimeType, List<CandleData>>();
|
||||
//계산로직에 필요한 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<CandleData>();
|
||||
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;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Sub Indicator List String 반환 Function
|
||||
/// </summary>
|
||||
/// <param name="totalIndicator"></param>
|
||||
/// <returns></returns>
|
||||
public static List<string> GetSubIndicatorStringList(List<IndicatorCoditionSetup> totalIndicator)
|
||||
{
|
||||
// 최초와 cross의 조건먼저 계산이 필요함(선처리)
|
||||
var parentIndicator = totalIndicator.Where(t => t.SubIndicatorSetupType == CommonProperty.SubIndicatorSetupType.최초돌파 ||
|
||||
t.SubIndicatorSetupType == CommonProperty.SubIndicatorSetupType.크로스).ToList();
|
||||
|
||||
var subIndStringiList = new List<string>();
|
||||
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;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -15,7 +15,7 @@ namespace Million.Manager
|
||||
/// <summary>
|
||||
/// Data Setting하는 Manager Class
|
||||
/// </summary>
|
||||
public class DataSettingManager
|
||||
public class RealtimeDataSettingManager
|
||||
{
|
||||
/// <summary>
|
||||
/// Ticker에 들어갈 데이터
|
||||
@@ -33,7 +33,7 @@ namespace Million.Manager
|
||||
/// <summary>
|
||||
/// 생성자
|
||||
/// </summary>
|
||||
public DataSettingManager(List<string> codeFullNameList, PaymentType buyType, string tableName = "Upbit")
|
||||
public RealtimeDataSettingManager(List<string> 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)
|
||||
{
|
||||
@@ -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);
|
||||
|
||||
|
||||
@@ -152,6 +152,7 @@
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Compile Include="CommonProperty.cs" />
|
||||
<Compile Include="Data\AnalysisData.cs" />
|
||||
<Compile Include="Data\BollingerData.cs" />
|
||||
<Compile Include="Data\CandleData.cs" />
|
||||
<Compile Include="Data\CandleDataList.cs" />
|
||||
@@ -190,7 +191,8 @@
|
||||
</Compile>
|
||||
<Compile Include="Manager\BuyLogicManager.cs" />
|
||||
<Compile Include="Manager\CalculateManager.cs" />
|
||||
<Compile Include="Manager\DataSettingManager.cs" />
|
||||
<Compile Include="Manager\DataManager.cs" />
|
||||
<Compile Include="Manager\RealtimeDataSettingManager.cs" />
|
||||
<Compile Include="Manager\IndicatorSetupManager.cs" />
|
||||
<Compile Include="Manager\InteratorScripter.cs" />
|
||||
<Compile Include="Manager\OrderbookManager.cs" />
|
||||
@@ -200,6 +202,7 @@
|
||||
<Compile Include="Manager\ValidationCheckManager.cs" />
|
||||
<Compile Include="Program.cs" />
|
||||
<Compile Include="Properties\AssemblyInfo.cs" />
|
||||
<Compile Include="SaveData\SavedAnalysisData.cs" />
|
||||
<Compile Include="SaveData\SavedResultData.cs" />
|
||||
<Compile Include="SubForm\AccumulateDataUI.cs">
|
||||
<SubType>UserControl</SubType>
|
||||
|
||||
31
Million/SaveData/SavedAnalysisData.cs
Normal file
31
Million/SaveData/SavedAnalysisData.cs
Normal file
@@ -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<AnalysisData> 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; }
|
||||
}
|
||||
}
|
||||
@@ -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<SearchResult> 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()
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user