This commit is contained in:
jwlee
2022-09-26 19:56:49 +09:00
226 changed files with 192360 additions and 82 deletions

View File

@@ -7,7 +7,23 @@
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="System.Runtime.CompilerServices.Unsafe" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-5.0.0.0" newVersion="5.0.0.0" />
<bindingRedirect oldVersion="0.0.0.0-6.0.0.0" newVersion="6.0.0.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="System.Collections.Immutable" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-6.0.0.0" newVersion="6.0.0.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="Microsoft.CodeAnalysis" publicKeyToken="31bf3856ad364e35" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-4.3.0.0" newVersion="4.3.0.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="System.Text.Encoding.CodePages" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-6.0.0.0" newVersion="6.0.0.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="Microsoft.CodeAnalysis.CSharp" publicKeyToken="31bf3856ad364e35" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-4.3.0.0" newVersion="4.3.0.0" />
</dependentAssembly>
</assemblyBinding>
</runtime>

View File

@@ -1,47 +0,0 @@
namespace Million_Buyer
{
partial class Form1
{
/// <summary>
/// 필수 디자이너 변수입니다.
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// 사용 중인 모든 리소스를 정리합니다.
/// </summary>
/// <param name="disposing">관리되는 리소스를 삭제해야 하면 true이고, 그렇지 않으면 false입니다.</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region Windows Form 디자이너에서 생성한 코드
/// <summary>
/// 디자이너 지원에 필요한 메서드입니다.
/// 이 메서드의 내용을 코드 편집기로 수정하지 마세요.
/// </summary>
private void InitializeComponent()
{
this.SuspendLayout();
//
// Form1
//
this.AutoScaleDimensions = new System.Drawing.SizeF(7F, 12F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.ClientSize = new System.Drawing.Size(657, 388);
this.Name = "Form1";
this.Text = "Form1";
this.ResumeLayout(false);
}
#endregion
}
}

View File

@@ -1,20 +0,0 @@
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace Million_Buyer
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
}
}

550
Million Buyer/MainForm.Designer.cs generated Normal file
View File

