수정중!!

This commit is contained in:
USER002
2024-06-03 19:01:51 +09:00
parent 77f9363ce7
commit 3b84645a04
9 changed files with 681 additions and 320 deletions

File diff suppressed because one or more lines are too long

View File

@@ -33,17 +33,17 @@
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<ItemGroup>
<Reference Include="DevExpress.Data.Desktop.v23.2, Version=23.2.3.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a" />
<Reference Include="DevExpress.Data.v23.2, Version=23.2.3.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a" />
<Reference Include="DevExpress.Drawing.v23.2, Version=23.2.3.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a" />
<Reference Include="DevExpress.Printing.v23.2.Core, Version=23.2.3.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a" />
<Reference Include="DevExpress.Utils.v23.2, Version=23.2.3.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a, processorArchitecture=MSIL" />
<Reference Include="DevExpress.XtraBars.v23.2, Version=23.2.3.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a, processorArchitecture=MSIL" />
<Reference Include="DevExpress.XtraEditors.v23.2, Version=23.2.3.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a" />
<Reference Include="DevExpress.XtraGrid.v23.2, Version=23.2.3.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a, processorArchitecture=MSIL" />
<Reference Include="DevExpress.XtraLayout.v23.2, Version=23.2.3.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a" />
<Reference Include="DevExpress.XtraPrinting.v23.2, Version=23.2.3.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a" />
<Reference Include="DevExpress.XtraTreeList.v23.2, Version=23.2.3.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a, processorArchitecture=MSIL" />
<Reference Include="DevExpress.Data.Desktop.v23.2, Version=23.2.4.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a" />
<Reference Include="DevExpress.Data.v23.2, Version=23.2.4.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a" />
<Reference Include="DevExpress.Drawing.v23.2, Version=23.2.4.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a" />
<Reference Include="DevExpress.Printing.v23.2.Core, Version=23.2.4.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a" />
<Reference Include="DevExpress.Utils.v23.2, Version=23.2.4.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a, processorArchitecture=MSIL" />
<Reference Include="DevExpress.XtraBars.v23.2, Version=23.2.4.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a, processorArchitecture=MSIL" />
<Reference Include="DevExpress.XtraEditors.v23.2, Version=23.2.4.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a" />
<Reference Include="DevExpress.XtraGrid.v23.2, Version=23.2.4.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a, processorArchitecture=MSIL" />
<Reference Include="DevExpress.XtraLayout.v23.2, Version=23.2.4.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a" />
<Reference Include="DevExpress.XtraPrinting.v23.2, Version=23.2.4.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a" />
<Reference Include="DevExpress.XtraTreeList.v23.2, Version=23.2.4.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a, processorArchitecture=MSIL" />
<Reference Include="Newtonsoft.Json, Version=13.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL">
<HintPath>..\packages\Newtonsoft.Json.13.0.3\lib\net45\Newtonsoft.Json.dll</HintPath>
</Reference>

View File

