From 43148b773a930c2d129a6d78683241a47c8d951c Mon Sep 17 00:00:00 2001 From: jwlee Date: Mon, 10 Jun 2024 23:22:01 +0900 Subject: [PATCH] =?UTF-8?q?=EC=8A=A4=EB=A0=88=EB=93=9C=20=EC=9E=AC?= =?UTF-8?q?=EC=8B=A4=ED=96=89=20=EC=88=98=EC=A0=95=EC=A4=91!!?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- BitgetApi/MainForm.cs | 45 ++++++++++++++- BitgetApi/WebService/WebConnection.cs | 83 ++++++++++++++++++++++----- 2 files changed, 112 insertions(+), 16 deletions(-) diff --git a/BitgetApi/MainForm.cs b/BitgetApi/MainForm.cs index 912af57..eba468b 100644 --- a/BitgetApi/MainForm.cs +++ b/BitgetApi/MainForm.cs @@ -260,7 +260,7 @@ namespace BitgetAPI ichimokuConditionSetup.calIchimokuData(candleDatas_정렬, candleData_전봉); - if (candleData_전봉.Open < candleData_전봉.IchimokData.상한선 && candleData.Open > candleData.IchimokData.상한선) + if (candleData_전봉.Open < candleData_전봉.IchimokData.상한선 && candleData.Open > candleData.IchimokData.상한선 && candleData.Low > candleData.IchimokData.상한선) { var price = candleData.Close; var rate = (candleData.Close / candleData.Open) * 100 - 100; @@ -285,7 +285,7 @@ namespace BitgetAPI signals_LU.Add(signalInfoData); } } - else if (candleData_전봉.Open > candleData_전봉.IchimokData.하한선 && candleData.Open < candleData.IchimokData.하한선) + else if (candleData_전봉.Open > candleData_전봉.IchimokData.하한선 && candleData.Open < candleData.IchimokData.하한선 && candleData.High < candleData.IchimokData.하한선) { var price = candleData.Close; var rate = (candleData.Close / candleData.Open) * 100 - 100; @@ -561,6 +561,47 @@ namespace BitgetAPI // 신호 검색 시작 private void simpleButton_SignalStart_Click(object sender, EventArgs e) { + + foreach(var candleList in commonProperty.candleDataLists) + { + foreach (var interval in candleList.candleDataList) + interval.Value.Clear(); + } + + + if(th_SignalInfo != null) + { + if (th_SignalInfo.ThreadState == ThreadState.Running) + th_SignalInfo.Abort(); + th_SignalInfo = null; + } + + if (th_MarketCandeData != null) + { + if (th_MarketCandeData.ThreadState == ThreadState.Running) + th_MarketCandeData.Abort(); + th_MarketCandeData = null; + } + if(treeListMarketInfoListUpdateTimer != null) + { + if (treeListMarketInfoListUpdateTimer.ThreadState == ThreadState.Running) + treeListMarketInfoListUpdateTimer.Abort(); + treeListMarketInfoListUpdateTimer = null; + } + if (th_MarketStatusList != null) + { + for (var cnt = 0; cnt < th_MarketStatusList.Count; cnt++) + { + if (th_MarketStatusList[cnt] != null && th_MarketStatusList[cnt].ThreadState != ThreadState.Running) + { + th_MarketStatusList[cnt].Abort(); + th_MarketStatusList[cnt] = null; + } + } + } + + Thread.Sleep(1000); + var count = 0; var marketList = checkedComboBoxEdit_MarketInfoList.Properties.Items.GetCheckedValues(); diff --git a/BitgetApi/WebService/WebConnection.cs b/BitgetApi/WebService/WebConnection.cs index 3d38e3f..e9cea48 100644 --- a/BitgetApi/WebService/WebConnection.cs +++ b/BitgetApi/WebService/WebConnection.cs @@ -16,6 +16,7 @@ using BitgetApi.Data; using Newtonsoft.Json.Linq; using DevExpress.Utils.Extensions; using static BitgetAPI.CommonProperty; +using DateTime = System.DateTime; namespace BitgetAPI.WebService { @@ -157,21 +158,75 @@ namespace BitgetAPI.WebService candleData.Vol_USD = Convert.ToDouble(item[6]); // 같은 시간이 존재하면 업데이트 : 1개밖에 없음 - var sameCandleData_WebService = candleDataList.Find(i => i.Argument.Minute == candleData.Argument.Minute && - i.Argument.Hour == candleData.Argument.Hour && i.WebSocketUpdate == true); + // 마지막 시간 데이터는 불완전 > 웹소켓 데이터와 합체 + if(item == datas.Last()) + { + var timespan_add = new System.TimeSpan(0,0,0); + + switch (interval) + { + case CommonProperty.MCandleTimeType.M1: + // 같은 분이면 무조건 업데이트 + timespan_add = new System.TimeSpan(0, 1, 0); + break; + case CommonProperty.MCandleTimeType.M3: + // 같은 분이면 무조건 업데이트 + timespan_add = new System.TimeSpan(0, 3, 0); + break; + case CommonProperty.MCandleTimeType.M5: + timespan_add = new System.TimeSpan(0, 5, 0); + break; + case CommonProperty.MCandleTimeType.M15: + timespan_add = new System.TimeSpan(0, 15, 0); + break; + case CommonProperty.MCandleTimeType.M30: + timespan_add = new System.TimeSpan(0, 30, 0); + break; + case CommonProperty.MCandleTimeType.H1: + timespan_add = new System.TimeSpan(1, 0, 0); + break; + case CommonProperty.MCandleTimeType.H4: + timespan_add = new System.TimeSpan(4, 0, 0); + break; + case CommonProperty.MCandleTimeType.H6: + timespan_add = new System.TimeSpan(6, 0, 0); + break; + case CommonProperty.MCandleTimeType.H12: + timespan_add = new System.TimeSpan(12, 0, 0); + break; + } + + var sameCandleData_WebService = candleDataList.Find(i => candleData.Argument <= i.Argument && + i.Argument < (candleData.Argument + timespan_add) && i.WebSocketUpdate == true); + + if(sameCandleData_WebService != null) + { + // 종가 => 웹소켓 데이터 사용 (웹 서비스 호출 데이터 중 마지막 데이터는 캔들이 완성되지 않음) + // 시가 => 웹 서비스 데이터 사용 + sameCandleData_WebService.Open = candleData.Open; + // 저가, 고가 => 비교해서 사용 + sameCandleData_WebService.Low = Math.Min(sameCandleData_WebService.Low, candleData.Low); + sameCandleData_WebService.High = Math.Max(sameCandleData_WebService.High, candleData.High); + + sameCandleData_WebService.WebServiceUpdate = true; + } + else + { + candleDataList.Add(candleData); + candleData.WebServiceUpdate = true; + } + + } + /* + //var sameCandleData_WebService = candleDataList.Find(i => i.Argument.Minute == candleData.Argument.Minute && + //i.Argument.Hour == candleData.Argument.Hour && i.WebSocketUpdate == true); + // 기존 웹소켓으로 부터 받은 데이터에 수정 등록 if (sameCandleData_WebService != null) { - // 종가 => 웹소켓 데이터 사용 (웹 서비스 호출 데이터 중 마지막 데이터는 캔들이 완성되지 않음) - // 시가 => 웹 서비스 데이터 사용 - sameCandleData_WebService.Open = candleData.Open; - // 저가, 고가 => 비교해서 사용 - sameCandleData_WebService.Low = Math.Min(sameCandleData_WebService.Low, candleData.Low); - sameCandleData_WebService.High = Math.Max(sameCandleData_WebService.High, candleData.High); - - sameCandleData_WebService.WebServiceUpdate = true; - } + + }*/ // 웹 서비스로 받은 데이터를 새로 추가 else { @@ -283,7 +338,8 @@ namespace BitgetAPI.WebService DateTime dt = new DateTime(1970, 01, 01); tickerList.reciveTime = dt.AddMilliseconds(Convert.ToDouble(tickerList.ts)).ToLocalTime(); - // 웹소켓 티커 리스트에 추가 + // 웹소켓 티커 리스트에 추가 (사용 안함) + /* var searchIndex = commonProperty.webSocketCandles.IndexOf(i => i.instId == tickerList.instId); if (searchIndex < 0) commonProperty.webSocketCandles.Add(tickerList); @@ -291,6 +347,7 @@ namespace BitgetAPI.WebService { commonProperty.webSocketCandles[searchIndex] = tickerList; } + */ // 캔들 리스트에서 해당 데이터 찾기 var searchIndex_c = commonProperty.candleDataLists.IndexOf(i => i.ConGoodsData.MarketName == tickerList.instId); @@ -305,8 +362,6 @@ namespace BitgetAPI.WebService candleData.Argument = tickerList.reciveTime; candleData.Close = tickerList.lastPr; - if (interval == MCandleTimeType.H1) { } - // 캔들 리스트가 없으면 추가 if (candleDataList.Count == 0) candleDataList.Add(candleData);