@@ -0,0 +1,550 @@
namespace Million_Buyer
{
partial class MainForm
{
/// <summary>
/// 필수 디자이너 변수입니다.
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// 사용 중인 모든 리소스를 정리합니다.
/// </summary>
/// <param name="disposing">관리되는 리소스를 삭제해야 하면 true이고, 그렇지 않으면 false입니다.</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region Windows Form 디자이너에서 생성한 코드
/// <summary>
/// 디자이너 지원에 필요한 메서드입니다.
/// 이 메서드의 내용을 코드 편집기로 수정하지 마세요.
/// </summary>
private void InitializeComponent()
{
this.groupBox1 = new System.Windows.Forms.GroupBox();
this.lb_IndiName = new System.Windows.Forms.Label();
this.bt_Modify = new System.Windows.Forms.Button();
this.label6 = new System.Windows.Forms.Label();
this.tb_CycleMoneyValue = new System.Windows.Forms.TextBox();
this.tb_CycleCount = new System.Windows.Forms.TextBox();
this.label2 = new System.Windows.Forms.Label();
this.label1 = new System.Windows.Forms.Label();
this.groupBox2 = new System.Windows.Forms.GroupBox();
this.lb_TotalMoneyValue = new System.Windows.Forms.Label();
this.lb_TotalRate = new System.Windows.Forms.Label();
this.lb_BuyMarketCount = new System.Windows.Forms.Label();
this.lb_TotalMoney = new System.Windows.Forms.Label();
this.label7 = new System.Windows.Forms.Label();
this.label5 = new System.Windows.Forms.Label();
this.label3 = new System.Windows.Forms.Label();
this.label4 = new System.Windows.Forms.Label();
this.bt_Start = new System.Windows.Forms.Button();
this.bt_Stop = new System.Windows.Forms.Button();
this.rd_Realtime = new System.Windows.Forms.RadioButton();
this.rd_buyer = new System.Windows.Forms.RadioButton();
this.tl_BuyList = new DevExpress.XtraTreeList.TreeList();
this.tl_Result = new DevExpress.XtraTreeList.TreeList();
this.button1 = new System.Windows.Forms.Button();
this.label8 = new System.Windows.Forms.Label();
this.label9 = new System.Windows.Forms.Label();
this.BuyMarket = new DevExpress.XtraTreeList.Columns.TreeListColumn();
this.BuyValue = new DevExpress.XtraTreeList.Columns.TreeListColumn();
this.BuyCount = new DevExpress.XtraTreeList.Columns.TreeListColumn();
this.BuyDateTime = new DevExpress.XtraTreeList.Columns.TreeListColumn();
this.Market = new DevExpress.XtraTreeList.Columns.TreeListColumn();
this.BuyValueData = new DevExpress.XtraTreeList.Columns.TreeListColumn();
this.BuyCountData = new DevExpress.XtraTreeList.Columns.TreeListColumn();
this.BuyDateTimeData = new DevExpress.XtraTreeList.Columns.TreeListColumn();
this.SellValueData = new DevExpress.XtraTreeList.Columns.TreeListColumn();
this.SellCountData = new DevExpress.XtraTreeList.Columns.TreeListColumn();
this.SellDateTimeData = new DevExpress.XtraTreeList.Columns.TreeListColumn();
this.RateData = new DevExpress.XtraTreeList.Columns.TreeListColumn();
this.MoneyData = new DevExpress.XtraTreeList.Columns.TreeListColumn();
this.lb_log = new System.Windows.Forms.ListBox();
this.label10 = new System.Windows.Forms.Label();
this.lb_StartDate = new System.Windows.Forms.Label();
this.groupBox1.SuspendLayout();
this.groupBox2.SuspendLayout();
((System.ComponentModel.ISupportInitialize)(this.tl_BuyList)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.tl_Result)).BeginInit();
this.SuspendLayout();
//
// groupBox1
//
this.groupBox1.Controls.Add(this.lb_IndiName);
this.groupBox1.Controls.Add(this.bt_Modify);
this.groupBox1.Controls.Add(this.label6);
this.groupBox1.Controls.Add(this.tb_CycleMoneyValue);
this.groupBox1.Controls.Add(this.tb_CycleCount);
this.groupBox1.Controls.Add(this.label2);
this.groupBox1.Controls.Add(this.label1);
this.groupBox1.Location = new System.Drawing.Point(12, 52);
this.groupBox1.Name = "groupBox1";
this.groupBox1.Size = new System.Drawing.Size(362, 111);
this.groupBox1.TabIndex = 5;
this.groupBox1.TabStop = false;
this.groupBox1.Text = "데이터 Setting";
//
// lb_IndiName
//
this.lb_IndiName.AutoSize = true;
this.lb_IndiName.Location = new System.Drawing.Point(142, 82);
this.lb_IndiName.Name = "lb_IndiName";
this.lb_IndiName.Size = new System.Drawing.Size(0, 12);
this.lb_IndiName.TabIndex = 7;
//
// bt_Modify
//
this.bt_Modify.Location = new System.Drawing.Point(288, 77);
this.bt_Modify.Name = "bt_Modify";
this.bt_Modify.Size = new System.Drawing.Size(68, 23);
this.bt_Modify.TabIndex = 6;
this.bt_Modify.Text = "선택";
this.bt_Modify.UseVisualStyleBackColor = true;
this.bt_Modify.Click += new System.EventHandler(this.bt_Modify_Click);
//
// label6
//
this.label6.AutoSize = true;
this.label6.Location = new System.Drawing.Point(95, 82);
this.label6.Name = "label6";
this.label6.Size = new System.Drawing.Size(41, 12);
this.label6.TabIndex = 4;
this.label6.Text = "조건식";
//
// tb_CycleMoneyValue
//
this.tb_CycleMoneyValue.Location = new System.Drawing.Point(142, 50);
this.tb_CycleMoneyValue.Name = "tb_CycleMoneyValue";
this.tb_CycleMoneyValue.ReadOnly = true;
this.tb_CycleMoneyValue.Size = new System.Drawing.Size(214, 21);
this.tb_CycleMoneyValue.TabIndex = 3;
//
// tb_CycleCount
//
this.tb_CycleCount.Location = new System.Drawing.Point(142, 20);
this.tb_CycleCount.Name = "tb_CycleCount";
this.tb_CycleCount.ReadOnly = true;
this.tb_CycleCount.Size = new System.Drawing.Size(214, 21);
this.tb_CycleCount.TabIndex = 2;
//
// label2
//
this.label2.AutoSize = true;
this.label2.Location = new System.Drawing.Point(35, 53);
this.label2.Name = "label2";
this.label2.Size = new System.Drawing.Size(101, 12);
this.label2.TabIndex = 1;
this.label2.Text = "종목 별 구입 금액";
//
// label1
//
this.label1.AutoSize = true;
this.label1.Location = new System.Drawing.Point(7, 26);
this.label1.Name = "label1";
this.label1.Size = new System.Drawing.Size(129, 12);
this.label1.TabIndex = 0;
this.label1.Text = "한번에 구입 할 종목 수";
//
// groupBox2
//
this.groupBox2.Controls.Add(this.lb_StartDate);
this.groupBox2.Controls.Add(this.label10);
this.groupBox2.Controls.Add(this.lb_TotalMoneyValue);
this.groupBox2.Controls.Add(this.lb_TotalRate);
this.groupBox2.Controls.Add(this.lb_BuyMarketCount);
this.groupBox2.Controls.Add(this.lb_TotalMoney);
this.groupBox2.Controls.Add(this.label7);
this.groupBox2.Controls.Add(this.label5);
this.groupBox2.Controls.Add(this.label3);
this.groupBox2.Controls.Add(this.label4);
this.groupBox2.Location = new System.Drawing.Point(12, 169);
this.groupBox2.Name = "groupBox2";
this.groupBox2.Size = new System.Drawing.Size(362, 191);
this.groupBox2.TabIndex = 6;
this.groupBox2.TabStop = false;
this.groupBox2.Text = "데이터 현황";
//
// lb_TotalMoneyValue
//
this.lb_TotalMoneyValue.AutoSize = true;
this.lb_TotalMoneyValue.Location = new System.Drawing.Point(102, 126);
this.lb_TotalMoneyValue.Name = "lb_TotalMoneyValue";
this.lb_TotalMoneyValue.Size = new System.Drawing.Size(0, 12);
this.lb_TotalMoneyValue.TabIndex = 7;
//
// lb_TotalRate
//
this.lb_TotalRate.AutoSize = true;
this.lb_TotalRate.Location = new System.Drawing.Point(102, 91);
this.lb_TotalRate.Name = "lb_TotalRate";
this.lb_TotalRate.Size = new System.Drawing.Size(0, 12);
this.lb_TotalRate.TabIndex = 6;
//
// lb_BuyMarketCount
//
this.lb_BuyMarketCount.AutoSize = true;
this.lb_BuyMarketCount.Location = new System.Drawing.Point(102, 59);
this.lb_BuyMarketCount.Name = "lb_BuyMarketCount";
this.lb_BuyMarketCount.Size = new System.Drawing.Size(0, 12);
this.lb_BuyMarketCount.TabIndex = 5;
//
// lb_TotalMoney
//
this.lb_TotalMoney.AutoSize = true;
this.lb_TotalMoney.Location = new System.Drawing.Point(102, 26);
this.lb_TotalMoney.Name = "lb_TotalMoney";
this.lb_TotalMoney.Size = new System.Drawing.Size(0, 12);
this.lb_TotalMoney.TabIndex = 4;
//
// label7
//
this.label7.AutoSize = true;
this.label7.Location = new System.Drawing.Point(27, 126);
this.label7.Name = "label7";
this.label7.Size = new System.Drawing.Size(69, 12);
this.label7.TabIndex = 3;
this.label7.Text = "전체 수익금";
//
// label5
//
this.label5.AutoSize = true;
this.label5.Location = new System.Drawing.Point(27, 91);
this.label5.Name = "label5";
this.label5.Size = new System.Drawing.Size(69, 12);
this.label5.TabIndex = 2;
this.label5.Text = "전체 수익율";
//
// label3
//
this.label3.AutoSize = true;
this.label3.Location = new System.Drawing.Point(23, 59);
this.label3.Name = "label3";
this.label3.Size = new System.Drawing.Size(73, 12);
this.label3.TabIndex = 1;
this.label3.Text = "구입 종목 수";
//
// label4
//
this.label4.AutoSize = true;
this.label4.Location = new System.Drawing.Point(7, 26);
this.label4.Name = "label4";
this.label4.Size = new System.Drawing.Size(89, 12);
this.label4.TabIndex = 0;
this.label4.Text = "계정 내 총 금액";
//
// bt_Start
//
this.bt_Start.Location = new System.Drawing.Point(1441, 737);
this.bt_Start.Name = "bt_Start";
this.bt_Start.Size = new System.Drawing.Size(75, 23);
this.bt_Start.TabIndex = 7;
this.bt_Start.Text = "Start";
this.bt_Start.UseVisualStyleBackColor = true;
this.bt_Start.Click += new System.EventHandler(this.bt_Start_Click);
//
// bt_Stop
//
this.bt_Stop.Location = new System.Drawing.Point(1522, 737);
this.bt_Stop.Name = "bt_Stop";
this.bt_Stop.Size = new System.Drawing.Size(75, 23);
this.bt_Stop.TabIndex = 8;
this.bt_Stop.Text = "Stop";
this.bt_Stop.UseVisualStyleBackColor = true;
this.bt_Stop.Click += new System.EventHandler(this.bt_Stop_Click);
//
// rd_Realtime
//
this.rd_Realtime.AutoSize = true;
this.rd_Realtime.Checked = true;
this.rd_Realtime.Location = new System.Drawing.Point(17, 19);
this.rd_Realtime.Name = "rd_Realtime";
this.rd_Realtime.Size = new System.Drawing.Size(123, 16);
this.rd_Realtime.TabIndex = 9;
this.rd_Realtime.TabStop = true;
this.rd_Realtime.Text = "실시간 검증 Mode";
this.rd_Realtime.UseVisualStyleBackColor = true;
this.rd_Realtime.CheckedChanged += new System.EventHandler(this.rd_Realtime_CheckedChanged);
//
// rd_buyer
//
this.rd_buyer.AutoSize = true;
this.rd_buyer.Location = new System.Drawing.Point(202, 20);
this.rd_buyer.Name = "rd_buyer";
this.rd_buyer.Size = new System.Drawing.Size(92, 16);
this.rd_buyer.TabIndex = 10;
this.rd_buyer.Text = "Buyer Mode";
this.rd_buyer.UseVisualStyleBackColor = true;
this.rd_buyer.CheckedChanged += new System.EventHandler(this.rd_buyer_CheckedChanged);
//
// tl_BuyList
//
this.tl_BuyList.Columns.AddRange(new DevExpress.XtraTreeList.Columns.TreeListColumn[] {
this.BuyMarket,
this.BuyValue,
this.BuyCount,
this.BuyDateTime});
this.tl_BuyList.Location = new System.Drawing.Point(380, 31);
this.tl_BuyList.Name = "tl_BuyList";
this.tl_BuyList.Size = new System.Drawing.Size(415, 699);
this.tl_BuyList.TabIndex = 11;
//
// tl_Result
//
this.tl_Result.Columns.AddRange(new DevExpress.XtraTreeList.Columns.TreeListColumn[] {
this.Market,
this.BuyValueData,
this.BuyCountData,
this.BuyDateTimeData,
this.SellValueData,
this.SellCountData,
this.SellDateTimeData,
this.RateData,
this.MoneyData});
this.tl_Result.Location = new System.Drawing.Point(801, 31);
this.tl_Result.Name = "tl_Result";
this.tl_Result.Size = new System.Drawing.Size(796, 699);
this.tl_Result.TabIndex = 12;
//
// button1
//
this.button1.Location = new System.Drawing.Point(17, 737);
this.button1.Name = "button1";
this.button1.Size = new System.Drawing.Size(91, 23);
this.button1.TabIndex = 13;
this.button1.Text = "데이터 저장";
this.button1.UseVisualStyleBackColor = true;
this.button1.Click += new System.EventHandler(this.button1_Click);
//
// label8
//
this.label8.AutoSize = true;
this.label8.Location = new System.Drawing.Point(378, 9);
this.label8.Name = "label8";
this.label8.Size = new System.Drawing.Size(57, 12);
this.label8.TabIndex = 14;
this.label8.Text = "구매 목록";
//
// label9
//
this.label9.AutoSize = true;
this.label9.Location = new System.Drawing.Point(799, 9);
this.label9.Name = "label9";
this.label9.Size = new System.Drawing.Size(129, 12);
this.label9.TabIndex = 15;
this.label9.Text = "구매 및 판매 완료 목록";
//
// BuyMarket
//
this.BuyMarket.Caption = "구매 항목";
this.BuyMarket.FieldName = "BuyMarket";
this.BuyMarket.Name = "BuyMarket";
this.BuyMarket.Visible = true;
this.BuyMarket.VisibleIndex = 0;
//
// BuyValue
//
this.BuyValue.Caption = "구매 가격";
this.BuyValue.FieldName = "BuyValue";
this.BuyValue.Name = "BuyValue";
this.BuyValue.Visible = true;
this.BuyValue.VisibleIndex = 1;
//
// BuyCount
//
this.BuyCount.Caption = "구매 개수";
this.BuyCount.FieldName = "BuyCount";
this.BuyCount.Name = "BuyCount";
this.BuyCount.Visible = true;
this.BuyCount.VisibleIndex = 2;
//
// BuyDateTime
//
this.BuyDateTime.Caption = "검출 된 시간";
this.BuyDateTime.FieldName = "BuyDateTime";
this.BuyDateTime.Name = "BuyDateTime";
this.BuyDateTime.Visible = true;
this.BuyDateTime.VisibleIndex = 3;
//
// Market
//
this.Market.Caption = "항목";
this.Market.FieldName = "Market";
this.Market.Name = "Market";
this.Market.Visible = true;
this.Market.VisibleIndex = 0;
//
// BuyValueData
//
this.BuyValueData.Caption = "구매 가격";
this.BuyValueData.FieldName = "BuyValueData";
this.BuyValueData.Name = "BuyValueData";
this.BuyValueData.Visible = true;
this.BuyValueData.VisibleIndex = 1;
//
// BuyCountData
//
this.BuyCountData.Caption = "구매 개수";
this.BuyCountData.FieldName = "BuyCountData";
this.BuyCountData.Name = "BuyCountData";
this.BuyCountData.Visible = true;
this.BuyCountData.VisibleIndex = 2;
//
// BuyDateTimeData
//
this.BuyDateTimeData.Caption = "구매 시간";
this.BuyDateTimeData.FieldName = "BuyDateTimeData";
this.BuyDateTimeData.Name = "BuyDateTimeData";
this.BuyDateTimeData.Visible = true;
this.BuyDateTimeData.VisibleIndex = 3;
//
// SellValueData
//
this.SellValueData.Caption = "판매 가격";
this.SellValueData.FieldName = "SellValueData";
this.SellValueData.Name = "SellValueData";
this.SellValueData.Visible = true;
this.SellValueData.VisibleIndex = 4;
//
// SellCountData
//
this.SellCountData.Caption = "판매 개수";
this.SellCountData.FieldName = "SellCountData";
this.SellCountData.Name = "SellCountData";
this.SellCountData.Visible = true;
this.SellCountData.VisibleIndex = 5;
//
// SellDateTimeData
//
this.SellDateTimeData.Caption = "판매 시간";
this.SellDateTimeData.FieldName = "SellDateTimeData";
this.SellDateTimeData.Name = "SellDateTimeData";
this.SellDateTimeData.Visible = true;
this.SellDateTimeData.VisibleIndex = 6;
//
// RateData
//
this.RateData.Caption = "수익률";
this.RateData.FieldName = "RateData";
this.RateData.Name = "RateData";
this.RateData.Visible = true;
this.RateData.VisibleIndex = 7;
//
// MoneyData
//
this.MoneyData.Caption = "수익금";
this.MoneyData.FieldName = "MoneyData";
this.MoneyData.Name = "MoneyData";
this.MoneyData.Visible = true;
this.MoneyData.VisibleIndex = 8;
//
// lb_log
//
this.lb_log.FormattingEnabled = true;
this.lb_log.ItemHeight = 12;
this.lb_log.Location = new System.Drawing.Point(12, 366);
this.lb_log.Name = "lb_log";
this.lb_log.Size = new System.Drawing.Size(362, 364);
this.lb_log.TabIndex = 16;
//
// label10
//
this.label10.AutoSize = true;
this.label10.Location = new System.Drawing.Point(39, 161);
this.label10.Name = "label10";
this.label10.Size = new System.Drawing.Size(57, 12);
this.label10.TabIndex = 8;
this.label10.Text = "시작 시간";
//
// lb_StartDate
//
this.lb_StartDate.AutoSize = true;
this.lb_StartDate.Location = new System.Drawing.Point(102, 161);
this.lb_StartDate.Name = "lb_StartDate";
this.lb_StartDate.Size = new System.Drawing.Size(0, 12);
this.lb_StartDate.TabIndex = 9;
//
// MainForm
//
this.AutoScaleDimensions = new System.Drawing.SizeF(7F, 12F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.ClientSize = new System.Drawing.Size(1609, 771);
this.Controls.Add(this.lb_log);
this.Controls.Add(this.label9);
this.Controls.Add(this.label8);
this.Controls.Add(this.button1);
this.Controls.Add(this.tl_Result);
this.Controls.Add(this.tl_BuyList);
this.Controls.Add(this.rd_buyer);
this.Controls.Add(this.rd_Realtime);
this.Controls.Add(this.bt_Stop);
this.Controls.Add(this.bt_Start);
this.Controls.Add(this.groupBox1);
this.Controls.Add(this.groupBox2);
this.Name = "MainForm";
this.Text = "Buyer";
this.groupBox1.ResumeLayout(false);
this.groupBox1.PerformLayout();
this.groupBox2.ResumeLayout(false);
this.groupBox2.PerformLayout();
((System.ComponentModel.ISupportInitialize)(this.tl_BuyList)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.tl_Result)).EndInit();
this.ResumeLayout(false);
this.PerformLayout();
}
#endregion
private System.Windows.Forms.GroupBox groupBox1;
private System.Windows.Forms.Label label6;
private System.Windows.Forms.TextBox tb_CycleMoneyValue;
private System.Windows.Forms.TextBox tb_CycleCount;
private System.Windows.Forms.Label label2;
private System.Windows.Forms.Label label1;
private System.Windows.Forms.GroupBox groupBox2;
private System.Windows.Forms.Label label7;
private System.Windows.Forms.Label label5;
private System.Windows.Forms.Label label3;
private System.Windows.Forms.Label label4;
private System.Windows.Forms.Button bt_Modify;
private System.Windows.Forms.Label lb_BuyMarketCount;
private System.Windows.Forms.Label lb_TotalMoney;
private System.Windows.Forms.Label lb_TotalMoneyValue;
private System.Windows.Forms.Label lb_TotalRate;
private System.Windows.Forms.Button bt_Start;
private System.Windows.Forms.Button bt_Stop;
private System.Windows.Forms.Label lb_IndiName;
private System.Windows.Forms.RadioButton rd_Realtime;
private System.Windows.Forms.RadioButton rd_buyer;
private DevExpress.XtraTreeList.TreeList tl_BuyList;
private DevExpress.XtraTreeList.TreeList tl_Result;
private System.Windows.Forms.Button button1;
private System.Windows.Forms.Label label8;
private System.Windows.Forms.Label label9;
private DevExpress.XtraTreeList.Columns.TreeListColumn BuyMarket;
private DevExpress.XtraTreeList.Columns.TreeListColumn BuyValue;
private DevExpress.XtraTreeList.Columns.TreeListColumn BuyCount;
private DevExpress.XtraTreeList.Columns.TreeListColumn BuyDateTime;
private DevExpress.XtraTreeList.Columns.TreeListColumn Market;
private DevExpress.XtraTreeList.Columns.TreeListColumn BuyValueData;
private DevExpress.XtraTreeList.Columns.TreeListColumn BuyCountData;
private DevExpress.XtraTreeList.Columns.TreeListColumn BuyDateTimeData;
private DevExpress.XtraTreeList.Columns.TreeListColumn SellValueData;
private DevExpress.XtraTreeList.Columns.TreeListColumn SellCountData;
private DevExpress.XtraTreeList.Columns.TreeListColumn SellDateTimeData;
private DevExpress.XtraTreeList.Columns.TreeListColumn RateData;
private DevExpress.XtraTreeList.Columns.TreeListColumn MoneyData;
private System.Windows.Forms.ListBox lb_log;
private System.Windows.Forms.Label lb_StartDate;
private System.Windows.Forms.Label label10;
}
}