@@ -33,17 +33,17 @@
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<ItemGroup>
<Reference Include="DevExpress.Data.Desktop.v23.2, Version=23.2.4.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a" />
<Reference Include="DevExpress.Data.v23.2, Version=23.2.4.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a" />
<Reference Include="DevExpress.Drawing.v23.2, Version=23.2.4.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a" />
<Reference Include="DevExpress.Printing.v23.2.Core, Version=23.2.4.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a" />
<Reference Include="DevExpress.Utils.v23.2, Version=23.2.4.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a, processorArchitecture=MSIL" />
<Reference Include="DevExpress.XtraBars.v23.2, Version=23.2.4.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a, processorArchitecture=MSIL" />
<Reference Include="DevExpress.XtraEditors.v23.2, Version=23.2.4.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a" />
<Reference Include="DevExpress.XtraGrid.v23.2, Version=23.2.4.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a, processorArchitecture=MSIL" />
<Reference Include="DevExpress.XtraLayout.v23.2, Version=23.2.4.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a" />
<Reference Include="DevExpress.XtraPrinting.v23.2, Version=23.2.4.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a" />
<Reference Include="DevExpress.XtraTreeList.v23.2, Version=23.2.4.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a, processorArchitecture=MSIL" />
<Reference Include="DevExpress.Data.Desktop.v23.2, Version=23.2.3.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a" />
<Reference Include="DevExpress.Data.v23.2, Version=23.2.3.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a" />
<Reference Include="DevExpress.Drawing.v23.2, Version=23.2.3.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a" />
<Reference Include="DevExpress.Printing.v23.2.Core, Version=23.2.3.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a" />
<Reference Include="DevExpress.Utils.v23.2, Version=23.2.3.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a, processorArchitecture=MSIL" />
<Reference Include="DevExpress.XtraBars.v23.2, Version=23.2.3.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a, processorArchitecture=MSIL" />
<Reference Include="DevExpress.XtraEditors.v23.2, Version=23.2.3.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a" />
<Reference Include="DevExpress.XtraGrid.v23.2, Version=23.2.3.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a, processorArchitecture=MSIL" />
<Reference Include="DevExpress.XtraLayout.v23.2, Version=23.2.3.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a" />
<Reference Include="DevExpress.XtraPrinting.v23.2, Version=23.2.3.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a" />
<Reference Include="DevExpress.XtraTreeList.v23.2, Version=23.2.3.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a, processorArchitecture=MSIL" />
<Reference Include="Newtonsoft.Json, Version=13.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL">
<HintPath>..\packages\Newtonsoft.Json.13.0.3\lib\net45\Newtonsoft.Json.dll</HintPath>
</Reference>
@@ -69,6 +69,7 @@
<Compile Include="Data\CandleData.cs" />
<Compile Include="Data\CandleDataList.cs" />
<Compile Include="Data\MarketInfo.cs" />
<Compile Include="Data\SignalInfoData.cs" />
<Compile Include="Data\TradeData.cs" />
<Compile Include="Data\WebSocketCandle.cs" />
<Compile Include="Data\IndicatorData.cs" />
@@ -91,6 +92,7 @@
<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>

View File

@@ -1,4 +1,5 @@
using System;
using BitgetAPI;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
@@ -14,18 +15,20 @@ namespace BitgetApi.Data
public string MarketName { get; set; }
// 종목 설명 (시간별, 어떤거?)
public string Description { get; set; }
// 현재가
public double Price { get; set; }
// 설정된 시간 봉의 수익율
public double rate { get; set; }
public double Rate { get; set; }
// 구름떼 상한선 가격
public double indicatorPrice { get; set; }
public double IndicatorPrice { get; set; }
// 설정된 지표(Indicator)와의 격차 비율
public double indicoatorRate { get; set; }
public double IndicatorRate { get; set; }
public CommonProperty.MCandleTimeType MCandleTimeType {get; set;}
}
}

View File

@@ -80,7 +80,8 @@ namespace BitgetAPI.IndicatorConditionSetup
// Displacement : 26 일전봉 데이터 가져오기
endIndex = endIndex - Displacement;
endIndex = candleDatas.Count-1;
endIndex = endIndex - Displacement +1;
datas = candleDatas.FindAll(i =>
candleDatas.IndexOf(i) > endIndex - ConversionPeriod &&
@@ -124,7 +125,5 @@ namespace BitgetAPI.IndicatorConditionSetup
if (candleData.IchimokData.하한선 < candleData.Close) candleData.IchimokData.IsShortUp = true;
else candleData.IchimokData.IsShortUp = false;
}
}
}

File diff suppressed because it is too large Load Diff

View File

