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)); + } } } }