513
Million Buyer/MainForm.cs Normal file
View File

@@ -0,0 +1,513 @@
using DevExpress.XtraTreeList.Nodes;
using Microsoft.CodeAnalysis.CSharp.Scripting;
using Million;
using Million.Data;
using Million.DbManagement;
using Million.IndicatorConditionSetup;
using Million.Manager;
using Million.SaveData;
using Million_Buyer.SubForm;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using System.Windows.Forms;
using static Million.CommonProperty;
namespace Million_Buyer
{
public partial class MainForm : Form
{
bool RealTimeMode = true;
public SavedResultData _saveResultData;
bool SetIndicator = false;
bool ThreadFlag = false;
Thread thread = null;
//결과 데이터
List<SearchResult> resultDataList = new List<SearchResult>();
public MainForm()
{
InitializeComponent();
Init();
}
public void Init()
{
// data setting
DbServiceFunctions.GetMarketTable_FromDB("Upbit", "KRW");
// Result Data DB에 생성
Million.DbManagement.DBConnection.QueryUpdateExcuter
(CommonProperty.DbConnectionResultData, DbServiceFunctions.CreateSavedAnalysisDataTableQuery());
Million.DbManagement.DBConnection.QueryUpdateExcuter
(CommonProperty.DbConnectionResultData, DbServiceFunctions.CreateSavedResultDataTableQuery());
Million.DbManagement.DBConnection.QueryUpdateExcuter
(CommonProperty.DbConnectionResultData, DbServiceFunctions.CreateRealTimeIndicatorTableQuery());
_saveResultData = new SavedResultData
{
BuySetupList = new List<object>(),
SellSetupList = new List<object>()
};
}
/// <summary>
/// 실시간 모드일 경우
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void rd_Realtime_CheckedChanged(object sender, EventArgs e)
{
SetReadOnly(true);
}
/// <summary>
/// Buyer 모드일 경우
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void rd_buyer_CheckedChanged(object sender, EventArgs e)
{
SetReadOnly(false);
}
/// <summary>
/// Read Only Set(모드 변경)
/// </summary>
/// <param name="flag"></param>
private void SetReadOnly(bool flag)
{
RealTimeMode = flag;
tb_CycleCount.ReadOnly = flag;
tb_CycleMoneyValue.ReadOnly = flag;
}
/// <summary>
/// 조건식 폼 띄우기
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void bt_Modify_Click(object sender, EventArgs e)
{
var subForm = new IndicatorLoadForm();
if(subForm.ShowDialog() == DialogResult.OK)
{
_saveResultData.SellSetupList = ((List<object>)subForm.selectData["SellSetupList"]);
_saveResultData.BuySetupList = ((List<object>)subForm.selectData["BuySetupList"]);
_saveResultData.BuyRegularExpression = subForm.selectData["BuyRegularExpression"].ToString();
_saveResultData.SellRegularExpression = subForm.selectData["SellRegularExpression"].ToString();
lb_IndiName.Text = subForm.selectData["Name"].ToString();
SetIndicator = true;
}
}
/// <summary>
/// Start Button Event
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void bt_Start_Click(object sender, EventArgs e)
{
if (!SetIndicator)
{
MessageBox.Show("Indicator Setting 필요");
}
else
{
if (!ThreadFlag)
{
thread = new Thread(ThreadFunction);
thread.Start();
ThreadFlag = true;
bt_Start.Enabled = false;
rd_buyer.Enabled = false;
rd_Realtime.Enabled = false;
}
}
}
/// <summary>
/// Stop Button Event
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void bt_Stop_Click(object sender, EventArgs e)
{
ThreadFlag = false;
if (!RealTimeMode && thread != null) thread.Abort();
bt_Start.Enabled = true;
rd_buyer.Enabled = true;
rd_Realtime.Enabled = true;
/*
* 종료 된 후 데이터 처리 소스는 여기서 처리
* 1. Grid에 Stop 후 데이터 처리
* 2. 종료 후 데이터 저장 처리
*/
}
/// <summary>
/// 실제 동작 Thread
/// </summary>
private void ThreadFunction()
{
var dataList = new Dictionary<MCandleTimeType, List<CandleDataList>>();
var sellIndicator = _saveResultData.SellSetupList.OfType<IndicatorCoditionSetup>().ToList();
var buyIndicator = _saveResultData.BuySetupList.OfType<IndicatorCoditionSetup>().ToList();
var totalIndicatorList = new List<IndicatorCoditionSetup>();
totalIndicatorList.AddRange(sellIndicator);
totalIndicatorList.AddRange(buyIndicator);
var candleTypeList = totalIndicatorList.Select(t => t.MCandleTimeType).ToList();
candleTypeList.Add(MCandleTimeType.M1);
candleTypeList = candleTypeList.Distinct().ToList();
//사고 파는 rex 데이터 가져오는 부분
var buyRex = _saveResultData.BuyRegularExpression;
var sellRex = _saveResultData.SellRegularExpression;
var buyScript = new InteratorScripter();
buyScript.regularExpressionString = buyRex;
var sellScript = new InteratorScripter();
sellScript.regularExpressionString = sellRex;
//save 데이터
_saveResultData.StartDateTime = DateTime.Now;
//구매 데이터
var buyList = new List<CandleDataList>();
var saveFlag = true;
//구매 후 데이터 여러개 계속 겹치는 경우 제외하기 위한 List
var overlapBuyManagementList = new Dictionary<string, bool>();
int firstFlag = 0;
RealtimeDataSettingManager realTimeMsg = null;
var standardTime = DateTime.Now;
this.Invoke(new Action(delegate ()
{
lb_StartDate.Text = standardTime.ToString("yyyy-MM-dd HH:mm:ss");
}));
if (RealTimeFlag)
InsertLog("실시간 검증 구동 중..");
else
InsertLog("Buyer 구동 중..");
while (ThreadFlag)
{
# region 기본 데이터 Setting
if (firstFlag == 0)
{
realTimeMsg = new RealtimeDataSettingManager(null, PaymentType.KRW);
dataList = realTimeMsg.GetRealTimeCandleData(candleTypeList, 200);
foreach (var item in realTimeMsg.codeFullNameList)
{
overlapBuyManagementList[item] = true;
}
firstFlag = 1;
InsertLog("Deafult Data Setting 완료..");
}
else
{
if (firstFlag == 1)
{
dataList = realTimeMsg.ProcessRecentlyCandleDatas(dataList, candleTypeList);
}
}
#endregion
//Ticker 초기화
if (DateTime.Now.Minute == 0 && saveFlag)
{
realTimeMsg.ClearTicker();
InsertLog("Ticker Data Clear..");
saveFlag = false;
}
else if (DateTime.Now.Minute > 1) saveFlag = true;
foreach (var item in realTimeMsg.codeFullNameList)
{
# region Indicator 계산 -> Code full name 으로 for문 돌면서 계산 처리
var dic = new Dictionary<MCandleTimeType, List<CandleData>>();
var distinctIndicator = IndicatorSetupManager.Distinct(totalIndicatorList);
foreach (var key in dataList.Keys)
{
var candleDataList = dataList[key].FirstOrDefault(t => t.ConGoodsData.CodeFullName == item);
dic[key] = candleDataList.CandleDataLists_Im;
var indicatorSetUpList = distinctIndicator.Where(t => t.MCandleTimeType == key).ToList();
foreach (var setup in indicatorSetUpList)
{
setup.excute(dic[key], true);
}
}
var minDateTime = dic[MCandleTimeType.M1].Select(t => t.DateTime).Min();
var maxDateTime = dic[MCandleTimeType.M1].Select(t => t.DateTime).Max().AddHours(1);
dic = IndicatorSetupManager.CalculateIndicator(dic, totalIndicatorList, minDateTime, maxDateTime, true);
#endregion
#region 사고 파는 로직
//최신 데이터 가져오기
var recentlyData = dic[MCandleTimeType.M1][dic[MCandleTimeType.M1].Count - 1];
if (recentlyData == null)
continue;
/*
* 로직 설명
* 1. Buy List에 있는지 확인
* 2. 없을 경우 추가(Buy Script 처리)
* 3. Buy List에 있을 경우 Sell Script 확인
* 4. Sell 처리 후 결과 처리
*/
//없을 시 -> BUY
if (!buyList.Any(t => t.ConGoodsData.CodeFullName == item))
{
var flag = buyScript.DicExcuteScript(recentlyData.CalculateFlag);
if (flag)
{
if (overlapBuyManagementList[item])
{
//if (resultDataList.Select(t => t.MarketData).ToList().Any(t => t.CodeFullName == item)) continue;
var time = DateTime.Now;
var buyData = new CandleDataList();
buyData.CandleDataLists_Im.Add(recentlyData);
var valDic = ResultLogicManager.GetIndicateValue(recentlyData.CalculateFlag, totalIndicatorList, recentlyData);
recentlyData.BuyValue = OrderbookManager.GetAskPrice(CalculateManager.GetConditionValue(buyRex, valDic, recentlyData.CalculateFlag));
recentlyData.BuyTime = time;
// 임시 -> 실시간은 1개만 삿다고 처리
recentlyData.BuyCount = 1;
buyData.ConGoodsData = dataList[MCandleTimeType.M1].FirstOrDefault(t => t.ConGoodsData.CodeFullName == item).ConGoodsData;
buyList.Add(buyData);
overlapBuyManagementList[item] = false;
InsertLog(buyData.ConGoodsData.CodeFullName + " Market Data 구입 DateTime : " + time.ToString("yyyy-MM-dd HH:mm:ss"));
//grid 처리 구매항목, 구매 가격, 구매 개수, 구매시점
this.Invoke(new Action(delegate ()
{
tl_BuyList.AppendNode(new object[]
{buyData.ConGoodsData.CodeFullName, recentlyData.BuyValue, recentlyData.BuyCount, time.ToString("yyyy-MM-dd HH:mm:ss") }, null);
lb_BuyMarketCount.Text = buyList.Count.ToString();
}));
}
}
else
{
overlapBuyManagementList[item] = true;
}
}
else
{
var flag = sellScript.DicExcuteScript(recentlyData.CalculateFlag);
if (flag)
{
var buyItem = buyList.FirstOrDefault(x => x.ConGoodsData.CodeFullName == item);
var time = DateTime.Now;
var sellItem = recentlyData;
var valDic = ResultLogicManager.GetIndicateValue(sellItem.CalculateFlag, totalIndicatorList, sellItem);
sellItem.SellValue = OrderbookManager.GetAskPrice(CalculateManager.GetConditionValue(sellRex, valDic, sellItem.CalculateFlag));
sellItem.SellTime = time;
var buyCandleData = buyItem.CandleDataLists_Im[0];
var sellVal = sellItem.SellValue;
var result = new SearchResult();
var rate = ((sellVal - buyCandleData.BuyValue) / buyCandleData.BuyValue) * 100;
result.FirstEarningRate = rate;
result.EndDate = sellItem.DateTime;
result.CodeFullName = buyItem.ConGoodsData.CodeFullName;
result.MarketData = buyItem.ConGoodsData;
result.BuyEarningRate.Add(rate);
result.BuyValueList.Add(buyCandleData.BuyValue);
result.BuyList.ConGoodsData = buyItem.ConGoodsData;
result.BuyList.CandleDataLists_Im.Add(buyItem.CandleDataLists_Im[0]);
result.StartDate = buyItem.CandleDataLists_Im[0].DateTime;
result.SellData = sellItem;
result.SellValue = sellVal;
result.TotalEarningRate = rate;
result.WinCount = rate > 0 ? 1 : 0;
result.LoseCount = rate < 0 ? 1 : 0;
result.FirstWinFlag = rate > 0 ? true : false;
//실시간 검증은 1개로 처리
result.BuyCount = buyItem.CandleDataLists_Im[0].BuyCount;
result.SellCount = buyItem.CandleDataLists_Im[0].BuyCount;
resultDataList.Add(result);
//처리한 buyList는 삭제
buyList.Remove(buyItem);
InsertLog(buyItem.ConGoodsData.CodeFullName + " Market Data 판매 DateTime : " + time.ToString("yyyy-MM-dd HH:mm:ss"));
this.Invoke(new Action(delegate ()
{
//Grid 처리
TreeListNode buyNode = null;
foreach (TreeListNode node in tl_BuyList.Nodes)
{
if (node.GetValue("BuyMarket").ToString() == buyItem.ConGoodsData.CodeFullName)
{
buyNode = node;
break;
}
}
var moneyVal = (sellVal * (1 - 0.0005) - buyCandleData.BuyValue * (1 - 0.0005)) * result.BuyCount;
tl_Result.AppendNode(new object[] {
buyNode.GetValue("BuyMarket"),
buyNode.GetValue("BuyValue"),
buyNode.GetValue("BuyCount"),
buyNode.GetValue("BuyDateTime"),
sellVal,
result.SellCount,
time.ToString("yyyy-MM-dd HH:mm:ss"),
result.FirstEarningRate,
moneyVal}, null);
tl_BuyList.Nodes.Remove(buyNode);
lb_BuyMarketCount.Text = buyList.Count.ToString();
double totalRate = 0;
double totalMoneyValue = 0;
foreach (var resultData in resultDataList)
{
totalRate += resultData.FirstEarningRate;
if (!RealTimeFlag)
{
// 총 돈량 측정
totalMoneyValue += (resultData.SellValue * (1 - 0.0005) - resultData.BuyValueList[0] * (1 - 0.0005)) * resultData.BuyCount;
}
}
lb_TotalRate.Text = totalRate + "%";
if (!RealTimeFlag)
lb_TotalMoneyValue.Text = totalMoneyValue + "원";
}));
}
}
#endregion
}
}
//Stop 시 저장 -> Real Time의 경우 Search Result List만 저장
if (RealTimeFlag)
{
SaveData(resultDataList);
}
else
{
//이거는 결정해야함
}
}
/// <summary>
/// 데이터 저장 기능
/// </summary>
/// <param name="resultDataList"></param>
public void SaveData(List<SearchResult> resultDataList)
{
if (resultDataList.Count > 0)
{
_saveResultData.EndDateTime = DateTime.Now;
_saveResultData.SavedDateTime = DateTime.Now;
_saveResultData.SearchResultList = resultDataList;
//수익 률 계산 로직 -> 이거는 추후 빼도 될듯
double totalVal = 0;
double win = 0;
double lose = 0;
double firstProfitRate = 0;
double firstWin = 0;
//승률, 수익률 계산
foreach (var item in resultDataList)
{
if (item.FirstWinFlag) firstWin++;
firstProfitRate += item.FirstEarningRate;
win += item.WinCount;
lose += item.LoseCount;
totalVal += item.TotalEarningRate;
}
double winRate;
if (win == 0)
{
winRate = 0;
}
else if (lose == 0)
{
winRate = 100;
}
else
{
winRate = (win * 100 / (win + lose));
}
_saveResultData.ResultDataCount = resultDataList.Count;
_saveResultData.FirstWinRate = (firstWin * 100) / resultDataList.Count;
_saveResultData.FirstProfitRate = firstProfitRate;
_saveResultData.WinRate = winRate;
_saveResultData.ProfitRate = totalVal / resultDataList.Count;
_saveResultData.SearchResultList = resultDataList;
_saveResultData.Name = _saveResultData.SavedDateTime.ToString("yyyy-MM-dd HH:mm:ss") + " Realtime Result";
_saveResultData.Type = "Data";
_saveResultData.SaveResultType = "Realtime";
_saveResultData.ExchangePlace = "Upbit";
_saveResultData.ParentId = null;
DBConnection.QueryInsertExcuter_SavedResultData(_saveResultData);
_saveResultData.StartDateTime = DateTime.Now;
resultDataList.Clear();
MessageBox.Show("데이터 저장 완료");
}
}
/// <summary>
/// 데이터 저장 기능
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void button1_Click(object sender, EventArgs e)
{
SaveData(resultDataList);
}
/// <summary>
/// Text Area 에 Log 입력
/// </summary>
/// <param name="log"></param>
private void InsertLog(string log)
{
this.Invoke(new Action(delegate ()
{
if (lb_log.Items.Count > 500)
{
lb_log.Items.Clear();
}
lb_log.Items.Insert(0, log);
}));
}
}
}

