diff --git a/BitgetApi/BitgetApi.csproj b/BitgetApi/BitgetApi.csproj index 5ed9445..4fe3fe7 100644 --- a/BitgetApi/BitgetApi.csproj +++ b/BitgetApi/BitgetApi.csproj @@ -92,6 +92,7 @@ MainForm.cs + ResXFileCodeGenerator Resources.Designer.cs diff --git a/BitgetApi/Data/SignalInfoData.cs b/BitgetApi/Data/SignalInfoData.cs index a96d8bf..97556ba 100644 --- a/BitgetApi/Data/SignalInfoData.cs +++ b/BitgetApi/Data/SignalInfoData.cs @@ -8,6 +8,8 @@ namespace BitgetApi.Data { public class SignalInfoData { + // 신호검색 시작 시간 + public DateTime SignalStart { get; set; } // 종목 이름 public string MarketName { get; set; } // 종목 설명 (시간별, 어떤거?) diff --git a/BitgetApi/IndicatorConditionSetup/IchimokuConditionSetup.cs b/BitgetApi/IndicatorConditionSetup/IchimokuConditionSetup.cs index b08ec73..f716dc0 100644 --- a/BitgetApi/IndicatorConditionSetup/IchimokuConditionSetup.cs +++ b/BitgetApi/IndicatorConditionSetup/IchimokuConditionSetup.cs @@ -17,82 +17,60 @@ namespace BitgetAPI.IndicatorConditionSetup /// /// 기준선 /// - public int BaselinePeriod { get; set; } + public int BaselinePeriod { get; set; } = 26; /// /// 전환선 /// - public int ConversionPeriod { get; set; } + public int ConversionPeriod { get; set; } = 9; /// /// 선행스팬2 /// - public int LaggingSpan2Period { get; set; } - + public int LaggingSpan2Period { get; set; } = 52; + /// /// Shift /// - public int Displacement { get; set; } + public int Displacement { get; set; } = 26; // 기준선 설정z public CommonProperty.Indicator_IchmokuOverLine IndicatorIchmokuOverLine { get; set; } - public void GetIchmokuData(List candleDatas) + // 캔들당 일목균형표 계산하기 + public void calIchimokuData(List candleDatas, CandleData candleData) { - /* - * 전환선 : (과거 n일간의 최고가 + 과거 n일간의 최저가) / 2 - - 기준선 : (과거 m일간의 최고가 + 과거 m일간의 최저가) / 2 - - 후행스팬 : 금일 종가를 ℓ일 전에 기입 - 선행스팬1 : (금일 전환선 + 금일 기준선) / 2한 값을 ℓ일 후에 기입 - - 선행스팬2 : (과거 k일간의 최고가 + 과거 k일간의 최저가) /2한 값을 ℓ일 후에 기입 - */ - - // 시간별로 정렬하기 - var candleDatas_정렬 = candleDatas.OrderBy(i => i.Argument); - // 현재 종가 인덱스 - var endIndex = candleDatas_정렬.Count() - 1; - var 한봉전까지Index = endIndex - 1; - - - var candleData_전봉 = candleDatas[endIndex - 1]; - - - // 현재 시간 캔들 - var nowCandle = candleDatas[endIndex]; + var endIndex = candleDatas.Count() - 1; // Ichimok 없으면 생성 - if (nowCandle.IchimokData == null) nowCandle.IchimokData = new IchimokData(); + if (candleData.IchimokData == null) candleData.IchimokData = new IchimokData(); // 현재 종가 - var endValue = nowCandle.Close; - + var endValue = candleData.Close; // 전봉까지 만듬 var datas = candleDatas.FindAll(i => - candleDatas.IndexOf(i) >= 한봉전까지Index - ConversionPeriod && - candleDatas.IndexOf(i) <= 한봉전까지Index); + candleDatas.IndexOf(i) > endIndex - ConversionPeriod && + candleDatas.IndexOf(i) <= endIndex); if (datas == null) return; // 전환선 - nowCandle.IchimokData.전환선 = (datas.Min(i => i.Low) + datas.Min(i => i.High)) / 2; + candleData.IchimokData.전환선 = (datas.Min(i => i.Low) + datas.Max(i => i.High)) / 2; datas = candleDatas.FindAll(i => - candleDatas.IndexOf(i) >= 한봉전까지Index - BaselinePeriod && - candleDatas.IndexOf(i) <= 한봉전까지Index); + candleDatas.IndexOf(i) > endIndex - BaselinePeriod && + candleDatas.IndexOf(i) <= endIndex); // 기준선 - nowCandle.IchimokData.기준선 = (datas.Min(i => i.Low) + datas.Min(i => i.High)) / 2; + candleData.IchimokData.기준선 = (datas.Min(i => i.Low) + datas.Max(i => i.High)) / 2; // 후행스팬 if (endIndex - Displacement >= 0) { - if(candleDatas[candleDatas.Count - Displacement].IchimokData == null) + if (candleDatas[candleDatas.Count - Displacement].IchimokData == null) { candleDatas[candleDatas.Count - Displacement].IchimokData = new IchimokData(); } @@ -103,53 +81,48 @@ namespace BitgetAPI.IndicatorConditionSetup // Displacement : 26 일전봉 데이터 가져오기 endIndex = endIndex - Displacement; - 한봉전까지Index = 한봉전까지Index - Displacement; datas = candleDatas.FindAll(i => - candleDatas.IndexOf(i) >= 한봉전까지Index - ConversionPeriod && - candleDatas.IndexOf(i) <= 한봉전까지Index); + candleDatas.IndexOf(i) > endIndex - ConversionPeriod && + candleDatas.IndexOf(i) <= endIndex); if (datas == null) return; // 전환선 : 26일 전봉 - var displacement_전환선 = (datas.Min(i => i.Low) + datas.Min(i => i.High)) / 2; + var displacement_전환선 = (datas.Min(i => i.Low) + datas.Max(i => i.High)) / 2; datas = candleDatas.FindAll(i => - candleDatas.IndexOf(i) >= 한봉전까지Index - BaselinePeriod && - candleDatas.IndexOf(i) <= 한봉전까지Index); + candleDatas.IndexOf(i) > endIndex - BaselinePeriod && + candleDatas.IndexOf(i) <= endIndex); if (datas == null) return; // 기준선 : 26일 전봉 - var displacement_기준선 = (datas.Min(i => i.Low) + datas.Min(i => i.High)) / 2; + var displacement_기준선 = (datas.Min(i => i.Low) + datas.Max(i => i.High)) / 2; // 선행스팬 1 - nowCandle.IchimokData.선행스팬1 = + candleData.IchimokData.선행스팬1 = (displacement_전환선 + displacement_기준선) / 2; - - datas = candleDatas.FindAll(i => - candleDatas.IndexOf(i) >= 한봉전까지Index - LaggingSpan2Period && - candleDatas.IndexOf(i) <= 한봉전까지Index); + candleDatas.IndexOf(i) > endIndex - LaggingSpan2Period && + candleDatas.IndexOf(i) <= endIndex); // 선행스팬 2 - nowCandle.IchimokData.선행스팬2 = (datas.Min(i => i.Low) + datas.Min(i => i.High)) / 2; + candleData.IchimokData.선행스팬2 = (datas.Min(i => i.Low) + datas.Max(i => i.High)) / 2; // 일목균형표 (전봉데이터) - var 일목균형표_전봉 = candleData_전봉.IchimokData; - var 일목균형표_상한선 = Math.Max(일목균형표_전봉.선행스팬1, 일목균형표_전봉.선행스팬2); - var 일목균형표_하한선 = Math.Min(일목균형표_전봉.선행스팬1, 일목균형표_전봉.선행스팬2); - - // 전봉 - if (일목균형표_상한선 < candleData_전봉.Close && 일목균형표_상한선 < nowCandle.Close) nowCandle.IchimokData.IsLongUp = true; - else nowCandle.IchimokData.IsLongUp = false; - - if (일목균형표_하한선 > candleData_전봉.Close && 일목균형표_하한선 > nowCandle.Close) nowCandle.IchimokData.IsShortDown = true; - else nowCandle.IchimokData.IsShortDown = false; - - //if(일목균형표_상한선 > candleData_전봉.Close && ) + candleData.IchimokData.상한선 = Math.Max(candleData.IchimokData.선행스팬1, candleData.IchimokData.선행스팬2); + candleData.IchimokData.하한선 = Math.Min(candleData.IchimokData.선행스팬1, candleData.IchimokData.선행스팬2); + if (candleData.IchimokData.상한선 < candleData.Close) candleData.IchimokData.IsLongUp = true; + else candleData.IchimokData.IsLongUp = false; + if (candleData.IchimokData.하한선 > candleData.Close) candleData.IchimokData.IsShortDown = true; + else candleData.IchimokData.IsShortDown = false; + if (candleData.IchimokData.상한선 > candleData.Close) candleData.IchimokData.IsLongDown = true; + else candleData.IchimokData.IsLongDown = false; + if (candleData.IchimokData.하한선 < candleData.Close) candleData.IchimokData.IsShortUp = true; + else candleData.IchimokData.IsShortUp = false; } diff --git a/BitgetApi/IndicatorData/IchimokData.cs b/BitgetApi/IndicatorData/IchimokData.cs index cf9a25c..743f2f6 100644 --- a/BitgetApi/IndicatorData/IchimokData.cs +++ b/BitgetApi/IndicatorData/IchimokData.cs @@ -15,13 +15,15 @@ namespace BitgetAPI.Data.IndicatorData public double 선행스팬1 { get; set; } = 0; public double 선행스팬2 { get; set; } = 0; + public double 상한선 { get; set; } + public double 하한선 { get; set; } public bool IsLongUp { get; set; } = false; public bool IsLongDown { get; set; } = false; public bool IsShortUp { get; set; } = false; public bool IsShortDown { get; set; } = false; - public bool IsUsedData { get; set; } = false; + public bool IsUsedData { get; set; } = true; } } diff --git a/BitgetApi/IndicatorData/IndicatorProcess.cs b/BitgetApi/IndicatorData/IndicatorProcess.cs index 5f86d02..a51f1fe 100644 --- a/BitgetApi/IndicatorData/IndicatorProcess.cs +++ b/BitgetApi/IndicatorData/IndicatorProcess.cs @@ -1,5 +1,8 @@ -using System; +using BitgetAPI.IndicatorConditionSetup; +using DevExpress.Utils.IoC; +using System; using System.Collections.Generic; +using System.ComponentModel; using System.Linq; using System.Text; using System.Threading.Tasks; @@ -8,5 +11,15 @@ namespace BitgetAPI.Data { public class IndicatorProcess { + CommonProperty commonProperty = CommonProperty.Instance; + + // 전봉이 구름떼 돌파후 시가가 구름떼 위에서 시작하는 것 + // 전봉이 구름떼 하락후 시가가 구름떼 밑에서 시작하는 것 + + public void calIchimokuProcess() + { + + } + } } diff --git a/BitgetApi/MainForm.Designer.cs b/BitgetApi/MainForm.Designer.cs index 1e358e3..0f7c710 100644 --- a/BitgetApi/MainForm.Designer.cs +++ b/BitgetApi/MainForm.Designer.cs @@ -60,7 +60,7 @@ this.checkEdit_ichmokuUp = new DevExpress.XtraEditors.CheckEdit(); this.labelControl6 = new DevExpress.XtraEditors.LabelControl(); this.labelControl5 = new DevExpress.XtraEditors.LabelControl(); - this.checkedComboBoxEdit1 = new DevExpress.XtraEditors.CheckedComboBoxEdit(); + this.checkedComboBoxEdit_TimeInterval = new DevExpress.XtraEditors.CheckedComboBoxEdit(); this.checkedComboBoxEdit_MarketInfoList = new DevExpress.XtraEditors.CheckedComboBoxEdit(); this.marketInfoBindingSource = new System.Windows.Forms.BindingSource(this.components); this.treeListColumn1 = new DevExpress.XtraTreeList.Columns.TreeListColumn(); @@ -101,7 +101,7 @@ this.groupControl_SearcherCondition.SuspendLayout(); ((System.ComponentModel.ISupportInitialize)(this.checkEdit_IchmokuDown.Properties)).BeginInit(); ((System.ComponentModel.ISupportInitialize)(this.checkEdit_ichmokuUp.Properties)).BeginInit(); - ((System.ComponentModel.ISupportInitialize)(this.checkedComboBoxEdit1.Properties)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.checkedComboBoxEdit_TimeInterval.Properties)).BeginInit(); ((System.ComponentModel.ISupportInitialize)(this.checkedComboBoxEdit_MarketInfoList.Properties)).BeginInit(); ((System.ComponentModel.ISupportInitialize)(this.marketInfoBindingSource)).BeginInit(); ((System.ComponentModel.ISupportInitialize)(this.popupMenu_marketInfo)).BeginInit(); @@ -391,7 +391,7 @@ this.groupControl_SearcherCondition.Controls.Add(this.checkEdit_ichmokuUp); this.groupControl_SearcherCondition.Controls.Add(this.labelControl6); this.groupControl_SearcherCondition.Controls.Add(this.labelControl5); - this.groupControl_SearcherCondition.Controls.Add(this.checkedComboBoxEdit1); + this.groupControl_SearcherCondition.Controls.Add(this.checkedComboBoxEdit_TimeInterval); this.groupControl_SearcherCondition.Controls.Add(this.checkedComboBoxEdit_MarketInfoList); this.groupControl_SearcherCondition.Dock = System.Windows.Forms.DockStyle.Top; this.groupControl_SearcherCondition.Location = new System.Drawing.Point(0, 0); @@ -434,16 +434,16 @@ this.labelControl5.TabIndex = 1; this.labelControl5.Text = "종목 선택 : "; // - // checkedComboBoxEdit1 + // checkedComboBoxEdit_TimeInterval // - this.checkedComboBoxEdit1.Location = new System.Drawing.Point(65, 54); - this.checkedComboBoxEdit1.Name = "checkedComboBoxEdit1"; - this.checkedComboBoxEdit1.Properties.Buttons.AddRange(new DevExpress.XtraEditors.Controls.EditorButton[] { + this.checkedComboBoxEdit_TimeInterval.Location = new System.Drawing.Point(65, 54); + this.checkedComboBoxEdit_TimeInterval.Name = "checkedComboBoxEdit_TimeInterval"; + this.checkedComboBoxEdit_TimeInterval.Properties.Buttons.AddRange(new DevExpress.XtraEditors.Controls.EditorButton[] { new DevExpress.XtraEditors.Controls.EditorButton(DevExpress.XtraEditors.Controls.ButtonPredefines.Combo)}); - this.checkedComboBoxEdit1.Properties.IncrementalSearch = true; - this.checkedComboBoxEdit1.Properties.TextEditStyle = DevExpress.XtraEditors.Controls.TextEditStyles.Standard; - this.checkedComboBoxEdit1.Size = new System.Drawing.Size(547, 20); - this.checkedComboBoxEdit1.TabIndex = 0; + this.checkedComboBoxEdit_TimeInterval.Properties.IncrementalSearch = true; + this.checkedComboBoxEdit_TimeInterval.Properties.TextEditStyle = DevExpress.XtraEditors.Controls.TextEditStyles.Standard; + this.checkedComboBoxEdit_TimeInterval.Size = new System.Drawing.Size(547, 20); + this.checkedComboBoxEdit_TimeInterval.TabIndex = 0; // // checkedComboBoxEdit_MarketInfoList // @@ -670,7 +670,7 @@ this.groupControl_SearcherCondition.PerformLayout(); ((System.ComponentModel.ISupportInitialize)(this.checkEdit_IchmokuDown.Properties)).EndInit(); ((System.ComponentModel.ISupportInitialize)(this.checkEdit_ichmokuUp.Properties)).EndInit(); - ((System.ComponentModel.ISupportInitialize)(this.checkedComboBoxEdit1.Properties)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.checkedComboBoxEdit_TimeInterval.Properties)).EndInit(); ((System.ComponentModel.ISupportInitialize)(this.checkedComboBoxEdit_MarketInfoList.Properties)).EndInit(); ((System.ComponentModel.ISupportInitialize)(this.marketInfoBindingSource)).EndInit(); ((System.ComponentModel.ISupportInitialize)(this.popupMenu_marketInfo)).EndInit(); @@ -737,7 +737,7 @@ private DevExpress.XtraEditors.CheckEdit checkEdit_ichmokuUp; private DevExpress.XtraEditors.LabelControl labelControl6; private DevExpress.XtraEditors.LabelControl labelControl5; - private DevExpress.XtraEditors.CheckedComboBoxEdit checkedComboBoxEdit1; + private DevExpress.XtraEditors.CheckedComboBoxEdit checkedComboBoxEdit_TimeInterval; private DevExpress.XtraEditors.SplitContainerControl splitContainerControl_SearchSignal; private DevExpress.XtraEditors.SplitContainerControl splitContainerControl_UpdateSignal; private DevExpress.XtraEditors.SplitContainerControl splitContainerControl_FavoritePurchase; diff --git a/BitgetApi/MainForm.cs b/BitgetApi/MainForm.cs index ad9591f..2618fdb 100644 --- a/BitgetApi/MainForm.cs +++ b/BitgetApi/MainForm.cs @@ -1,8 +1,11 @@ using BitgetApi.Data; using BitgetAPI.Data; +using BitgetAPI.IndicatorConditionSetup; using BitgetAPI.WebService; +using DevExpress.Utils.Extensions; using DevExpress.Utils.MVVM; using DevExpress.XtraEditors; +using DevExpress.XtraGrid.Views.BandedGrid.Handler; using Newtonsoft.Json; using System; using System.Collections.Generic; @@ -37,6 +40,16 @@ namespace BitgetAPI // 신호검색 스레드 함수 Thread th_SignalInfo = null; + // 신호검색 리스트 작성 + // 신호 Long 상승 (구매) + List signals_LU = null; + // 신호 Short 하락 (구매) + List signals_SD = null; + // 검색현황 Long 하락 (판매) + List signals_LD = null; + // 검색현황 Short 상승 (판매) + List signals_SU = null; + // 종목별 캔들 데이터 : 캔들 개수 const int candleCount = 200; #endregion @@ -66,6 +79,7 @@ namespace BitgetAPI treeList_MarketInfo.EndSort(); // 현황판 웹소켓 + commonProperty.webSocketCandles = new List(); th_MarketStatus = new Thread(() => ThreadEventAsync(BitgetWebSocketType.현황정보_전체종목, "ticker")); th_MarketStatus.Start(); @@ -77,7 +91,16 @@ namespace BitgetAPI th_SignalInfo = new Thread(new ThreadStart(Signalnfo)); th_SignalInfo.Start(); - + // 신호 Long 상승 (구매) + signals_LU = new List(); + // 신호 Short 하락 (구매) + signals_SD = new List(); + // 검색현황 Long 하락 (판매) + signals_LD = new List(); + // 검색현황 Short 상승 (판매) + signals_SU = new List(); + + treeList_LongUp.DataSource = signals_LU; // API Key 가져오기 및 등록 @@ -122,23 +145,105 @@ namespace BitgetAPI // 신호검색 Thread 함수 private void Signalnfo() { - while(true) + IchimokuConditionSetup ichimokuConditionSetup = new IchimokuConditionSetup(); + + /* + * 전환선 : (과거 n일간의 최고가 + 과거 n일간의 최저가) / 2 + + 기준선 : (과거 m일간의 최고가 + 과거 m일간의 최저가) / 2 + + 후행스팬 : 금일 종가를 ℓ일 전에 기입 + 선행스팬1 : (금일 전환선 + 금일 기준선) / 2한 값을 ℓ일 후에 기입 + + 선행스팬2 : (과거 k일간의 최고가 + 과거 k일간의 최저가) /2한 값을 ℓ일 후에 기입 + */ + + while (true) { Thread.Sleep(300); + var nowTime = DateTime.Now; + + // 특정 시간 이후 삭제 + foreach (var item in signals_LU) + { + // 시간 지나면 삭제 + if (item.SignalStart + timeSpanEdit_SesstionTime.TimeSpan > nowTime) + { + signals_LU.Remove(item); + } + } + 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 intervalList = checkedComboBoxEdit_TimeInterval.Properties.Items.GetCheckedValues(); + + // 체크된 마켓 정보 + foreach (string market in checkedComboBoxEdit_MarketInfoList.Properties.Items.GetCheckedValues()) + { + var findedMarket = commonProperty.candleDataLists.Find(i => i.ConGoodsData.MarketName == market); + + foreach (CommonProperty.MCandleTimeType interval in Enum.GetValues(typeof(CommonProperty.MCandleTimeType))) + { + // Description + var description = Utils.Convertor.GetEnumDescription((Enum)interval); + if (!intervalList.Contains(description)) continue; + + // 시간별로 정렬하기 (임시 리스트) + var candleDatas = findedMarket.candleDataList[interval]; + var candleDatas_정렬 = candleDatas.OrderBy(i => i.Argument).ToList(); + + var candleData = candleDatas.Find(i => i.Argument == candleDatas_정렬.Last().Argument); + + ichimokuConditionSetup.calIchimokuData(candleDatas_정렬, candleData); + + 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.상한선) + { + 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_LU.Find(i => i.MarketName.Equals(market)); + // 존재하면 업데이트 + if (signalData != null) + { + signalData.Price = price; + signalData.rate = rate; + signalData.indicatorPrice = indicatorPrice; + signalData.indicoatorRate = indicatorRate; + } + // 없으면 생성 + else + { + SignalInfoData signalInfoData = new SignalInfoData(); + signalInfoData.SignalStart = nowTime; + signalInfoData.MarketName = market; + signalInfoData.Description = "상승 돌파"; + signalData.rate = rate; + signalInfoData.Price = price; + signalInfoData.indicatorPrice = indicatorPrice; + signalInfoData.indicoatorRate = indicatorRate; + + signals_LU.Add(signalInfoData); + } + + } + } + + } + Invoke(new MethodInvoker(delegate () { - - // 신호검색 리스트 작성 - // 신호 Long 상승 (구매) - List signals_LU = new List(); - // 신호 Short 하락 (구매) - List signals_SD = new List(); - // 검색현황 Long 하락 (판매) - List signals_LD = new List(); - // 검색현황 Short 상승 (판매) - List signals_SU = new List(); - var scrollPoint_LU = treeList_LongUp.TopVisibleNodeIndex; // 신호검색 트리리스트 설정 @@ -150,6 +255,7 @@ namespace BitgetAPI } } + // 종목별 캔들데이터 가져오기 (초기 설정) => Thread private void getMarketCandleData_WebService(ExchangeWebReqType exchangeWebReqType) { @@ -205,7 +311,7 @@ namespace BitgetAPI } break; } - + // 초당 20회 제한 !!!! // Thread.Sleep(50); var candleList = BitgetAPI.WebService.WebConnection.SendWebServer(exchangeWebReqType, url, marketCandleDataList, (CommonProperty.MCandleTimeType) interval); @@ -222,6 +328,7 @@ namespace BitgetAPI xtraTabPage_Searcher.PageEnabled = true; xtraTabControl_Main.SelectedTabPage = xtraTabPage_Searcher; })); + break; } Invoke(new MethodInvoker(delegate () @@ -297,8 +404,13 @@ namespace BitgetAPI // 조건 설정 : 체크콤보박스 마켓 정보 추가하기 foreach (var item in commonProperty.candleDataLists) checkedComboBoxEdit_MarketInfoList.Properties.Items.Add(item.ConGoodsData.MarketName); - - commonProperty.webSocketCandles = new List(); + // 조건 설정 : 체크콤보박스 시간별 정보 추가하기 + // 캔들 데이터 가져오기 + foreach (var interval in Enum.GetValues(typeof(CommonProperty.MCandleTimeType))) + { + var description = Utils.Convertor.GetEnumDescription((Enum)interval); + checkedComboBoxEdit_TimeInterval.Properties.Items.Add(description); + } #region 캔들 웹소켓 : 종목 50, 캔들 1 개만 해도 뒤지려고 함 !! (일딴 패스) /*