@@ -21,6 +21,7 @@ using System.Threading.Tasks;
using System.Windows.Forms;
using static BitgetAPI.CommonProperty;
using static DevExpress.Utils.Html.ViewInfo.DxHtmlOrderedListInfoCore;
using static System.Windows.Forms.VisualStyles.VisualStyleElement.TextBox;
namespace BitgetAPI
{
@@ -71,8 +72,6 @@ namespace BitgetAPI
comboBoxEdit_ExchangePlace.SelectedIndex = (int)CommonProperty.ExchangePlace.Bitget;
commonProperty.selectedChangePlace = CommonProperty.ExchangePlace.Bitget;
treeList_MarketInfo.DataSource = commonProperty.webSocketCandles;
// 현황판 정렬
treeList_MarketInfo.BeginSort();
treeList_MarketInfo.Columns["quoteVolume"].SortOrder = SortOrder.Descending;
@@ -80,6 +79,7 @@ namespace BitgetAPI
// 현황판 웹소켓
commonProperty.webSocketCandles = new List<WebSocketTickerInfo>();
treeList_MarketInfo.DataSource = commonProperty.webSocketCandles;
th_MarketStatus = new Thread(() => ThreadEventAsync(BitgetWebSocketType.현황정보_전체종목, "ticker"));
th_MarketStatus.Start();
@@ -87,10 +87,6 @@ namespace BitgetAPI
treeListMarketInfoListUpdateTimer = new Thread(new ThreadStart(TreeListMarketInfoListUpdate));
treeListMarketInfoListUpdateTimer.Start();
// 신호검색 스레드
th_SignalInfo = new Thread(new ThreadStart(Signalnfo));
th_SignalInfo.Start();
// 신호 Long 상승 (구매)
signals_LU = new List<SignalInfoData>();
// 신호 Short 하락 (구매)
@@ -100,7 +96,13 @@ namespace BitgetAPI
// 검색현황 Short 상승 (판매)
signals_SU = new List<SignalInfoData>();
// 신호검색 트리리스트 설정
treeList_LongUp.DataSource = signals_LU;
treeList_ShortDown.DataSource = signals_SD;
// 신호검색 스레드
th_SignalInfo = new Thread(new ThreadStart(Signalnfo));
th_SignalInfo.Start();
// API Key 가져오기 및 등록
@@ -133,11 +135,16 @@ namespace BitgetAPI
Invoke(new MethodInvoker(delegate ()
{
var scrollPoint = treeList_MarketInfo.TopVisibleNodeIndex;
var scrollPoint_LU = treeList_LongUp.TopVisibleNodeIndex;
var scrollPoint_SD = treeList_ShortDown.TopVisibleNodeIndex;
treeList_MarketInfo.RefreshDataSource();
treeList_MarketInfo.ClearSelection();
treeList_LongUp.RefreshDataSource();
treeList_ShortDown.RefreshDataSource();
treeList_MarketInfo.TopVisibleNodeIndex = scrollPoint;
treeList_LongUp.TopVisibleNodeIndex = scrollPoint_LU;
treeList_ShortDown.TopVisibleNodeIndex = scrollPoint_SD;
}));
}
}
@@ -160,25 +167,39 @@ namespace BitgetAPI
while (true)
{
Thread.Sleep(300);
//if (!xtraTabPage_Searcher.PageEnabled) continue;
Thread.Sleep(200);
var nowTime = DateTime.Now;
// 특정 시간 이후 삭제
foreach (var item in signals_LU)
foreach (var item in signals_LU.ToList())
{
// 시간 지나면 삭제
if (item.SignalStart + timeSpanEdit_SesstionTime.TimeSpan > nowTime)
if (item.SignalStart + timeSpanEdit_SesstionTime.TimeSpan < nowTime)
{
signals_LU.Remove(item);
continue;
}
}
foreach (var item in signals_LD)
if (item.SignalStart + timeSpanEdit_SesstionTime.TimeSpan > nowTime) { signals_LD.Remove(item); }
foreach (var item in signals_SU)
if (item.SignalStart + timeSpanEdit_SesstionTime.TimeSpan > nowTime) signals_SU.Remove(item);
foreach (var item in signals_SD)
if (item.SignalStart + timeSpanEdit_SesstionTime.TimeSpan > nowTime) signals_SD.Remove(item);
var findedMarket = commonProperty.candleDataLists.Find(i => i.ConGoodsData.MarketName == item.MarketName);
var lastCandleData = findedMarket.candleDataList[item.MCandleTimeType].OrderBy(i => i.Argument).ToList().Last();
if(lastCandleData.IchimokData != null)
{
item.Price = lastCandleData.Close;
item.Rate = (lastCandleData.Close / lastCandleData.Open) * 100 - 100;
item.IndicatorPrice = lastCandleData.IchimokData.상한선;
item.IndicatorRate = (lastCandleData.Close / item.IndicatorPrice) * 100 - 100;
}
}
foreach (var item in signals_LD.ToList())
if (item.SignalStart + timeSpanEdit_SesstionTime.TimeSpan < nowTime) { signals_LD.Remove(item); }
foreach (var item in signals_SU.ToList())
if (item.SignalStart + timeSpanEdit_SesstionTime.TimeSpan < nowTime) signals_SU.Remove(item);
foreach (var item in signals_SD.ToList())
if (item.SignalStart + timeSpanEdit_SesstionTime.TimeSpan < nowTime) signals_SD.Remove(item);
var intervalList = checkedComboBoxEdit_TimeInterval.Properties.Items.GetCheckedValues();
@@ -201,12 +222,12 @@ namespace BitgetAPI
ichimokuConditionSetup.calIchimokuData(candleDatas_정렬, candleData);
candleDatas_정렬.RemoveAt(candleDatas_정렬.Count-1);
candleDatas_정렬.RemoveAt(candleDatas_정렬.Count - 1);
var candleData_전봉 = candleDatas.Find(i => i.Argument == candleDatas_정렬.Last().Argument);
ichimokuConditionSetup.calIchimokuData(candleDatas_정렬, candleData_전봉);
if (candleData_전봉.Open < candleData_전봉.IchimokData.상한선 && candleData.Open > candleData_전봉.IchimokData.상한선)
if (candleData_전봉.Open < candleData_전봉.IchimokData.상한선 && candleData.Open > candleData.IchimokData.상한선)
{
var price = candleData.Close;
var rate = (candleData.Close / candleData.Open) * 100 - 100;
@@ -214,13 +235,38 @@ namespace BitgetAPI
var indicatorRate = (candleData.Close / indicatorPrice) * 100 - 100;
var signalData = signals_LU.Find(i => i.MarketName.Equals(market));
// 없으면 생성
if (signalData == null)
{
SignalInfoData signalInfoData = new SignalInfoData();
signalInfoData.SignalStart = nowTime;
signalInfoData.MarketName = market;
signalInfoData.Description = string.Format("{0} 상승", description);
signalInfoData.Rate = rate;
signalInfoData.Price = price;
signalInfoData.IndicatorPrice = indicatorPrice;
signalInfoData.IndicatorRate = indicatorRate;
signalInfoData.MCandleTimeType = interval;
signals_LU.Add(signalInfoData);
}
}
else if (candleData_전봉.Open > candleData_전봉.IchimokData.하한선 && candleData.Open < candleData.IchimokData.하한선)
{
var price = candleData.Close;
var rate = (candleData.Close / candleData.Open) * 100 - 100;
var indicatorPrice = candleData.IchimokData.하한선;
var indicatorRate = (candleData.Close / indicatorPrice) * 100 - 100;
var signalData = signals_SD.Find(i => i.MarketName.Equals(market));
// 존재하면 업데이트
if (signalData != null)
{
signalData.Price = price;
signalData.rate = rate;
signalData.indicatorPrice = indicatorPrice;
signalData.indicoatorRate = indicatorRate;
signalData.Rate = rate;
signalData.IndicatorPrice = indicatorPrice;
signalData.IndicatorRate = indicatorRate;
}
// 없으면 생성
else
@@ -228,30 +274,19 @@ namespace BitgetAPI
SignalInfoData signalInfoData = new SignalInfoData();
signalInfoData.SignalStart = nowTime;
signalInfoData.MarketName = market;
signalInfoData.Description = "상승 돌파";
signalData.rate = rate;
signalInfoData.Description = string.Format("{0} 하락", description);
signalInfoData.Rate = rate;
signalInfoData.Price = price;
signalInfoData.indicatorPrice = indicatorPrice;
signalInfoData.indicoatorRate = indicatorRate;
signalInfoData.IndicatorPrice = indicatorPrice;
signalInfoData.IndicatorRate = indicatorRate;
signals_LU.Add(signalInfoData);
signals_SD.Add(signalInfoData);
}
}
}
}
Invoke(new MethodInvoker(delegate ()
{
var scrollPoint_LU = treeList_LongUp.TopVisibleNodeIndex;
// 신호검색 트리리스트 설정
treeList_LongUp.DataSource = signals_LU;
treeList_LongUp.RefreshDataSource();
treeList_LongUp.TopVisibleNodeIndex = scrollPoint_LU;
}));
}
}
@@ -259,13 +294,11 @@ namespace BitgetAPI
// 종목별 캔들데이터 가져오기 (초기 설정) => Thread
private void getMarketCandleData_WebService(ExchangeWebReqType exchangeWebReqType)
{
// 프로그레스 바
progressBarControl_data.Properties.Minimum = 0;
progressBarControl_data.Properties.Maximum = commonProperty.candleDataLists.Count;
progressBarControl_data.Properties.Step = 1;
progressBarControl_data.EditValue = 0;
var progressCnt = 0;
// WebServicee 초기 캔들 데이터 가져오기 : 종목, 개수
foreach (var marketCandleDataList in commonProperty.candleDataLists)
@@ -325,10 +358,9 @@ namespace BitgetAPI
progressBarControl_data.PerformStep();
progressBarControl_data.Update();
xtraTabPage_Searcher.PageEnabled = true;
xtraTabControl_Main.SelectedTabPage = xtraTabPage_Searcher;
//xtraTabPage_Searcher.PageEnabled = true;
//xtraTabControl_Main.SelectedTabPage = xtraTabPage_Searcher;
}));
break;
}
Invoke(new MethodInvoker(delegate ()
@@ -451,6 +483,12 @@ namespace BitgetAPI
th_MarketCandeData = null;
}
if(th_SignalInfo != null)
{
th_SignalInfo.Abort();
th_SignalInfo = null;
}
for(var cnt = 0; cnt < webSocketThreadList.Count; cnt++)
{
if(webSocketThreadList[cnt] != null && webSocketThreadList[cnt].ThreadState != ThreadState.Running)

View File

@@ -117,10 +117,25 @@
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<metadata name="marketInfoBindingSource.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>200, 17</value>
</metadata>
<metadata name="popupMenu_marketInfo.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>17, 17</value>
</metadata>
<assembly alias="DevExpress.Data.v23.2" name="DevExpress.Data.v23.2, Version=23.2.4.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a" />
<data name="simpleButton_MarketOrderRefresh.ImageOptions.SvgImage" type="DevExpress.Utils.Svg.SvgImage, DevExpress.Data.v23.2" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
AAEAAAD/////AQAAAAAAAAAMAgAAAFlEZXZFeHByZXNzLkRhdGEudjIzLjIsIFZlcnNpb249MjMuMi40
LjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49Yjg4ZDE3NTRkNzAwZTQ5YQUBAAAAHURl
dkV4cHJlc3MuVXRpbHMuU3ZnLlN2Z0ltYWdlAQAAAAREYXRhBwICAAAACQMAAAAPAwAAAOYCAAAC77u/
PD94bWwgdmVyc2lvbj0nMS4wJyBlbmNvZGluZz0nVVRGLTgnPz4NCjxzdmcgeD0iMHB4IiB5PSIwcHgi
IHZpZXdCb3g9IjAgMCAzMiAzMiIgdmVyc2lvbj0iMS4xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcv
MjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB4bWw6c3Bh
Y2U9InByZXNlcnZlIiBpZD0iTGF5ZXJfMSIgc3R5bGU9ImVuYWJsZS1iYWNrZ3JvdW5kOm5ldyAwIDAg
MzIgMzIiPg0KICA8c3R5bGUgdHlwZT0idGV4dC9jc3MiPgoJLkJsYWNre2ZpbGw6IzcyNzI3Mjt9Cgku
WWVsbG93e2ZpbGw6I0ZGQjExNTt9CgkuQmx1ZXtmaWxsOiMxMTc3RDc7fQoJLlJlZHtmaWxsOiNEMTFD
MUM7fQoJLldoaXRle2ZpbGw6I0ZGRkZGRjt9CgkuR3JlZW57ZmlsbDojMDM5QzIzO30KCS5zdDB7Zmls
bDojNzI3MjcyO30KCS5zdDF7b3BhY2l0eTowLjU7fQoJLnN0MntvcGFjaXR5OjAuNzU7fQo8L3N0eWxl
Pg0KICA8ZyBpZD0iUGF5bWVudFJlZnVuZCI+DQogICAgPHBhdGggZD0iTTE2LDRjLTMuMywwLTYuMywx
LjMtOC41LDMuNUw0LDR2MTBoMC4yaDQuMUgxNGwtMy42LTMuNkMxMS44LDguOSwxMy44LDgsMTYsOGM0
LjQsMCw4LDMuNiw4LDhzLTMuNiw4LTgsOCAgIGMtMy43LDAtNi44LTIuNi03LjctNkg0LjJjMSw1Ljcs
NS45LDEwLDExLjgsMTBjNi42LDAsMTItNS40LDEyLTEyUzIyLjYsNCwxNiw0eiIgY2xhc3M9IkJsdWUi
IC8+DQogIDwvZz4NCjwvc3ZnPgs=
</value>
</data>
</root>

View File

@@ -524,8 +524,8 @@ namespace BitgetAPI.WebService
}
finally
{
if (webSocket.State == WebSocketState.Open)
await webSocket.CloseAsync(WebSocketCloseStatus.NormalClosure, "WebSocket 연결 종료", CancellationToken.None);
//if (webSocket.State == WebSocketState.Open)
//await webSocket.CloseAsync(WebSocketCloseStatus.NormalClosure, "WebSocket 연결 종료", CancellationToken.None);
webSocket.Dispose();
// 웹소켓 재귀