View File

@@ -0,0 +1,8 @@
is_global = true
build_property.TargetFramework =
build_property.TargetPlatformMinVersion =
build_property.UsingMicrosoftNETSdkWeb =
build_property.ProjectTypeGuids =
build_property.InvariantGlobalization =
build_property.PlatformNeutralAssembly =
build_property._SupportedPlatformList =

View File

@@ -1,5 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Import Project="..\packages\Microsoft.CodeAnalysis.Analyzers.3.3.3\build\Microsoft.CodeAnalysis.Analyzers.props" Condition="Exists('..\packages\Microsoft.CodeAnalysis.Analyzers.3.3.3\build\Microsoft.CodeAnalysis.Analyzers.props')" />
<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
<PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
@@ -12,6 +13,8 @@
<FileAlignment>512</FileAlignment>
<AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects>
<Deterministic>true</Deterministic>
<NuGetPackageImportStamp>
</NuGetPackageImportStamp>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<PlatformTarget>AnyCPU</PlatformTarget>
@@ -53,8 +56,51 @@
<Prefer32Bit>true</Prefer32Bit>
</PropertyGroup>
<ItemGroup>
<Reference Include="DevExpress.Data.v18.2, Version=18.2.8.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a, processorArchitecture=MSIL" />
<Reference Include="DevExpress.Printing.v18.2.Core, Version=18.2.8.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a, processorArchitecture=MSIL" />
<Reference Include="DevExpress.Utils.v18.2, Version=18.2.8.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a, processorArchitecture=MSIL" />
<Reference Include="DevExpress.XtraEditors.v18.2, Version=18.2.8.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a, processorArchitecture=MSIL" />
<Reference Include="DevExpress.XtraLayout.v18.2, Version=18.2.8.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a, processorArchitecture=MSIL" />
<Reference Include="DevExpress.XtraTreeList.v18.2, Version=18.2.8.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a, processorArchitecture=MSIL" />
<Reference Include="Microsoft.CodeAnalysis, Version=4.3.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
<HintPath>..\packages\Microsoft.CodeAnalysis.Common.4.3.0\lib\netstandard2.0\Microsoft.CodeAnalysis.dll</HintPath>
</Reference>
<Reference Include="Microsoft.CodeAnalysis.CSharp, Version=4.3.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
<HintPath>..\packages\Microsoft.CodeAnalysis.CSharp.4.3.0\lib\netstandard2.0\Microsoft.CodeAnalysis.CSharp.dll</HintPath>
</Reference>
<Reference Include="Microsoft.CodeAnalysis.CSharp.Scripting, Version=4.3.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
<HintPath>..\packages\Microsoft.CodeAnalysis.CSharp.Scripting.4.3.0\lib\netstandard2.0\Microsoft.CodeAnalysis.CSharp.Scripting.dll</HintPath>
</Reference>
<Reference Include="Microsoft.CodeAnalysis.Scripting, Version=4.3.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
<HintPath>..\packages\Microsoft.CodeAnalysis.Scripting.Common.4.3.0\lib\netstandard2.0\Microsoft.CodeAnalysis.Scripting.dll</HintPath>
</Reference>
<Reference Include="System" />
<Reference Include="System.Buffers, Version=4.0.3.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL">
<HintPath>..\packages\System.Buffers.4.5.1\lib\net461\System.Buffers.dll</HintPath>
</Reference>
<Reference Include="System.Collections.Immutable, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
<HintPath>..\packages\System.Collections.Immutable.6.0.0\lib\net461\System.Collections.Immutable.dll</HintPath>
</Reference>
<Reference Include="System.Core" />
<Reference Include="System.Memory, Version=4.0.1.1, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL">
<HintPath>..\packages\System.Memory.4.5.4\lib\net461\System.Memory.dll</HintPath>
</Reference>
<Reference Include="System.Numerics" />
<Reference Include="System.Numerics.Vectors, Version=4.1.4.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
<HintPath>..\packages\System.Numerics.Vectors.4.5.0\lib\net46\System.Numerics.Vectors.dll</HintPath>
</Reference>
<Reference Include="System.Reflection.Metadata, Version=5.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
<HintPath>..\packages\System.Reflection.Metadata.5.0.0\lib\net461\System.Reflection.Metadata.dll</HintPath>
</Reference>
<Reference Include="System.Runtime.CompilerServices.Unsafe, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
<HintPath>..\packages\System.Runtime.CompilerServices.Unsafe.6.0.0\lib\net461\System.Runtime.CompilerServices.Unsafe.dll</HintPath>
</Reference>
<Reference Include="System.Text.Encoding.CodePages, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
<HintPath>..\packages\System.Text.Encoding.CodePages.6.0.0\lib\net461\System.Text.Encoding.CodePages.dll</HintPath>
</Reference>
<Reference Include="System.Threading.Tasks.Extensions, Version=4.2.0.1, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL">
<HintPath>..\packages\System.Threading.Tasks.Extensions.4.5.4\lib\net461\System.Threading.Tasks.Extensions.dll</HintPath>
</Reference>
<Reference Include="System.Xml.Linq" />
<Reference Include="System.Data.DataSetExtensions" />
<Reference Include="Microsoft.CSharp" />
@@ -66,17 +112,24 @@
<Reference Include="System.Xml" />
</ItemGroup>
<ItemGroup>
<Compile Include="Form1.cs">
<Compile Include="MainForm.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="Form1.Designer.cs">
<DependentUpon>Form1.cs</DependentUpon>
<Compile Include="MainForm.Designer.cs">
<DependentUpon>MainForm.cs</DependentUpon>
</Compile>
<Compile Include="Program.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
<EmbeddedResource Include="Form1.resx">
<DependentUpon>Form1.cs</DependentUpon>
<Compile Include="SubForm\IndicatorLoad.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="SubForm\IndicatorLoad.Designer.cs">
<DependentUpon>IndicatorLoad.cs</DependentUpon>
</Compile>
<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>
@@ -86,6 +139,10 @@
<AutoGen>True</AutoGen>
<DependentUpon>Resources.resx</DependentUpon>
</Compile>
<EmbeddedResource Include="SubForm\IndicatorLoad.resx">
<DependentUpon>IndicatorLoad.cs</DependentUpon>
</EmbeddedResource>
<None Include="packages.config" />
<None Include="Properties\Settings.settings">
<Generator>SettingsSingleFileGenerator</Generator>
<LastGenOutput>Settings.Designer.cs</LastGenOutput>
@@ -105,5 +162,17 @@
<Name>Million Core</Name>
</ProjectReference>
</ItemGroup>
<ItemGroup>
<Analyzer Include="..\packages\Microsoft.CodeAnalysis.Analyzers.3.3.3\analyzers\dotnet\cs\Microsoft.CodeAnalysis.Analyzers.dll" />
<Analyzer Include="..\packages\Microsoft.CodeAnalysis.Analyzers.3.3.3\analyzers\dotnet\cs\Microsoft.CodeAnalysis.CSharp.Analyzers.dll" />
</ItemGroup>
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
<Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild">
<PropertyGroup>
<ErrorText>이 프로젝트는 이 컴퓨터에 없는 NuGet 패키지를 참조합니다. 해당 패키지를 다운로드하려면 NuGet 패키지 복원을 사용하십시오. 자세한 내용은 http://go.microsoft.com/fwlink/?LinkID=322105를 참조하십시오. 누락된 파일은 {0}입니다.</ErrorText>
</PropertyGroup>
<Error Condition="!Exists('..\packages\Microsoft.CodeAnalysis.Analyzers.3.3.3\build\Microsoft.CodeAnalysis.Analyzers.props')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\Microsoft.CodeAnalysis.Analyzers.3.3.3\build\Microsoft.CodeAnalysis.Analyzers.props'))" />
<Error Condition="!Exists('..\packages\Microsoft.CodeAnalysis.Analyzers.3.3.3\build\Microsoft.CodeAnalysis.Analyzers.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\Microsoft.CodeAnalysis.Analyzers.3.3.3\build\Microsoft.CodeAnalysis.Analyzers.targets'))" />
</Target>
<Import Project="..\packages\Microsoft.CodeAnalysis.Analyzers.3.3.3\build\Microsoft.CodeAnalysis.Analyzers.targets" Condition="Exists('..\packages\Microsoft.CodeAnalysis.Analyzers.3.3.3\build\Microsoft.CodeAnalysis.Analyzers.targets')" />
</Project>

