From 63d6ef9d8c8555e268a78a9503fa5b01a8544853 Mon Sep 17 00:00:00 2001
From: kyh <1329522@naver.com>
Date: Mon, 15 Jul 2024 12:49:00 +0900
Subject: [PATCH] =?UTF-8?q?=EC=8B=B9=EB=8B=A4=20=EC=88=98=EC=A0=95?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
BitgetApi/.vs/BitgetApi.csproj.dtbcache.json | 2 +-
BitgetApi/BitgetApi.csproj | 2 +
BitgetApi/Data/ResponseCandleStick.cs | 21 +
BitgetApi/Data/ResponseCandleStickArg.cs | 15 +
BitgetApi/MainForm.cs | 38 +-
BitgetApi/WebService/WebConnection.cs | 413 +++++++++++--------
6 files changed, 317 insertions(+), 174 deletions(-)
create mode 100644 BitgetApi/Data/ResponseCandleStick.cs
create mode 100644 BitgetApi/Data/ResponseCandleStickArg.cs
diff --git a/BitgetApi/.vs/BitgetApi.csproj.dtbcache.json b/BitgetApi/.vs/BitgetApi.csproj.dtbcache.json
index e597654..8dc0f07 100644
--- a/BitgetApi/.vs/BitgetApi.csproj.dtbcache.json
+++ b/BitgetApi/.vs/BitgetApi.csproj.dtbcache.json
@@ -1 +1 @@
-{"RootPath":"D:\\Project\\bitget_api\\bitget_api\\BitgetApi","ProjectFileName":"BitgetApi.csproj","Configuration":"Debug|AnyCPU","FrameworkPath":"","Sources":[{"SourceFile":"CommonProperty.cs"},{"SourceFile":"Data\\CandleData.cs"},{"SourceFile":"Data\\CandleDataList.cs"},{"SourceFile":"Data\\MarketInfo.cs"},{"SourceFile":"Data\\SignalInfoData.cs"},{"SourceFile":"Data\\TradeData.cs"},{"SourceFile":"Data\\WebSocketCandle.cs"},{"SourceFile":"Data\\IndicatorData.cs"},{"SourceFile":"IndicatorConditionSetup\\IchimokuConditionSetup.cs"},{"SourceFile":"IndicatorConditionSetup\\MovingAverageConditionSetup.cs"},{"SourceFile":"IndicatorData\\IchimokData.cs"},{"SourceFile":"IndicatorData\\IndicatorProcess.cs"},{"SourceFile":"IndicatorData\\MovingAverageData.cs"},{"SourceFile":"MainForm.cs"},{"SourceFile":"MainForm.Designer.cs"},{"SourceFile":"Program.cs"},{"SourceFile":"Properties\\AssemblyInfo.cs"},{"SourceFile":"Utils\\BaseSingleton.cs"},{"SourceFile":"Utils\\Convertor.cs"},{"SourceFile":"WebService\\WebConnection.cs"},{"SourceFile":"Properties\\Resources.Designer.cs"},{"SourceFile":"Properties\\Settings.Designer.cs"},{"SourceFile":"obj\\Debug\\.NETFramework,Version=v4.7.2.AssemblyAttributes.cs"}],"References":[{"Reference":"C:\\Program Files\\DevExpress 23.2\\Components\\Bin\\Framework\\DevExpress.Data.Desktop.v23.2.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"C:\\Program Files\\DevExpress 23.2\\Components\\Bin\\Framework\\DevExpress.Data.v23.2.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"C:\\Program Files\\DevExpress 23.2\\Components\\Bin\\Framework\\DevExpress.Drawing.v23.2.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"C:\\Program Files\\DevExpress 23.2\\Components\\Bin\\Framework\\DevExpress.Printing.v23.2.Core.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"C:\\Program Files\\DevExpress 23.2\\Components\\Bin\\Framework\\DevExpress.Utils.v23.2.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"C:\\Program Files\\DevExpress 23.2\\Components\\Bin\\Framework\\DevExpress.XtraBars.v23.2.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"C:\\Program Files\\DevExpress 23.2\\Components\\Bin\\Framework\\DevExpress.XtraEditors.v23.2.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"C:\\Program Files\\DevExpress 23.2\\Components\\Bin\\Framework\\DevExpress.XtraGrid.v23.2.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"C:\\Program Files\\DevExpress 23.2\\Components\\Bin\\Framework\\DevExpress.XtraLayout.v23.2.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"C:\\Program Files\\DevExpress 23.2\\Components\\Bin\\Framework\\DevExpress.XtraPrinting.v23.2.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"C:\\Program Files\\DevExpress 23.2\\Components\\Bin\\Framework\\DevExpress.XtraTreeList.v23.2.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"C:\\Program Files (x86)\\Reference Assemblies\\Microsoft\\Framework\\.NETFramework\\v4.7.2\\Microsoft.CSharp.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"C:\\Program Files (x86)\\Reference Assemblies\\Microsoft\\Framework\\.NETFramework\\v4.7.2\\mscorlib.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"D:\\Project\\bitget_api\\bitget_api\\packages\\Newtonsoft.Json.13.0.3\\lib\\net45\\Newtonsoft.Json.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"C:\\Program Files (x86)\\Reference Assemblies\\Microsoft\\Framework\\.NETFramework\\v4.7.2\\PresentationCore.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"C:\\Program Files (x86)\\Reference Assemblies\\Microsoft\\Framework\\.NETFramework\\v4.7.2\\System.ComponentModel.DataAnnotations.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"C:\\Program Files (x86)\\Reference Assemblies\\Microsoft\\Framework\\.NETFramework\\v4.7.2\\System.Core.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"C:\\Program Files (x86)\\Reference Assemblies\\Microsoft\\Framework\\.NETFramework\\v4.7.2\\System.Data.DataSetExtensions.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"C:\\Program Files (x86)\\Reference Assemblies\\Microsoft\\Framework\\.NETFramework\\v4.7.2\\System.Data.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"C:\\Program Files (x86)\\Reference Assemblies\\Microsoft\\Framework\\.NETFramework\\v4.7.2\\System.Deployment.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"C:\\Program Files (x86)\\Reference Assemblies\\Microsoft\\Framework\\.NETFramework\\v4.7.2\\System.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"C:\\Program Files (x86)\\Reference Assemblies\\Microsoft\\Framework\\.NETFramework\\v4.7.2\\System.Drawing.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"C:\\Program Files (x86)\\Reference Assemblies\\Microsoft\\Framework\\.NETFramework\\v4.7.2\\System.Net.Http.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"C:\\Program Files (x86)\\Reference Assemblies\\Microsoft\\Framework\\.NETFramework\\v4.7.2\\System.Runtime.Remoting.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"C:\\Program Files (x86)\\Reference Assemblies\\Microsoft\\Framework\\.NETFramework\\v4.7.2\\System.Windows.Forms.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"C:\\Program Files (x86)\\Reference Assemblies\\Microsoft\\Framework\\.NETFramework\\v4.7.2\\System.Xml.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"C:\\Program Files (x86)\\Reference Assemblies\\Microsoft\\Framework\\.NETFramework\\v4.7.2\\System.Xml.Linq.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"C:\\Program Files (x86)\\Reference Assemblies\\Microsoft\\Framework\\.NETFramework\\v4.7.2\\UIAutomationClient.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"C:\\Program Files (x86)\\Reference Assemblies\\Microsoft\\Framework\\.NETFramework\\v4.7.2\\WindowsBase.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""}],"Analyzers":[],"Outputs":[{"OutputItemFullPath":"D:\\Project\\bitget_api\\bitget_api\\BitgetApi\\bin\\Debug\\BitgetApi.exe","OutputItemRelativePath":"BitgetApi.exe"},{"OutputItemFullPath":"D:\\Project\\bitget_api\\bitget_api\\BitgetApi\\bin\\Debug\\BitgetApi.pdb","OutputItemRelativePath":"BitgetApi.pdb"}],"CopyToOutputEntries":[]}
\ No newline at end of file
+{"RootPath":"C:\\Million Bitget_API\\BitGet_API\\BitgetApi","ProjectFileName":"BitgetApi.csproj","Configuration":"Debug|AnyCPU","FrameworkPath":"","Sources":[{"SourceFile":"CommonProperty.cs"},{"SourceFile":"Data\\CandleData.cs"},{"SourceFile":"Data\\CandleDataList.cs"},{"SourceFile":"Data\\MarketInfo.cs"},{"SourceFile":"Data\\SignalInfoData.cs"},{"SourceFile":"Data\\TradeData.cs"},{"SourceFile":"Data\\WebSocketCandle.cs"},{"SourceFile":"Data\\IndicatorData.cs"},{"SourceFile":"IndicatorConditionSetup\\IchimokuConditionSetup.cs"},{"SourceFile":"IndicatorConditionSetup\\MovingAverageConditionSetup.cs"},{"SourceFile":"IndicatorData\\IchimokData.cs"},{"SourceFile":"IndicatorConditionSetup\\IndicatorProcess.cs"},{"SourceFile":"IndicatorData\\MovingAverageData.cs"},{"SourceFile":"MainForm.cs"},{"SourceFile":"MainForm.Designer.cs"},{"SourceFile":"Program.cs"},{"SourceFile":"Properties\\AssemblyInfo.cs"},{"SourceFile":"Utils\\BaseSingleton.cs"},{"SourceFile":"Utils\\Convertor.cs"},{"SourceFile":"WebService\\WebConnection.cs"},{"SourceFile":"Properties\\Resources.Designer.cs"},{"SourceFile":"Properties\\Settings.Designer.cs"},{"SourceFile":"obj\\Debug\\.NETFramework,Version=v4.7.2.AssemblyAttributes.cs"}],"References":[{"Reference":"C:\\Program Files\\DevExpress 23.2\\Components\\Bin\\Framework\\DevExpress.Data.Desktop.v23.2.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"C:\\Program Files\\DevExpress 23.2\\Components\\Bin\\Framework\\DevExpress.Data.v23.2.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"C:\\Program Files\\DevExpress 23.2\\Components\\Bin\\Framework\\DevExpress.Drawing.v23.2.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"C:\\Program Files\\DevExpress 23.2\\Components\\Bin\\Framework\\DevExpress.Printing.v23.2.Core.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"C:\\Program Files\\DevExpress 23.2\\Components\\Bin\\Framework\\DevExpress.Utils.v23.2.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"C:\\Program Files\\DevExpress 23.2\\Components\\Bin\\Framework\\DevExpress.XtraBars.v23.2.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"C:\\Program Files\\DevExpress 23.2\\Components\\Bin\\Framework\\DevExpress.XtraEditors.v23.2.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"C:\\Program Files\\DevExpress 23.2\\Components\\Bin\\Framework\\DevExpress.XtraGrid.v23.2.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"C:\\Program Files\\DevExpress 23.2\\Components\\Bin\\Framework\\DevExpress.XtraLayout.v23.2.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"C:\\Program Files\\DevExpress 23.2\\Components\\Bin\\Framework\\DevExpress.XtraPrinting.v23.2.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"C:\\Program Files\\DevExpress 23.2\\Components\\Bin\\Framework\\DevExpress.XtraTreeList.v23.2.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"C:\\Program Files (x86)\\Reference Assemblies\\Microsoft\\Framework\\.NETFramework\\v4.7.2\\Microsoft.CSharp.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"C:\\Program Files (x86)\\Reference Assemblies\\Microsoft\\Framework\\.NETFramework\\v4.7.2\\mscorlib.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"C:\\Million Bitget_API\\BitGet_API\\packages\\Newtonsoft.Json.13.0.3\\lib\\net45\\Newtonsoft.Json.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"C:\\Program Files (x86)\\Reference Assemblies\\Microsoft\\Framework\\.NETFramework\\v4.7.2\\PresentationCore.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"C:\\Program Files (x86)\\Reference Assemblies\\Microsoft\\Framework\\.NETFramework\\v4.7.2\\System.ComponentModel.DataAnnotations.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"C:\\Program Files (x86)\\Reference Assemblies\\Microsoft\\Framework\\.NETFramework\\v4.7.2\\System.Core.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"C:\\Program Files (x86)\\Reference Assemblies\\Microsoft\\Framework\\.NETFramework\\v4.7.2\\System.Data.DataSetExtensions.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"C:\\Program Files (x86)\\Reference Assemblies\\Microsoft\\Framework\\.NETFramework\\v4.7.2\\System.Data.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"C:\\Program Files (x86)\\Reference Assemblies\\Microsoft\\Framework\\.NETFramework\\v4.7.2\\System.Deployment.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"C:\\Program Files (x86)\\Reference Assemblies\\Microsoft\\Framework\\.NETFramework\\v4.7.2\\System.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"C:\\Program Files (x86)\\Reference Assemblies\\Microsoft\\Framework\\.NETFramework\\v4.7.2\\System.Drawing.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"C:\\Program Files (x86)\\Reference Assemblies\\Microsoft\\Framework\\.NETFramework\\v4.7.2\\System.Net.Http.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"C:\\Program Files (x86)\\Reference Assemblies\\Microsoft\\Framework\\.NETFramework\\v4.7.2\\System.Runtime.Remoting.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"C:\\Program Files (x86)\\Reference Assemblies\\Microsoft\\Framework\\.NETFramework\\v4.7.2\\System.Windows.Forms.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"C:\\Program Files (x86)\\Reference Assemblies\\Microsoft\\Framework\\.NETFramework\\v4.7.2\\System.Xml.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"C:\\Program Files (x86)\\Reference Assemblies\\Microsoft\\Framework\\.NETFramework\\v4.7.2\\System.Xml.Linq.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"C:\\Program Files (x86)\\Reference Assemblies\\Microsoft\\Framework\\.NETFramework\\v4.7.2\\UIAutomationClient.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"C:\\Program Files (x86)\\Reference Assemblies\\Microsoft\\Framework\\.NETFramework\\v4.7.2\\WindowsBase.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""}],"Analyzers":[],"Outputs":[{"OutputItemFullPath":"C:\\Million Bitget_API\\BitGet_API\\BitgetApi\\bin\\Debug\\BitgetApi.exe","OutputItemRelativePath":"BitgetApi.exe"},{"OutputItemFullPath":"C:\\Million Bitget_API\\BitGet_API\\BitgetApi\\bin\\Debug\\BitgetApi.pdb","OutputItemRelativePath":"BitgetApi.pdb"}],"CopyToOutputEntries":[]}
\ No newline at end of file
diff --git a/BitgetApi/BitgetApi.csproj b/BitgetApi/BitgetApi.csproj
index 4f227f2..3cfffae 100644
--- a/BitgetApi/BitgetApi.csproj
+++ b/BitgetApi/BitgetApi.csproj
@@ -69,6 +69,8 @@
+
+
diff --git a/BitgetApi/Data/ResponseCandleStick.cs b/BitgetApi/Data/ResponseCandleStick.cs
new file mode 100644
index 0000000..4623259
--- /dev/null
+++ b/BitgetApi/Data/ResponseCandleStick.cs
@@ -0,0 +1,21 @@
+using Newtonsoft.Json;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace BitgetApi.Data
+{
+ public class ResponseCandleStick
+ {
+ public string action { get; set; }
+
+ public ResponseCandleStickArg arg { get; set; }
+
+ public List data { get; set; }
+ public double ts { get; set; }
+ [JsonIgnore]
+ public DateTime reciveTime { get; set; }
+ }
+}
diff --git a/BitgetApi/Data/ResponseCandleStickArg.cs b/BitgetApi/Data/ResponseCandleStickArg.cs
new file mode 100644
index 0000000..cc0c44d
--- /dev/null
+++ b/BitgetApi/Data/ResponseCandleStickArg.cs
@@ -0,0 +1,15 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace BitgetApi.Data
+{
+ public class ResponseCandleStickArg
+ {
+ public string instType { get; set; }
+ public string channel { get; set; }
+ public string instId { get; set; }
+ }
+}
diff --git a/BitgetApi/MainForm.cs b/BitgetApi/MainForm.cs
index fe6840b..7fe19ca 100644
--- a/BitgetApi/MainForm.cs
+++ b/BitgetApi/MainForm.cs
@@ -45,6 +45,7 @@ namespace BitgetAPI
// 스레드 종료 플래그
bool Is_th_th_MarketInfoList_WebService = false;
bool Is_th_treeListUpdate = false;
+ bool Is_th_dataCalculateThread = false;
// 신호검색 리스트 작성
// 신호 Long 상승 (구매)
@@ -173,7 +174,7 @@ namespace BitgetAPI
private void DataCalculateThread(BitgetWebSocketType type)
{
var flag = true;
-
+ Is_th_dataCalculateThread = true;
//속도 개선을 위하여 미리 선언
while (webConnection.Is_th_webSocketThread)
{
@@ -183,7 +184,8 @@ namespace BitgetAPI
th_SignalInfo = new Thread(new ThreadStart(Signalnfo));
th_SignalInfo.Start();
flag = false;
- }
+ }
+ if(!Is_th_dataCalculateThread) break;
}
}
@@ -296,7 +298,7 @@ namespace BitgetAPI
}));
}
- dataCalculateThread = new Thread(() => DataCalculateThread(BitgetWebSocketType.현황정보_전체종목));
+ dataCalculateThread = new Thread(() => DataCalculateThread(BitgetWebSocketType.캔들정보));
dataCalculateThread.Start();
}
@@ -435,7 +437,15 @@ namespace BitgetAPI
}
}
-
+ if(dataCalculateThread != null)
+ {
+ Is_th_dataCalculateThread = false;
+ if (dataCalculateThread.ThreadState == ThreadState.Running)
+ {
+ dataCalculateThread.Join();
+ dataCalculateThread = null;
+ }
+ }
}
// 검색기 > 종목 재 정렬
@@ -475,9 +485,20 @@ namespace BitgetAPI
th_treeListMarketInfoListUpdateTimer.Join();
th_treeListMarketInfoListUpdateTimer = null;
}
-
}
+ if (dataCalculateThread != null)
+ {
+ Is_th_dataCalculateThread = false;
+
+ if (dataCalculateThread.ThreadState == ThreadState.Running)
+ {
+ dataCalculateThread.Join();
+ dataCalculateThread = null;
+ }
+ }
+
+
foreach (var candleList in commonProperty.candleDataLists)
{
foreach (var interval in candleList.candleDataList)
@@ -511,7 +532,8 @@ namespace BitgetAPI
{
var args = new Dictionary();
args.Add("instType", "USDT-FUTURES");
- args.Add("channel", "ticker");
+ //args.Add("channel", "ticker");
+ args.Add("channel", "candle1m");
args.Add("instId", marketName);
argsList.Add(args);
@@ -530,8 +552,8 @@ namespace BitgetAPI
commonProperty.webConnection = webConnection;
webConnection.Is_th_webSocketThread = true;
- webConnection.BitGetWebSocektStart(BitgetWebSocketType.현황정보_전체종목, dic);
-
+ //webConnection.BitGetWebSocektStart(BitgetWebSocketType.현황정보_전체종목, dic);
+ webConnection.BitGetWebSocektStart(BitgetWebSocketType.캔들정보, dic);
//th_webSocketThread = new Thread(() => TheadWebSocketRecieve(BitgetWebSocketType.현황정보_전체종목, dic));
//th_webSocketThread.Start();
diff --git a/BitgetApi/WebService/WebConnection.cs b/BitgetApi/WebService/WebConnection.cs
index 107133f..e7796de 100644
--- a/BitgetApi/WebService/WebConnection.cs
+++ b/BitgetApi/WebService/WebConnection.cs
@@ -20,6 +20,9 @@ using DateTime = System.DateTime;
using DevExpress.Xpo.Logger;
using DevExpress.XtraTreeList.Filtering.Provider;
using System.Runtime.InteropServices;
+using DevExpress.XtraEditors.Filtering;
+using DevExpress.XtraExport.Xls;
+using DevExpress.Utils.Filtering.Internal;
namespace BitgetAPI.WebService
{
@@ -335,7 +338,8 @@ namespace BitgetAPI.WebService
}
}
- if (tempStrData == "") {
+ if (tempStrData == "")
+ {
if (!ValidateJSON(message))
{
tempStrData = message;
@@ -361,25 +365,28 @@ namespace BitgetAPI.WebService
string[] separatingStrings = { "{\"action" };
var splitData = message.Split(separatingStrings, System.StringSplitOptions.RemoveEmptyEntries);
-
+
foreach (var item in splitData)
{
var temp = "{\"action" + item;
try
{
var datalist = JsonConvert.DeserializeObject>(temp);
- lock (obj)
+ if (datalist["action"].ToString() == "update")
{
- webSocketDataList.Add(datalist);
+ lock (obj)
+ {
+ webSocketDataList.Add(datalist);
+ }
}
}
catch (JsonReaderException)
{
-
+
}
}
- }
-
+ }
+
#region 접어 둘거
//if (datalist.ContainsKey("data"))
@@ -728,7 +735,7 @@ namespace BitgetAPI.WebService
JToken.Parse(s);
}
-
+
return true;
}
catch (JsonReaderException)
@@ -765,23 +772,22 @@ namespace BitgetAPI.WebService
}
}
- var dataList = cloneList.Where(t => t.ContainsKey("data")).Select(t => t["data"]);
- var list = JsonConvert.DeserializeObject>>(JsonConvert.SerializeObject(dataList));
-
- var calList = new List();
- foreach(var item in list)
- {
- calList.Add(item[0]);
- }
-
- var stringList = list.Select(t => t[0].instId).Distinct().ToList();
- list = list.OrderBy(t => t[0].ts).ToList();
-
-
switch (bitgetWebSocketType)
{
case CommonProperty.BitgetWebSocketType.현황정보_전체종목:
{
+ var dataList = cloneList.Where(t => t.ContainsKey("data")).Select(t => t["data"]);
+ var list = JsonConvert.DeserializeObject>>(JsonConvert.SerializeObject(dataList));
+
+ var calList = new List();
+ foreach (var item in list)
+ {
+ calList.Add(item[0]);
+ }
+
+ var stringList = list.Select(t => t[0].instId).Distinct().ToList();
+ list = list.OrderBy(t => t[0].ts).ToList();
+
var minList = new Dictionary>();
foreach (var item in stringList)
@@ -797,14 +803,14 @@ namespace BitgetAPI.WebService
tickerList.reciveTime = dt.AddMilliseconds(Convert.ToDouble(tickerList.ts)).ToLocalTime();
}
- var timeList = temp.Select(t => t.reciveTime.Minute).OrderBy(t=>t).ToList();
+ var timeList = temp.Select(t => t.reciveTime.Minute).OrderBy(t => t).ToList();
foreach (var min in timeList)
{
- var minDataList = temp.Where(t => t.reciveTime.Minute == min).OrderBy(t=>t.reciveTime).ToList();
+ var minDataList = temp.Where(t => t.reciveTime.Minute == min).OrderBy(t => t.reciveTime).ToList();
var candleData = new CandleData();
- var dt = minDataList[minDataList.Count -1].reciveTime;
+ var dt = minDataList[minDataList.Count - 1].reciveTime;
candleData.Argument = dt;
candleData.Close = minDataList.Last().lastPr;
@@ -869,7 +875,7 @@ namespace BitgetAPI.WebService
var temp = minList[item];
foreach (var candleData in temp)
- {
+ {
// 캔들 리스트에서 해당 데이터 찾기
var searchIndex_c = commonProperty.candleDataLists.IndexOf(i => i.ConGoodsData.MarketName == item);
@@ -880,11 +886,14 @@ namespace BitgetAPI.WebService
var strInterval = Utils.Convertor.GetEnumDescription((Enum)interval);
if (!intervalList.Contains(strInterval)) continue;
- var candleDataList = commonProperty.candleDataLists[searchIndex_c].candleDataList[interval];
+ var candleDataList = commonProperty.candleDataLists[searchIndex_c].candleDataList[interval];
// 캔들 리스트가 없으면 추가
if (candleDataList.Count == 0)
+ {
+
candleDataList.Add(candleData);
+ }
else
{
var lastCandleData_Edit = candleDataList;
@@ -909,54 +918,66 @@ namespace BitgetAPI.WebService
}
+ if (lastCandleData.Argument.Second != 0)
+ {
+ var beforeList = lastCandleData_Edit.OrderByDescending(t => t.Argument).ToList();
+ var beforeArg = beforeList[1].Argument;
+ lastCandleData.Argument = beforeList[1].Argument.AddMinutes((int)interval);
+ }
+
// 업데이트 or 추가
bool updateFlag = false;
- switch (interval)
- {
- case CommonProperty.MCandleTimeType.M1:
- if (lastCandleData.Argument.Minute == candleData.Argument.Minute)
- updateFlag = true;
- break;
- case CommonProperty.MCandleTimeType.M3:
- if (candleData.Argument.Minute % 3 != 0 || (candleData.Argument.Minute % 3 == 0 && candleData.Argument.Minute == lastCandleData.Argument.Minute))
- updateFlag = true;
- break;
- case CommonProperty.MCandleTimeType.M5:
- if (candleData.Argument.Minute % 5 != 0 || (candleData.Argument.Minute % 5 == 0 && candleData.Argument.Minute == lastCandleData.Argument.Minute))
- updateFlag = true;
- break;
- case CommonProperty.MCandleTimeType.M15:
- if (candleData.Argument.Minute % 15 != 0 || (candleData.Argument.Minute % 15 == 0 && candleData.Argument.Minute == lastCandleData.Argument.Minute))
- updateFlag = true;
- break;
- case CommonProperty.MCandleTimeType.M30:
- if (candleData.Argument.Minute % 30 != 0 || (candleData.Argument.Minute % 30 == 0 && candleData.Argument.Minute == lastCandleData.Argument.Minute))
- updateFlag = true;
- break;
- case CommonProperty.MCandleTimeType.H1:
- if (candleData.Argument.Hour == candleData.Argument.Hour)
- updateFlag = true;
- break;
- case CommonProperty.MCandleTimeType.H4:
- if (candleData.Argument.Hour % 4 != 0 || (candleData.Argument.Hour % 4 == 0 && candleData.Argument.Hour == lastCandleData.Argument.Hour))
- updateFlag = true;
- break;
- case CommonProperty.MCandleTimeType.H6:
- if (candleData.Argument.Hour % 6 != 0 || (candleData.Argument.Hour % 6 == 0 && candleData.Argument.Hour == lastCandleData.Argument.Hour))
- updateFlag = true;
- break;
- case CommonProperty.MCandleTimeType.H12:
- if (candleData.Argument.Hour % 12 != 0 || (candleData.Argument.Hour % 12 == 0 && candleData.Argument.Hour == lastCandleData.Argument.Hour))
- updateFlag = true;
- break;
- }
+ if (candleData.Argument > lastCandleData.Argument && candleData.Argument < lastCandleData.Argument.AddMinutes((int)interval))
+ updateFlag = true;
+
+ //switch (interval)
+ //{
+ // case CommonProperty.MCandleTimeType.M1:
+ // if (lastCandleData.Argument.Minute == candleData.Argument.Minute)
+ // updateFlag = true;
+ // break;
+ // case CommonProperty.MCandleTimeType.M3:
+ // if (candleData.Argument > lastCandleData.Argument && candleData.Argument < lastCandleData.Argument.AddMinutes((int)interval))
+ // updateFlag = true;
+ // //if (candleData.Argument.Minute % 3 != 0 || (candleData.Argument.Minute % 3 == 0 && candleData.Argument.Minute == lastCandleData.Argument.Minute))
+ // // updateFlag = true;
+ // break;
+ // case CommonProperty.MCandleTimeType.M5:
+ // //if (candleData.Argument.Minute % 5 != 0 || (candleData.Argument.Minute % 5 == 0 && candleData.Argument.Minute == lastCandleData.Argument.Minute))
+ // updateFlag = true;
+ // break;
+ // case CommonProperty.MCandleTimeType.M15:
+ // if (candleData.Argument.Minute % 15 != 0 || (candleData.Argument.Minute % 15 == 0 && candleData.Argument.Minute == lastCandleData.Argument.Minute))
+ // updateFlag = true;
+ // break;
+ // case CommonProperty.MCandleTimeType.M30:
+ // if (candleData.Argument.Minute % 30 != 0 || (candleData.Argument.Minute % 30 == 0 && candleData.Argument.Minute == lastCandleData.Argument.Minute))
+ // updateFlag = true;
+ // break;
+ // case CommonProperty.MCandleTimeType.H1:
+ // if (candleData.Argument.Hour == candleData.Argument.Hour)
+ // updateFlag = true;
+ // break;
+ // case CommonProperty.MCandleTimeType.H4:
+ // if (candleData.Argument.Hour % 4 != 0 || (candleData.Argument.Hour % 4 == 0 && candleData.Argument.Hour == lastCandleData.Argument.Hour))
+ // updateFlag = true;
+ // break;
+ // case CommonProperty.MCandleTimeType.H6:
+ // if (candleData.Argument.Hour % 6 != 0 || (candleData.Argument.Hour % 6 == 0 && candleData.Argument.Hour == lastCandleData.Argument.Hour))
+ // updateFlag = true;
+ // break;
+ // case CommonProperty.MCandleTimeType.H12:
+ // if (candleData.Argument.Hour % 12 != 0 || (candleData.Argument.Hour % 12 == 0 && candleData.Argument.Hour == lastCandleData.Argument.Hour))
+ // updateFlag = true;
+ // break;
+ //}
// 이미 등록된 시간 캔들이 있는 경우 변경
if (updateFlag)
{
// 시간 업데이트
- lastCandleData.Argument = candleData.Argument;
+ //lastCandleData.Argument = candleData.Argument;
// 종가 수정
lastCandleData.Close = candleData.Close;
lastCandleData.Low = lastCandleData.Low > candleData.Low ? candleData.Low : lastCandleData.Low;
@@ -966,9 +987,12 @@ namespace BitgetAPI.WebService
}
// 없는 경우 추가
else
- {
+ {
candleData.WebSocketUpdate = true;
-
+ var dt = candleData.Argument;
+ dt = dt.AddSeconds(dt.Second * -1);
+ dt = dt.AddMilliseconds(dt.Millisecond * -1);
+ candleData.Open = lastCandleData.Close;
// 새 데이터 등록
candleDataList.Add(candleData);
@@ -988,115 +1012,174 @@ namespace BitgetAPI.WebService
case CommonProperty.BitgetWebSocketType.캔들정보:
#region 캔들 웹소켓 : 종목 50, 캔들 1 개만 해도 뒤지려고 함 !! (일딴 패스)
{
- foreach (var datalist in cloneList)
+ var list = new List();
+ cloneList = cloneList.Where(t => t["action"].ToString() == "update").ToList();
+ foreach (var item in cloneList)
{
- var argList = JsonConvert.DeserializeObject>(datalist["arg"]?.ToString());
+ var resCandleStick = new ResponseCandleStick();
+ resCandleStick.arg = new ResponseCandleStickArg();
- var candleInfos = JsonConvert.DeserializeObject>>(datalist["data"]?.ToString());
- var candleInfo = candleInfos[0];
+ double.TryParse(item["ts"].ToString(), out var ts);
- DateTime dt = new DateTime(1970, 01, 01);
- var candleData = new CandleData(
- dt.AddMilliseconds(Convert.ToDouble(candleInfo[0])).ToLocalTime(),
- Convert.ToDouble(candleInfo[1]),
- Convert.ToDouble(candleInfo[2]),
- Convert.ToDouble(candleInfo[3]),
- Convert.ToDouble(candleInfo[4]),
- Convert.ToDouble(candleInfo[5]),
- Convert.ToDouble(candleInfo[6]),
- Convert.ToDouble(candleInfo[7])
- );
+ var arg = (JObject)item["arg"];
+ resCandleStick.arg.instType = arg.GetValue("instType").ToString();
+ resCandleStick.arg.channel = arg.GetValue("channel").ToString();
+ resCandleStick.arg.instId = arg.GetValue("instId").ToString();
+ resCandleStick.action = item["action"]?.ToString();
+ resCandleStick.ts = ts;
+ var dataList = JsonConvert.DeserializeObject>>(JsonConvert.SerializeObject(item["data"]));
+ resCandleStick.data = dataList[0];
+ list.Add(resCandleStick);
+ }
- // Websocket 캔들 정보 구분 하기 (1분, 1시간 등)
- CommonProperty.MCandleTimeType mCandleTimeType = CommonProperty.MCandleTimeType.H1;
- foreach (var interval in Enum.GetValues(typeof(CommonProperty.MCandleTimeType)))
+ var minList = new Dictionary>();
+
+ var stringList = list.Select(t => t.arg.instId).ToList();
+ list = list.OrderBy(t => t.ts).ToList();
+
+ foreach (var item in stringList)
+ {
+ var temp = list.Where(t => item == t.arg.instId);
+ if (temp.Count() > 0)
{
- // Description
- var description = Utils.Convertor.GetEnumDescription((Enum)interval);
- if (argList["channel"].ToString().Contains(description))
- mCandleTimeType = (CommonProperty.MCandleTimeType)interval;
- break;
+ minList.Add(item, new List());
+ foreach (var t in temp)
+ {
+ DateTime dt = new DateTime(1970, 01, 01);
+ t.reciveTime = dt.AddMilliseconds(Convert.ToDouble(t.data[0])).ToLocalTime();
+ }
+
+ var timeList = temp.Select(t => t.reciveTime.Minute).OrderBy(t => t).ToList();
+
+ foreach (var min in timeList)
+ {
+ var minDataList = temp.Where(t => t.reciveTime.Minute == min).OrderBy(t => t.reciveTime).ToList();
+ var lastData = minDataList[minDataList.Count - 1];
+ var candleData = new CandleData();
+
+ double.TryParse(lastData.data[1].ToString(), out var openData);
+ double.TryParse(lastData.data[2].ToString(), out var highData);
+ double.TryParse(lastData.data[3].ToString(), out var lowData);
+ double.TryParse(lastData.data[4].ToString(), out var closeData);
+
+ candleData.Argument = lastData.reciveTime;
+ candleData.Close = closeData;
+ candleData.Open = openData;
+ candleData.Low = lowData;
+ candleData.High = highData;
+
+ minList[item].Add(candleData);
+ }
}
+ }
+ foreach (var item in minList.Keys)
+ {
+ var temp = minList[item];
- // 캔들 리스트에서 해당 데이터 찾기
- var searchIndex = commonProperty.candleDataLists.IndexOf(i => i.ConGoodsData.MarketName == argList["instId"].ToString());
-
- var candleDataList = commonProperty.candleDataLists[searchIndex].candleDataList[mCandleTimeType];
-
- // 마지막 데이터 (최신데이터) 가져오기
- CandleData lastCandleData = null;
-
- if (candleDataList.Count == 0)
- candleDataList.Add(candleData);
- else
- {
- lastCandleData = commonProperty.candleDataLists[searchIndex].candleDataList[mCandleTimeType].Last();
-
- // 최신데이터와 비교하여 교체/등록하기
-
- // 업데이트 or 추가
- bool updateFlag = false;
-
- switch (mCandleTimeType)
+ foreach (var candleData in temp)
+ {
+ foreach (CommonProperty.MCandleTimeType mCandleTimeType in Enum.GetValues(typeof(CommonProperty.MCandleTimeType)))
{
- case CommonProperty.MCandleTimeType.M1:
- if (lastCandleData.Argument.Minute == candleData.Argument.Minute)
- updateFlag = true;
- break;
- case CommonProperty.MCandleTimeType.M3:
- if (candleData.Argument.Minute % 3 != 0 || (candleData.Argument.Minute % 3 == 0 && candleData.Argument.Minute == lastCandleData.Argument.Minute))
- updateFlag = true;
- break;
- case CommonProperty.MCandleTimeType.M5:
- if (candleData.Argument.Minute % 5 != 0 || (candleData.Argument.Minute % 5 == 0 && candleData.Argument.Minute == lastCandleData.Argument.Minute))
- updateFlag = true;
- break;
- case CommonProperty.MCandleTimeType.M15:
- if (candleData.Argument.Minute % 15 != 0 || (candleData.Argument.Minute % 15 == 0 && candleData.Argument.Minute == lastCandleData.Argument.Minute))
- updateFlag = true;
- break;
- case CommonProperty.MCandleTimeType.M30:
- if (candleData.Argument.Minute % 30 != 0 || (candleData.Argument.Minute % 30 == 0 && candleData.Argument.Minute == lastCandleData.Argument.Minute))
- updateFlag = true;
- break;
- case CommonProperty.MCandleTimeType.H1:
- if (candleData.Argument.Hour == candleData.Argument.Hour)
- updateFlag = true;
- break;
- case CommonProperty.MCandleTimeType.H4:
- if (candleData.Argument.Hour % 4 != 0 || (candleData.Argument.Hour % 4 == 0 && candleData.Argument.Hour == lastCandleData.Argument.Hour))
- updateFlag = true;
- break;
- case CommonProperty.MCandleTimeType.H6:
- if (candleData.Argument.Hour % 6 != 0 || (candleData.Argument.Hour % 6 == 0 && candleData.Argument.Hour == lastCandleData.Argument.Hour))
- updateFlag = true;
- break;
- case CommonProperty.MCandleTimeType.H12:
- if (candleData.Argument.Hour % 12 != 0 || (candleData.Argument.Hour % 12 == 0 && candleData.Argument.Hour == lastCandleData.Argument.Hour))
- updateFlag = true;
- break;
- }
+ var strInterval = Utils.Convertor.GetEnumDescription((Enum)mCandleTimeType);
+ if (!intervalList.Contains(strInterval)) continue;
- // 이미 등록된 시간 캔들이 있는 경우 변경
- if (updateFlag)
- {
- lastCandleData = candleData;
- }
- // 없는 경우 추가
- else
- {
- lastCandleData.Close = candleData.Open;
- // 새 데이터 등록
- candleDataList.Add(candleData);
- // 기존 데이터 삭제
- if (candleDataList.Count > 250)
+ // 캔들 리스트에서 해당 데이터 찾기
+ var searchIndex = commonProperty.candleDataLists.IndexOf(i => i.ConGoodsData.MarketName == item);
+
+ var candleDataList = commonProperty.candleDataLists[searchIndex].candleDataList[mCandleTimeType];
+
+ // 마지막 데이터 (최신데이터) 가져오기
+ CandleData lastCandleData = null;
+
+ if (candleDataList.Count == 0)
+ candleDataList.Add(candleData);
+ else
{
+ var max = candleDataList.Max(t => t.Argument);
+ lastCandleData = candleDataList.Find(t => t.Argument == max);
- var minData = candleDataList.Min(t => t.Argument);
- var minCandle = candleDataList.FirstOrDefault(t => t.Argument == minData);
- if (minCandle != null)
+ // 최신데이터와 비교하여 교체/등록하기
+ if (lastCandleData.Argument.Second != 0)
{
- candleDataList.Remove(minCandle);
+ var beforeList = candleDataList.OrderByDescending(t => t.Argument).ToList();
+ var beforeArg = beforeList[1].Argument;
+ lastCandleData.Argument = beforeList[1].Argument.AddMinutes((int)mCandleTimeType);
+ }
+
+ // 업데이트 or 추가
+ bool updateFlag = false;
+
+ if (candleData.Argument >= lastCandleData.Argument && candleData.Argument < lastCandleData.Argument.AddMinutes((int)mCandleTimeType))
+ updateFlag = true;
+ #region 접어 두기
+ //switch (mCandleTimeType)
+ //{
+ // case CommonProperty.MCandleTimeType.M1:
+ // if (lastCandleData.Argument.Minute == candleData.Argument.Minute)
+ // updateFlag = true;
+ // break;
+ // case CommonProperty.MCandleTimeType.M3:
+ // if (candleData.Argument.Minute % 3 != 0 || (candleData.Argument.Minute % 3 == 0 && candleData.Argument.Minute == lastCandleData.Argument.Minute))
+ // updateFlag = true;
+ // break;
+ // case CommonProperty.MCandleTimeType.M5:
+ // if (candleData.Argument.Minute % 5 != 0 || (candleData.Argument.Minute % 5 == 0 && candleData.Argument.Minute == lastCandleData.Argument.Minute))
+ // updateFlag = true;
+ // break;
+ // case CommonProperty.MCandleTimeType.M15:
+ // if (candleData.Argument.Minute % 15 != 0 || (candleData.Argument.Minute % 15 == 0 && candleData.Argument.Minute == lastCandleData.Argument.Minute))
+ // updateFlag = true;
+ // break;
+ // case CommonProperty.MCandleTimeType.M30:
+ // if (candleData.Argument.Minute % 30 != 0 || (candleData.Argument.Minute % 30 == 0 && candleData.Argument.Minute == lastCandleData.Argument.Minute))
+ // updateFlag = true;
+ // break;
+ // case CommonProperty.MCandleTimeType.H1:
+ // if (candleData.Argument.Hour == candleData.Argument.Hour)
+ // updateFlag = true;
+ // break;
+ // case CommonProperty.MCandleTimeType.H4:
+ // if (candleData.Argument.Hour % 4 != 0 || (candleData.Argument.Hour % 4 == 0 && candleData.Argument.Hour == lastCandleData.Argument.Hour))
+ // updateFlag = true;
+ // break;
+ // case CommonProperty.MCandleTimeType.H6:
+ // if (candleData.Argument.Hour % 6 != 0 || (candleData.Argument.Hour % 6 == 0 && candleData.Argument.Hour == lastCandleData.Argument.Hour))
+ // updateFlag = true;
+ // break;
+ // case CommonProperty.MCandleTimeType.H12:
+ // if (candleData.Argument.Hour % 12 != 0 || (candleData.Argument.Hour % 12 == 0 && candleData.Argument.Hour == lastCandleData.Argument.Hour))
+ // updateFlag = true;
+ // break;
+ //}
+ #endregion
+ // 이미 등록된 시간 캔들이 있는 경우 변경
+ if (updateFlag)
+ {
+ // 시간 업데이트
+ //lastCandleData.Argument = candleData.Argument;
+ // 종가 수정
+ lastCandleData.Close = candleData.Close;
+ lastCandleData.Low = lastCandleData.Low > candleData.Low ? candleData.Low : lastCandleData.Low;
+ lastCandleData.High = lastCandleData.High < candleData.High ? candleData.High : lastCandleData.High;
+
+ lastCandleData.WebSocketUpdate = true;
+ }
+ // 없는 경우 추가
+ else
+ {
+ candleData.WebSocketUpdate = true;
+ var dt = candleData.Argument;
+ dt = dt.AddSeconds(dt.Second * -1);
+ dt = dt.AddMilliseconds(dt.Millisecond * -1);
+ // 새 데이터 등록
+ candleDataList.Add(candleData);
+
+ // 기존 데이터 삭제
+ if (candleDataList.Count > 250)
+ {
+ // 가장 오래된 데이터 삭제
+ candleDataList.Remove(j => j.Argument == candleDataList.Min(i => i.Argument));
+ }
}
}
}