View File

@@ -16,7 +16,7 @@ namespace Million_Buyer
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new Form1());
Application.Run(new MainForm());
}
}
}

View File

@@ -0,0 +1,2 @@
DevExpress.XtraTreeList.TreeList, DevExpress.XtraTreeList.v18.2, Version=18.2.8.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a
DevExpress.XtraEditors.ComboBoxEdit, DevExpress.XtraEditors.v18.2, Version=18.2.8.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a

View File

@@ -0,0 +1,173 @@
namespace Million_Buyer.SubForm
{
partial class IndicatorLoadForm
{
/// <summary>
/// Required designer variable.
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// Clean up any resources being used.
/// </summary>
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region Windows Form Designer generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
this.tl_Indicator = new DevExpress.XtraTreeList.TreeList();
this.Id = new DevExpress.XtraTreeList.Columns.TreeListColumn();
this.NameField = new DevExpress.XtraTreeList.Columns.TreeListColumn();
this.SavedDateTime = new DevExpress.XtraTreeList.Columns.TreeListColumn();
this.BuyRegularExpression = new DevExpress.XtraTreeList.Columns.TreeListColumn();
this.SellRegularExpression = new DevExpress.XtraTreeList.Columns.TreeListColumn();
this.bt_Cancel = new System.Windows.Forms.Button();
this.bt_Ok = new System.Windows.Forms.Button();
this.bt_Delete = new System.Windows.Forms.Button();
this.bt_Modify = new System.Windows.Forms.Button();
((System.ComponentModel.ISupportInitialize)(this.tl_Indicator)).BeginInit();
this.SuspendLayout();
//
// tl_Indicator
//
this.tl_Indicator.Columns.AddRange(new DevExpress.XtraTreeList.Columns.TreeListColumn[] {
this.Id,
this.NameField,
this.SavedDateTime,
this.BuyRegularExpression,
this.SellRegularExpression});
this.tl_Indicator.Cursor = System.Windows.Forms.Cursors.Default;
this.tl_Indicator.Location = new System.Drawing.Point(12, 12);
this.tl_Indicator.Name = "tl_Indicator";
this.tl_Indicator.Size = new System.Drawing.Size(718, 388);
this.tl_Indicator.TabIndex = 12;
//
// Id
//
this.Id.Caption = "ID";
this.Id.FieldName = "Id";
this.Id.Name = "Id";
this.Id.OptionsColumn.ReadOnly = true;
this.Id.Visible = true;
this.Id.VisibleIndex = 0;
//
// NameField
//
this.NameField.Caption = "Name";
this.NameField.FieldName = "NameField";
this.NameField.Name = "NameField";
this.NameField.OptionsColumn.ReadOnly = true;
this.NameField.Visible = true;
this.NameField.VisibleIndex = 1;
//
// SavedDateTime
//
this.SavedDateTime.Caption = "Save Datetime";
this.SavedDateTime.FieldName = "SavedDateTime";
this.SavedDateTime.Name = "SavedDateTime";
this.SavedDateTime.OptionsColumn.ReadOnly = true;
this.SavedDateTime.Visible = true;
this.SavedDateTime.VisibleIndex = 2;
//
// BuyRegularExpression
//
this.BuyRegularExpression.Caption = "Buy Reg";
this.BuyRegularExpression.FieldName = "BuyRegularExpression";
this.BuyRegularExpression.Name = "BuyRegularExpression";
this.BuyRegularExpression.OptionsColumn.ReadOnly = true;
this.BuyRegularExpression.Visible = true;
this.BuyRegularExpression.VisibleIndex = 3;
//
// SellRegularExpression
//
this.SellRegularExpression.Caption = "Sell Reg";
this.SellRegularExpression.FieldName = "SellRegularExpression";
this.SellRegularExpression.Name = "SellRegularExpression";
this.SellRegularExpression.OptionsColumn.ReadOnly = true;
this.SellRegularExpression.Visible = true;
this.SellRegularExpression.VisibleIndex = 4;
//
// bt_Cancel
//
this.bt_Cancel.Location = new System.Drawing.Point(655, 415);
this.bt_Cancel.Name = "bt_Cancel";
this.bt_Cancel.Size = new System.Drawing.Size(75, 23);
this.bt_Cancel.TabIndex = 14;
this.bt_Cancel.Text = "Cancel";
this.bt_Cancel.UseVisualStyleBackColor = true;
this.bt_Cancel.Click += new System.EventHandler(this.bt_Cancel_Click);
//
// bt_Ok
//
this.bt_Ok.Location = new System.Drawing.Point(574, 415);
this.bt_Ok.Name = "bt_Ok";
this.bt_Ok.Size = new System.Drawing.Size(75, 23);
this.bt_Ok.TabIndex = 13;
this.bt_Ok.Text = "OK";
this.bt_Ok.UseVisualStyleBackColor = true;
this.bt_Ok.Click += new System.EventHandler(this.bt_Ok_Click);
//
// bt_Delete
//
this.bt_Delete.Location = new System.Drawing.Point(105, 415);
this.bt_Delete.Name = "bt_Delete";
this.bt_Delete.Size = new System.Drawing.Size(75, 23);
this.bt_Delete.TabIndex = 15;
this.bt_Delete.Text = "Delete";
this.bt_Delete.UseVisualStyleBackColor = true;
this.bt_Delete.Click += new System.EventHandler(this.bt_Delete_Click);
//
// bt_Modify
//
this.bt_Modify.Location = new System.Drawing.Point(12, 415);
this.bt_Modify.Name = "bt_Modify";
this.bt_Modify.Size = new System.Drawing.Size(75, 23);
this.bt_Modify.TabIndex = 16;
this.bt_Modify.Text = "Modify";
this.bt_Modify.UseVisualStyleBackColor = true;
//
// IndicatorLoadForm
//
this.AutoScaleDimensions = new System.Drawing.SizeF(7F, 12F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.ClientSize = new System.Drawing.Size(742, 450);
this.Controls.Add(this.bt_Modify);
this.Controls.Add(this.bt_Delete);
this.Controls.Add(this.bt_Cancel);
this.Controls.Add(this.bt_Ok);
this.Controls.Add(this.tl_Indicator);
this.Name = "IndicatorLoadForm";
this.Text = "IndicatorLoad";
((System.ComponentModel.ISupportInitialize)(this.tl_Indicator)).EndInit();
this.ResumeLayout(false);
}
#endregion
private DevExpress.XtraTreeList.TreeList tl_Indicator;
private System.Windows.Forms.Button bt_Cancel;
private System.Windows.Forms.Button bt_Ok;
private DevExpress.XtraTreeList.Columns.TreeListColumn Id;
private DevExpress.XtraTreeList.Columns.TreeListColumn NameField;
private DevExpress.XtraTreeList.Columns.TreeListColumn SavedDateTime;
private DevExpress.XtraTreeList.Columns.TreeListColumn BuyRegularExpression;
private DevExpress.XtraTreeList.Columns.TreeListColumn SellRegularExpression;
private System.Windows.Forms.Button bt_Delete;
private System.Windows.Forms.Button bt_Modify;
}
}

View File

@@ -0,0 +1,93 @@
using DevExpress.XtraTreeList.Columns;
using Million;
using Million.DbManagement;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace Million_Buyer.SubForm
{
public partial class IndicatorLoadForm : Form
{
public List<Dictionary<string, object>> datas = null;
int id = 0;
public Dictionary<string, object> selectData = null;
public IndicatorLoadForm()
{
InitializeComponent();
Init();
}
private void Init()
{
tl_Indicator.ClearNodes();
datas = DBConnection.QueryGetExcuter_RealTimeIndicator();
if (datas.Count > 0)
{
tl_Indicator.BeginUnboundLoad();
foreach (var item in datas)
{
tl_Indicator.AppendNode(new object[]
{
item["Id"],
item["Name"],
((DateTime)item["SavedDateTime"]).ToString("yyyy-MM-dd HH:mm:ss"),
item["BuyRegularExpression"],
item["SellRegularExpression"]
}, null);
}
tl_Indicator.EndUnboundLoad();
}
}
/// <summary>
/// cancel 버튼
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void bt_Cancel_Click(object sender, EventArgs e)
{
this.Close();
}
/// <summary>
/// ok 버튼
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void bt_Ok_Click(object sender, EventArgs e)
{
try
{
var data = tl_Indicator.Selection.First();
if (data != null)
{
var strId = data["Id"].ToString();
selectData = datas.FirstOrDefault(t => t["Id"].ToString() == strId);
this.DialogResult = DialogResult.OK;
}
this.Close();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
private void bt_Delete_Click(object sender, EventArgs e)
{
var strId = tl_Indicator.Selection.First()["Id"].ToString();
DBConnection.QueryUpdateExcuter(CommonProperty.DbConnectionResultData,
"DELETE FROM [ResultData].[dbo].[RealTimeIndicator] WHERE Id = " + strId);
Init();
}
}
}

View File

@@ -0,0 +1,120 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
</root>

View File

@@ -1,7 +1,21 @@
<?xml version="1.0" encoding="utf-8"?>
<packages>
<package id="Microsoft.CodeAnalysis.Analyzers" version="3.3.3" targetFramework="net48" developmentDependency="true" />
<package id="Microsoft.CodeAnalysis.Common" version="4.3.0" targetFramework="net48" />
<package id="Microsoft.CodeAnalysis.CSharp" version="4.3.0" targetFramework="net48" />
<package id="Microsoft.CodeAnalysis.CSharp.Scripting" version="4.3.0" targetFramework="net48" />
<package id="Microsoft.CodeAnalysis.Scripting.Common" version="4.3.0" targetFramework="net48" />
<package id="Microsoft.CSharp" version="4.7.0" targetFramework="net48" />
<package id="Microsoft.IdentityModel.JsonWebTokens" version="6.12.0" targetFramework="net48" />
<package id="Microsoft.IdentityModel.Logging" version="6.12.0" targetFramework="net48" />
<package id="Microsoft.IdentityModel.Tokens" version="6.12.0" targetFramework="net48" />
<package id="System.Buffers" version="4.5.1" targetFramework="net48" />
<package id="System.Collections.Immutable" version="6.0.0" targetFramework="net48" />
<package id="System.IdentityModel.Tokens.Jwt" version="6.12.0" targetFramework="net48" />
<package id="System.Memory" version="4.5.4" targetFramework="net48" />
<package id="System.Numerics.Vectors" version="4.5.0" targetFramework="net48" />
<package id="System.Reflection.Metadata" version="5.0.0" targetFramework="net48" />
<package id="System.Runtime.CompilerServices.Unsafe" version="6.0.0" targetFramework="net48" />
<package id="System.Text.Encoding.CodePages" version="6.0.0" targetFramework="net48" />
<package id="System.Threading.Tasks.Extensions" version="4.5.4" targetFramework="net48" />
</packages>

View File

@@ -54,6 +54,9 @@ namespace Million
this.treeListColumn2 = new DevExpress.XtraTreeList.Columns.TreeListColumn();
this.treeListColumn3 = new DevExpress.XtraTreeList.Columns.TreeListColumn();
this.groupBox6 = new System.Windows.Forms.GroupBox();
this.label1 = new System.Windows.Forms.Label();
this.tb_BuyerIndicatorName = new System.Windows.Forms.TextBox();
this.bt_InsertBuyerIndicator = new DevExpress.XtraEditors.SimpleButton();
this.simpleButton_SaveTest = new DevExpress.XtraEditors.SimpleButton();
this.simpleButton_CalcurateData = new DevExpress.XtraEditors.SimpleButton();
this.simpleButton_ViewResultData = new DevExpress.XtraEditors.SimpleButton();
@@ -387,6 +390,9 @@ namespace Million
//
this.groupBox6.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
this.groupBox6.Controls.Add(this.label1);
this.groupBox6.Controls.Add(this.tb_BuyerIndicatorName);
this.groupBox6.Controls.Add(this.bt_InsertBuyerIndicator);
this.groupBox6.Controls.Add(this.simpleButton_SaveTest);
this.groupBox6.Controls.Add(this.simpleButton_CalcurateData);
this.groupBox6.Controls.Add(this.simpleButton_ViewResultData);
@@ -397,10 +403,35 @@ namespace Million
this.groupBox6.TabStop = false;
this.groupBox6.Text = "결과 보기";
//
// label1
//
this.label1.AutoSize = true;
this.label1.Location = new System.Drawing.Point(210, 30);
this.label1.Name = "label1";
this.label1.Size = new System.Drawing.Size(47, 12);
this.label1.TabIndex = 5;
this.label1.Text = "Name :";
//
// tb_BuyerIndicatorName
//
this.tb_BuyerIndicatorName.Location = new System.Drawing.Point(263, 27);
this.tb_BuyerIndicatorName.Name = "tb_BuyerIndicatorName";
this.tb_BuyerIndicatorName.Size = new System.Drawing.Size(126, 21);
this.tb_BuyerIndicatorName.TabIndex = 4;
//
// bt_InsertBuyerIndicator
//
this.bt_InsertBuyerIndicator.Location = new System.Drawing.Point(395, 20);
this.bt_InsertBuyerIndicator.Name = "bt_InsertBuyerIndicator";
this.bt_InsertBuyerIndicator.Size = new System.Drawing.Size(118, 30);
this.bt_InsertBuyerIndicator.TabIndex = 3;
this.bt_InsertBuyerIndicator.Text = "Buyer 정규식에 추가";
this.bt_InsertBuyerIndicator.Click += new System.EventHandler(this.bt_InsertBuyerIndicator_Click);
//
// simpleButton_SaveTest
//
this.simpleButton_SaveTest.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
this.simpleButton_SaveTest.Location = new System.Drawing.Point(530, 20);
this.simpleButton_SaveTest.Location = new System.Drawing.Point(557, 20);
this.simpleButton_SaveTest.Name = "simpleButton_SaveTest";
this.simpleButton_SaveTest.Size = new System.Drawing.Size(97, 31);
this.simpleButton_SaveTest.TabIndex = 2;
@@ -552,6 +583,7 @@ namespace Million
this.groupBox4.ResumeLayout(false);
((System.ComponentModel.ISupportInitialize)(this.treeList_SellSetupList)).EndInit();
this.groupBox6.ResumeLayout(false);
this.groupBox6.PerformLayout();
this.groupBox7.ResumeLayout(false);
this.splitContainer_SetupPanel.Panel1.ResumeLayout(false);
this.splitContainer_SetupPanel.Panel2.ResumeLayout(false);
@@ -607,6 +639,9 @@ namespace Million
private System.Windows.Forms.GroupBox groupBox9;
private DevExpress.XtraEditors.SimpleButton simpleButton_SaveTest;
public DevExpress.XtraEditors.SimpleButton simpleButton_ViewResultData;
private DevExpress.XtraEditors.SimpleButton bt_InsertBuyerIndicator;
private System.Windows.Forms.Label label1;
private System.Windows.Forms.TextBox tb_BuyerIndicatorName;
}
}

View File

@@ -80,7 +80,8 @@ namespace Million
(CommonProperty.DbConnectionResultData, DbServiceFunctions.CreateSavedAnalysisDataTableQuery());
Million.DbManagement.DBConnection.QueryUpdateExcuter
(CommonProperty.DbConnectionResultData, DbServiceFunctions.CreateSavedResultDataTableQuery());
Million.DbManagement.DBConnection.QueryUpdateExcuter
(CommonProperty.DbConnectionResultData, DbServiceFunctions.CreateRealTimeIndicatorTableQuery());
}
// 지표 콤보박스 클릭 시 이벤트
@@ -376,7 +377,8 @@ namespace Million
if (buy.BuyValue < sell.SellValue) t1++;
}
_saveResultData.EndDateTime = DateTime.Now;
_saveResultData.SavedDateTime = DateTime.Now;
tt /= totalResultList.Count;
_saveResultData.ResultDataCount = totalResultList.Count;
@@ -385,7 +387,12 @@ namespace Million
_saveResultData.WinRate = winRate;
_saveResultData.ProfitRate = totalVal / totalResultList.Count;
_saveResultData.SearchResultList = totalResultList;
_saveResultData.Name = _saveResultData.SavedDateTime.ToString("yyyy-MM-dd HH:mm:ss") + " Hunter Result";
_saveResultData.Type = "Data";
_saveResultData.SaveResultType = "Hunter";
_saveResultData.ExchangePlace = "Upbit";
// 3. 자동으로 저장하기
if (DBConnection.QueryInsertExcuter_SavedResultData(_saveResultData))
MessageBox.Show("데이터 저장 성공");
@@ -464,5 +471,20 @@ namespace Million
else
MessageBox.Show("데이터 저장 실패");
}
/// <summary>
/// Buyer 정규식에 추가
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void bt_InsertBuyerIndicator_Click(object sender, EventArgs e)
{
var name = tb_BuyerIndicatorName.Text;
if (DBConnection.QueryInsertExcuter_RealTimeIndicator(_saveResultData, name))
MessageBox.Show("데이터 저장 성공");
else
MessageBox.Show("데이터 저장 실패");
}
}
}

View File

@@ -13,7 +13,7 @@ namespace Million
/// </summary>
[STAThread]
static void Main()
{
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new MainForm());

View File

@@ -20,6 +20,15 @@ namespace Million.Data
// 거래량
public double MoneyVolume { get; set; }
public double BuyValue { get; set; }
/// <summary>
/// 구매 개수
/// </summary>
public double BuyCount { get; set; }
public DateTime BuyTime { get; set; }
public DateTime SellTime { get; set; }
public double SellValue { get; set; }
public int CandleTimeType { get; set; }
public bool RecentlyDataFlag { get; set; } = false;

View File

@@ -40,6 +40,11 @@ namespace Million.Data
public int LoseCount { get; set; } = 0;
// Buyer에서 사용
/// <summary>
/// 산 개수
/// </summary>
public double BuyCount { get; set; } = 0;
public double SellCount { get; set; } = 0;
}
}

View File

@@ -76,6 +76,7 @@ namespace Million.DbManagement
return marketDatas;
}
/// <summary>
/// Get Candle Data List
/// </summary>
@@ -214,7 +215,7 @@ namespace Million.DbManagement
conn.Close();
}
}
/// <summary>
/// Insert SavedResultData
/// </summary>
@@ -273,6 +274,60 @@ namespace Million.DbManagement
}
}
/// <summary>
/// insert RealTimeIndicator
/// </summary>
/// <param name="item"></param>
/// <returns></returns>
public static bool QueryInsertExcuter_RealTimeIndicator(SavedResultData item, string name)
{
var baBinaryFormatter = new BinaryFormatter();
var sqlQuery = DbServiceFunctions.InsertRealTimeIndicatorQuery(item, name);
var strDBCon = CommonProperty.DbConnectionResultData;
SqlConnection conn = null;
SqlDataReader rdr = null;
try
{
using (conn = new SqlConnection(strDBCon))
{
using (var cmd = new SqlCommand(sqlQuery, conn))
{
var buySetupListStream = new MemoryStream();
baBinaryFormatter.Serialize(buySetupListStream, item.BuySetupList);
buySetupListStream.Position = 0;
var sellSetupListStream = new MemoryStream();
baBinaryFormatter.Serialize(sellSetupListStream, item.SellSetupList);
sellSetupListStream.Position = 0;
cmd.Parameters.Add("@BuySetupList", SqlDbType.VarBinary, (int)buySetupListStream.Length).Value = buySetupListStream.ToArray();
cmd.Parameters.Add("@SellSetupList", SqlDbType.VarBinary, (int)sellSetupListStream.Length).Value = sellSetupListStream.ToArray();
conn.Open();
using (rdr = cmd.ExecuteReader())
{
}
}
conn.Close();
}
return true;
}
catch (Exception e)
{
Console.WriteLine(" ============= exception ===============");
Console.WriteLine(e.Message);
if (rdr != null)
rdr.Close();
if (conn != null)
conn.Close();
return false;
}
}
/// <summary>
/// Insert SavedAnalysisData
/// </summary>
@@ -501,7 +556,53 @@ namespace Million.DbManagement
return returnData;
}
public static List<Dictionary<string, object>> QueryGetExcuter_RealTimeIndicator()
{
var returnData = new List<Dictionary<string, object>>();
var sqlQuery = "SELECT * FROM [ResultData].[dbo].[RealTimeIndicator]";
var strDBCon = CommonProperty.DbConnectionResultData;
using (var conn = new SqlConnection(strDBCon))
{
using (var cmd = new SqlCommand(sqlQuery, conn))
{
try
{
conn.Open();
using (var rdr = cmd.ExecuteReader())
{
while (rdr.Read())
{
var data = new Dictionary<string, object>();
data["BuySetupList"] = (List<object>)GetBinaryConvertClass(rdr, "BuySetupList");
data["SellSetupList"] = (List<object>)GetBinaryConvertClass(rdr, "SellSetupList");
int.TryParse(rdr["Id"]?.ToString(), out var id);
data["Id"] = id;
data["Name"] = rdr["Name"]?.ToString();
data["SavedDateTime"] = Convert.ToDateTime(rdr["SavedDateTime"]?.ToString());
data["BuyRegularExpression"] = rdr["BuyRegularExpression"]?.ToString();
data["SellRegularExpression"] = rdr["SellRegularExpression"]?.ToString();
returnData.Add(data);
}
}
conn.Close();
}
catch (Exception ex)
{
Console.WriteLine(" ============= exception ===============");
Console.WriteLine(ex.Message);
conn.Close();
return returnData;
}
}
}
return returnData;
}
/// <summary>

View File

@@ -61,7 +61,24 @@ namespace Million.DbManagement
Type nvarchar(50) NOT NULL,
SaveResultType nvarchar(50) NOT NULL,
Description nvarchar(MAX) NULL
)";
}
/// <summary>
/// Create SavedResultData Table
/// </summary>
/// <returns></returns>
public static string CreateRealTimeIndicatorTableQuery()
{
return @"if not exists (select * from sysobjects where name='RealTimeIndicator' and xtype='U')
create table " + "\"RealTimeIndicator\"" + @"(
Id int IDENTITY (1,1) NOT NULL,
Name nvarchar(50) NOT NULL,
SavedDateTime datetime NOT NULL,
BuySetupList varbinary(MAX) NULL,
SellSetupList varbinary(MAX) NULL,
BuyRegularExpression varchar(100) NOT NULL,
SellRegularExpression varchar(100) NOT NULL
)";
}
@@ -442,6 +459,37 @@ namespace Million.DbManagement
}
return flag;
}
/// <summary>
/// Get Real time Indicator query
/// </summary>
/// <param name="item"></param>
/// <returns></returns>
public static string InsertRealTimeIndicatorQuery(SavedResultData item, string name)
{
var str = string.Format(@"INSERT INTO [ResultData].[dbo].[RealTimeIndicator]
(
[Name]
,[SavedDateTime]
,[BuySetupList]
,[SellSetupList]
,[BuyRegularExpression]
,[SellRegularExpression]
)VALUES(
'{0}',
'{1}',
@BuySetupList,
@SellSetupList,
'{2}',
'{3}'
);",
name,
item.SavedDateTime.ToString("yyyy-MM-dd HH:mm:ss"),
item.BuyRegularExpression,
item.SellRegularExpression
);
return str;
}
/// <summary>
/// Get Insert SavedResultData Query

View File

@@ -71,7 +71,7 @@ namespace Million.Manager
}
catch(Exception ex)
{
ex.ToString();
throw ex;
}
return false;
}

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.8 KiB

Binary file not shown.

File diff suppressed because it is too large Load Diff

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.8 KiB

View File

@@ -0,0 +1,119 @@
<?xml version="1.0"?>
<doc>
<assembly>
<name>Microsoft.CodeAnalysis.CSharp.Scripting</name>
</assembly>
<members>
<member name="T:Microsoft.CodeAnalysis.CSharp.Scripting.CSharpScript">
<summary>
A factory for creating and running C# scripts.
</summary>
</member>
<member name="M:Microsoft.CodeAnalysis.CSharp.Scripting.CSharpScript.Create``1(System.String,Microsoft.CodeAnalysis.Scripting.ScriptOptions,System.Type,Microsoft.CodeAnalysis.Scripting.Hosting.InteractiveAssemblyLoader)">
<summary>
Create a new C# script.
</summary>
<param name="code">The source code of the script.</param>
<param name="options">The script options.</param>
<param name="globalsType">Type of global object.</param>
<param name="assemblyLoader">Custom assembly loader.</param>
<typeparam name="T">The return type of the script</typeparam>
<exception cref="T:System.ArgumentNullException">Code is null.</exception>
</member>
<member name="M:Microsoft.CodeAnalysis.CSharp.Scripting.CSharpScript.Create``1(System.IO.Stream,Microsoft.CodeAnalysis.Scripting.ScriptOptions,System.Type,Microsoft.CodeAnalysis.Scripting.Hosting.InteractiveAssemblyLoader)">
<summary>
Create a new C# script.
</summary>
<param name="code">The <see cref="T:System.IO.Stream"/> representing the source code of the script.</param>
<param name="options">The script options.</param>
<param name="globalsType">Type of global object.</param>
<param name="assemblyLoader">Custom assembly loader.</param>
<typeparam name="T">The return type of the script</typeparam>
<exception cref="T:System.ArgumentNullException">Stream is null.</exception>
<exception cref="T:System.ArgumentException">Stream is not readable or seekable.</exception>
</member>
<member name="M:Microsoft.CodeAnalysis.CSharp.Scripting.CSharpScript.Create(System.String,Microsoft.CodeAnalysis.Scripting.ScriptOptions,System.Type,Microsoft.CodeAnalysis.Scripting.Hosting.InteractiveAssemblyLoader)">
<summary>
Create a new C# script.
</summary>
<param name="code">The source code of the script.</param>
<param name="options">The script options.</param>
<param name="globalsType">Type of global object.</param>
<param name="assemblyLoader">Custom assembly loader.</param>
<exception cref="T:System.ArgumentNullException">Code is null.</exception>
</member>
<member name="M:Microsoft.CodeAnalysis.CSharp.Scripting.CSharpScript.Create(System.IO.Stream,Microsoft.CodeAnalysis.Scripting.ScriptOptions,System.Type,Microsoft.CodeAnalysis.Scripting.Hosting.InteractiveAssemblyLoader)">
<summary>
Create a new C# script.
</summary>
<param name="code">The <see cref="T:System.IO.Stream"/> representing the source code of the script.</param>
<param name="options">The script options.</param>
<param name="globalsType">Type of global object.</param>
<param name="assemblyLoader">Custom assembly loader.</param>
<exception cref="T:System.ArgumentNullException">Stream is null.</exception>
<exception cref="T:System.ArgumentException">Stream is not readable or seekable.</exception>
</member>
<member name="M:Microsoft.CodeAnalysis.CSharp.Scripting.CSharpScript.RunAsync``1(System.String,Microsoft.CodeAnalysis.Scripting.ScriptOptions,System.Object,System.Type,System.Threading.CancellationToken)">
<summary>
Run a C# script.
</summary>
<param name="code">The source code of the script.</param>
<param name="options">The script options.</param>
<param name="globals">An object instance whose members can be accessed by the script as global variables.</param>
<param name="globalsType">Type of global object, <paramref name="globals"/>.GetType() is used if not specified.</param>
<param name="cancellationToken">Cancellation token.</param>
<typeparam name="T">The return type of the submission</typeparam>
<exception cref="T:Microsoft.CodeAnalysis.Scripting.CompilationErrorException">Specified code has errors.</exception>
</member>
<member name="M:Microsoft.CodeAnalysis.CSharp.Scripting.CSharpScript.RunAsync(System.String,Microsoft.CodeAnalysis.Scripting.ScriptOptions,System.Object,System.Type,System.Threading.CancellationToken)">
<summary>
Run a C# script.
</summary>
<param name="code">The source code of the script.</param>
<param name="options">The script options.</param>
<param name="globals">An object instance whose members can be accessed by the script as global variables.</param>
<param name="globalsType">Type of global object, <paramref name="globals"/>.GetType() is used if not specified.</param>
<param name="cancellationToken">Cancellation token.</param>
<exception cref="T:Microsoft.CodeAnalysis.Scripting.CompilationErrorException">Specified code has errors.</exception>
</member>
<member name="M:Microsoft.CodeAnalysis.CSharp.Scripting.CSharpScript.EvaluateAsync``1(System.String,Microsoft.CodeAnalysis.Scripting.ScriptOptions,System.Object,System.Type,System.Threading.CancellationToken)">
<summary>
Run a C# script and return its resulting value.
</summary>
<param name="code">The source code of the script.</param>
<param name="options">The script options.</param>
<param name="globals">An object instance whose members can be accessed by the script as global variables.</param>
<param name="globalsType">Type of global object, <paramref name="globals"/>.GetType() is used if not specified.</param>
<param name="cancellationToken">Cancellation token.</param>
<typeparam name="T">The return type of the submission</typeparam>
<return>Returns the value returned by running the script.</return>
<exception cref="T:Microsoft.CodeAnalysis.Scripting.CompilationErrorException">Specified code has errors.</exception>
</member>
<member name="M:Microsoft.CodeAnalysis.CSharp.Scripting.CSharpScript.EvaluateAsync(System.String,Microsoft.CodeAnalysis.Scripting.ScriptOptions,System.Object,System.Type,System.Threading.CancellationToken)">
<summary>
Run a C# script and return its resulting value.
</summary>
<param name="code">The source code of the script.</param>
<param name="options">The script options.</param>
<param name="globals">An object instance whose members can be accessed by the script as global variables.</param>
<param name="globalsType">Type of global object, <paramref name="globals"/>.GetType() is used if not specified.</param>
<param name="cancellationToken">Cancellation token.</param>
<return>Returns the value returned by running the script.</return>
<exception cref="T:Microsoft.CodeAnalysis.Scripting.CompilationErrorException">Specified code has errors.</exception>
</member>
<member name="P:Microsoft.CodeAnalysis.CSharp.Scripting.CSharpScriptingResources.LogoLine1">
<summary>Microsoft (R) Visual C# Interactive Compiler version {0}</summary>
</member>
<member name="P:Microsoft.CodeAnalysis.CSharp.Scripting.CSharpScriptingResources.LogoLine2">
<summary>Copyright (C) Microsoft Corporation. All rights reserved.</summary>
</member>
<member name="P:Microsoft.CodeAnalysis.CSharp.Scripting.CSharpScriptingResources.InteractiveHelp">
<summary>Usage: csi [option] ... [script-file.csx] [script-argument] ...
Executes script-file.csx if specified, otherwise launches an interactive REPL (Read Eval Print Loop).
Options:
/help Display this usage message (alternative form: ...</summary>
</member>
</members>
</doc>

View File

@@ -0,0 +1,119 @@
<?xml version="1.0"?>
<doc>
<assembly>
<name>Microsoft.CodeAnalysis.CSharp.Scripting</name>
</assembly>
<members>
<member name="T:Microsoft.CodeAnalysis.CSharp.Scripting.CSharpScript">
<summary>
A factory for creating and running C# scripts.
</summary>
</member>
<member name="M:Microsoft.CodeAnalysis.CSharp.Scripting.CSharpScript.Create``1(System.String,Microsoft.CodeAnalysis.Scripting.ScriptOptions,System.Type,Microsoft.CodeAnalysis.Scripting.Hosting.InteractiveAssemblyLoader)">
<summary>
Create a new C# script.
</summary>
<param name="code">The source code of the script.</param>
<param name="options">The script options.</param>
<param name="globalsType">Type of global object.</param>
<param name="assemblyLoader">Custom assembly loader.</param>
<typeparam name="T">The return type of the script</typeparam>
<exception cref="T:System.ArgumentNullException">Code is null.</exception>
</member>
<member name="M:Microsoft.CodeAnalysis.CSharp.Scripting.CSharpScript.Create``1(System.IO.Stream,Microsoft.CodeAnalysis.Scripting.ScriptOptions,System.Type,Microsoft.CodeAnalysis.Scripting.Hosting.InteractiveAssemblyLoader)">
<summary>
Create a new C# script.
</summary>
<param name="code">The <see cref="T:System.IO.Stream"/> representing the source code of the script.</param>
<param name="options">The script options.</param>
<param name="globalsType">Type of global object.</param>
<param name="assemblyLoader">Custom assembly loader.</param>
<typeparam name="T">The return type of the script</typeparam>
<exception cref="T:System.ArgumentNullException">Stream is null.</exception>
<exception cref="T:System.ArgumentException">Stream is not readable or seekable.</exception>
</member>
<member name="M:Microsoft.CodeAnalysis.CSharp.Scripting.CSharpScript.Create(System.String,Microsoft.CodeAnalysis.Scripting.ScriptOptions,System.Type,Microsoft.CodeAnalysis.Scripting.Hosting.InteractiveAssemblyLoader)">
<summary>
Create a new C# script.
</summary>
<param name="code">The source code of the script.</param>
<param name="options">The script options.</param>
<param name="globalsType">Type of global object.</param>
<param name="assemblyLoader">Custom assembly loader.</param>
<exception cref="T:System.ArgumentNullException">Code is null.</exception>
</member>
<member name="M:Microsoft.CodeAnalysis.CSharp.Scripting.CSharpScript.Create(System.IO.Stream,Microsoft.CodeAnalysis.Scripting.ScriptOptions,System.Type,Microsoft.CodeAnalysis.Scripting.Hosting.InteractiveAssemblyLoader)">
<summary>
Create a new C# script.
</summary>
<param name="code">The <see cref="T:System.IO.Stream"/> representing the source code of the script.</param>
<param name="options">The script options.</param>
<param name="globalsType">Type of global object.</param>
<param name="assemblyLoader">Custom assembly loader.</param>
<exception cref="T:System.ArgumentNullException">Stream is null.</exception>
<exception cref="T:System.ArgumentException">Stream is not readable or seekable.</exception>
</member>
<member name="M:Microsoft.CodeAnalysis.CSharp.Scripting.CSharpScript.RunAsync``1(System.String,Microsoft.CodeAnalysis.Scripting.ScriptOptions,System.Object,System.Type,System.Threading.CancellationToken)">
<summary>
Run a C# script.
</summary>
<param name="code">The source code of the script.</param>
<param name="options">The script options.</param>
<param name="globals">An object instance whose members can be accessed by the script as global variables.</param>
<param name="globalsType">Type of global object, <paramref name="globals"/>.GetType() is used if not specified.</param>
<param name="cancellationToken">Cancellation token.</param>
<typeparam name="T">The return type of the submission</typeparam>
<exception cref="T:Microsoft.CodeAnalysis.Scripting.CompilationErrorException">Specified code has errors.</exception>
</member>
<member name="M:Microsoft.CodeAnalysis.CSharp.Scripting.CSharpScript.RunAsync(System.String,Microsoft.CodeAnalysis.Scripting.ScriptOptions,System.Object,System.Type,System.Threading.CancellationToken)">
<summary>
Run a C# script.
</summary>
<param name="code">The source code of the script.</param>
<param name="options">The script options.</param>
<param name="globals">An object instance whose members can be accessed by the script as global variables.</param>
<param name="globalsType">Type of global object, <paramref name="globals"/>.GetType() is used if not specified.</param>
<param name="cancellationToken">Cancellation token.</param>
<exception cref="T:Microsoft.CodeAnalysis.Scripting.CompilationErrorException">Specified code has errors.</exception>
</member>
<member name="M:Microsoft.CodeAnalysis.CSharp.Scripting.CSharpScript.EvaluateAsync``1(System.String,Microsoft.CodeAnalysis.Scripting.ScriptOptions,System.Object,System.Type,System.Threading.CancellationToken)">
<summary>
Run a C# script and return its resulting value.
</summary>
<param name="code">The source code of the script.</param>
<param name="options">The script options.</param>
<param name="globals">An object instance whose members can be accessed by the script as global variables.</param>
<param name="globalsType">Type of global object, <paramref name="globals"/>.GetType() is used if not specified.</param>
<param name="cancellationToken">Cancellation token.</param>
<typeparam name="T">The return type of the submission</typeparam>
<return>Returns the value returned by running the script.</return>
<exception cref="T:Microsoft.CodeAnalysis.Scripting.CompilationErrorException">Specified code has errors.</exception>
</member>
<member name="M:Microsoft.CodeAnalysis.CSharp.Scripting.CSharpScript.EvaluateAsync(System.String,Microsoft.CodeAnalysis.Scripting.ScriptOptions,System.Object,System.Type,System.Threading.CancellationToken)">
<summary>
Run a C# script and return its resulting value.
</summary>
<param name="code">The source code of the script.</param>
<param name="options">The script options.</param>
<param name="globals">An object instance whose members can be accessed by the script as global variables.</param>
<param name="globalsType">Type of global object, <paramref name="globals"/>.GetType() is used if not specified.</param>
<param name="cancellationToken">Cancellation token.</param>
<return>Returns the value returned by running the script.</return>
<exception cref="T:Microsoft.CodeAnalysis.Scripting.CompilationErrorException">Specified code has errors.</exception>
</member>
<member name="P:Microsoft.CodeAnalysis.CSharp.Scripting.CSharpScriptingResources.LogoLine1">
<summary>Microsoft (R) Visual C# Interactive Compiler version {0}</summary>
</member>
<member name="P:Microsoft.CodeAnalysis.CSharp.Scripting.CSharpScriptingResources.LogoLine2">
<summary>Copyright (C) Microsoft Corporation. All rights reserved.</summary>
</member>
<member name="P:Microsoft.CodeAnalysis.CSharp.Scripting.CSharpScriptingResources.InteractiveHelp">
<summary>Usage: csi [option] ... [script-file.csx] [script-argument] ...
Executes script-file.csx if specified, otherwise launches an interactive REPL (Read Eval Print Loop).
Options:
/help Display this usage message (alternative form: ...</summary>
</member>
</members>
</doc>

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.8 KiB

Binary file not shown.

Some files were not shown because too many files have changed in this diff Show More