Files
BitGet_API/BitgetApi/MainForm.cs

573 lines
24 KiB
C#
Raw Normal View History

2024-06-02 17:21:39 +09:00
using BitgetApi.Data;
using BitgetAPI.Data;
2024-06-02 22:24:23 +09:00
using BitgetAPI.IndicatorConditionSetup;
2024-05-23 16:32:30 +09:00
using BitgetAPI.WebService;
2024-06-02 22:24:23 +09:00
using DevExpress.Utils.Extensions;
2024-05-29 17:37:10 +09:00
using DevExpress.Utils.MVVM;
2024-05-22 16:56:51 +09:00
using DevExpress.XtraEditors;
2024-06-02 22:24:23 +09:00
using DevExpress.XtraGrid.Views.BandedGrid.Handler;
2024-05-22 16:56:51 +09:00
using Newtonsoft.Json;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Net.WebSockets;
using System.Reflection;
2024-07-10 11:46:59 +09:00
using System.Security;
2024-05-22 16:56:51 +09:00
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using System.Windows.Forms;
2024-05-23 16:32:30 +09:00
using static BitgetAPI.CommonProperty;
using static DevExpress.Utils.Html.ViewInfo.DxHtmlOrderedListInfoCore;
2024-06-10 18:22:06 +09:00
using static System.Windows.Forms.VisualStyles.VisualStyleElement;
2024-06-03 19:01:51 +09:00
using static System.Windows.Forms.VisualStyles.VisualStyleElement.TextBox;
2024-05-22 16:56:51 +09:00
2024-05-23 16:32:30 +09:00
namespace BitgetAPI
2024-05-22 16:56:51 +09:00
{
public partial class MainForm : Form
{
CommonProperty commonProperty = CommonProperty.Instance;
#region 폼 내 사용되는 스레드
2024-06-10 18:22:06 +09:00
// 트리 현황판 업데이트 스레드 (단순 폼 업데이트)
Thread th_treeListMarketInfoListUpdateTimer = null;
// 신호검색 스레드
2024-06-02 17:21:39 +09:00
Thread th_SignalInfo = null;
2024-06-10 18:22:06 +09:00
// 현황판 웹서비스 Ticker 스레드 (한번에 전체 종목 종가 받음)
Thread th_MarketInfoList_WebService = null;
// 웹소켓 스레드
Thread th_ticker_Websocket = null;
2024-07-11 11:27:14 +09:00
Thread dataCalculateThread = null;
2024-07-10 11:46:59 +09:00
WebConnection webConnection = new WebConnection();
// 스레드 종료 플래그
bool Is_th_th_MarketInfoList_WebService = false;
bool Is_th_treeListUpdate = false;
2024-07-15 12:49:00 +09:00
bool Is_th_dataCalculateThread = false;
2024-06-02 22:24:23 +09:00
// 신호검색 리스트 작성
// 신호 Long 상승 (구매)
List<SignalInfoData> signals_LU = null;
// 신호 Short 하락 (구매)
List<SignalInfoData> signals_SD = null;
// 검색현황 Long 하락 (판매)
List<SignalInfoData> signals_LD = null;
// 검색현황 Short 상승 (판매)
List<SignalInfoData> signals_SU = null;
IndicatorProcess indicatorProcess = null;
// 종목별 캔들 데이터 : 캔들 개수
const int candleCount = 200;
#endregion
2024-05-22 16:56:51 +09:00
public MainForm()
{
InitializeComponent();
init();
}
// 폼 초기화 작업
public void init()
{
2024-05-23 16:32:30 +09:00
commonProperty.mainform = this;
2024-05-22 16:56:51 +09:00
// 거래소 항목 추가 및 설정하기
comboBoxEdit_ExchangePlace.Properties.Items.AddRange(Enum.GetNames(typeof(CommonProperty.ExchangePlace)));
comboBoxEdit_ExchangePlace.SelectedIndex = (int)CommonProperty.ExchangePlace.Bitget;
commonProperty.selectedChangePlace = CommonProperty.ExchangePlace.Bitget;
// 현황판 정렬
treeList_MarketInfo.BeginSort();
treeList_MarketInfo.Columns["quoteVolume"].SortOrder = SortOrder.Descending;
treeList_MarketInfo.EndSort();
2024-06-02 22:24:23 +09:00
commonProperty.webSocketCandles = new List<WebSocketTickerInfo>();
2024-06-02 22:24:23 +09:00
// 신호 Long 상승 (구매)
signals_LU = new List<SignalInfoData>();
// 신호 Short 하락 (구매)
signals_SD = new List<SignalInfoData>();
// 검색현황 Long 하락 (판매)
signals_LD = new List<SignalInfoData>();
// 검색현황 Short 상승 (판매)
signals_SU = new List<SignalInfoData>();
2024-06-03 19:01:51 +09:00
// 신호검색 트리리스트 설정
2024-06-02 22:24:23 +09:00
treeList_LongUp.DataSource = signals_LU;
2024-06-03 19:01:51 +09:00
treeList_ShortDown.DataSource = signals_SD;
2024-06-02 17:21:39 +09:00
// API Key 가져오기 및 등록
2024-05-22 16:56:51 +09:00
}
2024-06-10 18:22:06 +09:00
// 웹서비스를 통해 현황판 및 마켓 Ticker 업데이트
private void getMarketInfoList_WebService(ExchangeWebReqType exchangeWebReqType)
{
Is_th_th_MarketInfoList_WebService = true;
while (true)
2024-06-10 18:22:06 +09:00
{
2024-06-14 19:18:54 +09:00
Thread.Sleep(300);
if (!Is_th_th_MarketInfoList_WebService) break;
2024-06-10 18:22:06 +09:00
// 마켓 모든 종목 캔들 정보 Web Service로 가져오기
commonProperty.marketInfoList = (List<MarketInfo>)BitgetAPI.WebService.WebConnection.SendWebServer(exchangeWebReqType);
try
2024-06-10 18:22:06 +09:00
{
// 현황판에 최신 정보 업데이트 하기
Invoke(new MethodInvoker(delegate ()
{
var scrollPoint = treeList_MarketInfo.TopVisibleNodeIndex;
treeList_MarketInfo.DataSource = commonProperty.marketInfoList;
treeList_MarketInfo.RefreshDataSource();
treeList_MarketInfo.TopVisibleNodeIndex = scrollPoint;
2024-05-29 17:37:10 +09:00
}));
}catch (Exception ex) { }
}
2024-05-23 16:32:30 +09:00
}
2024-05-22 16:56:51 +09:00
2024-05-29 17:37:10 +09:00
// 마켓 현황판 업데이트 (1) => Thread
// 지표 생성 및 신호 검색 (2)
private void TreeListMarketInfoListUpdate( )
2024-05-23 16:32:30 +09:00
{
2024-06-14 19:18:54 +09:00
Is_th_treeListUpdate = true;
2024-05-29 17:37:10 +09:00
// 마켓 현황판 업데이트
2024-06-14 19:18:54 +09:00
while (true)
2024-05-22 16:56:51 +09:00
{
if (!Is_th_treeListUpdate) break;
Thread.Sleep(300);
2024-05-22 16:56:51 +09:00
try
2024-05-22 16:56:51 +09:00
{
Invoke(new MethodInvoker(delegate ()
{
var scrollPoint = treeList_MarketInfo.TopVisibleNodeIndex;
var scrollPoint_LU = treeList_LongUp.TopVisibleNodeIndex;
var scrollPoint_SD = treeList_ShortDown.TopVisibleNodeIndex;
2024-06-03 19:01:51 +09:00
treeList_MarketInfo.RefreshDataSource();
treeList_LongUp.RefreshDataSource();
treeList_ShortDown.RefreshDataSource();
2024-05-29 17:37:10 +09:00
treeList_MarketInfo.TopVisibleNodeIndex = scrollPoint;
treeList_LongUp.TopVisibleNodeIndex = scrollPoint_LU;
treeList_ShortDown.TopVisibleNodeIndex = scrollPoint_SD;
}));
}catch(Exception ex) { }
2024-05-22 16:56:51 +09:00
}
2024-06-02 17:21:39 +09:00
}
2024-07-10 11:46:59 +09:00
/// <summary>
/// Data 처리 관련 Thread
/// </summary>
/// <param name="type"></param>
private void DataCalculateThread(BitgetWebSocketType type)
{
2024-07-11 11:27:14 +09:00
var flag = true;
2024-07-15 12:49:00 +09:00
Is_th_dataCalculateThread = true;
2024-07-12 12:57:46 +09:00
//속도 개선을 위하여 미리 선언
2024-07-10 11:46:59 +09:00
while (webConnection.Is_th_webSocketThread)
{
2024-07-12 12:57:46 +09:00
webConnection.CalculateDataList(type, indicatorProcess.intervalList);
2024-07-11 11:27:14 +09:00
if (flag)
{
th_SignalInfo = new Thread(new ThreadStart(Signalnfo));
th_SignalInfo.Start();
2024-07-12 12:57:46 +09:00
flag = false;
2024-07-15 12:49:00 +09:00
}
if(!Is_th_dataCalculateThread) break;
2024-07-10 11:46:59 +09:00
}
}
2024-06-02 17:21:39 +09:00
// 신호검색 Thread 함수
private void Signalnfo()
{
2024-06-02 22:24:23 +09:00
/*
* 전환선 : (과거 n일간의 최고가 + 과거 n일간의 최저가) / 2
기준선 : (과거 m일간의 최고가 + 과거 m일간의 최저가) / 2
후행스팬 : 금일 종가를 ℓ일 전에 기입
선행스팬1 : (금일 전환선 + 금일 기준선) / 2한 값을 ℓ일 후에 기입
선행스팬2 : (과거 k일간의 최고가 + 과거 k일간의 최저가) /2한 값을 ℓ일 후에 기입
*/
indicatorProcess.Is_th_SignalInfo = true;
indicatorProcess.signals_LU = signals_LU;
indicatorProcess.signals_SD = signals_SD;
indicatorProcess.signals_LD = signals_LD;
indicatorProcess.signals_SU = signals_SU;
indicatorProcess.sesstionTime = timeSpanEdit_SesstionTime.TimeSpan;
if(checkEdit_ichmoku_Long.Checked) indicatorProcess.checked구름떼상향돌파 = true;
if(checkEdit_Ichmoku_Short.Checked) indicatorProcess.checked구름떼하향돌파= true;
if(checkEdit_yhk_Long.Checked) indicatorProcess.영호조건식_상향돌파 = true;
if(checkEdit_yhk_Short.Checked) indicatorProcess.영호조건식_하향돌파= true;
indicatorProcess.calProcess();
2024-05-22 16:56:51 +09:00
}
2024-06-02 22:24:23 +09:00
2024-05-29 17:37:10 +09:00
// 종목별 캔들데이터 가져오기 (초기 설정) => Thread
2024-06-10 18:22:06 +09:00
private void getMarketCandleData_WebService(ExchangeWebReqType exchangeWebReqType, List<object> marketList)
{
2024-05-29 17:37:10 +09:00
// 프로그레스 바
2024-06-10 18:22:06 +09:00
Invoke(new MethodInvoker(delegate ()
{
progressBarControl_data.Properties.Minimum = 0;
progressBarControl_data.Properties.Maximum = marketList.Count;
progressBarControl_data.Properties.Step = 1;
progressBarControl_data.EditValue = 0;
}));
2024-05-29 17:37:10 +09:00
var progressCnt = 0;
2024-06-10 18:22:06 +09:00
// WebServicee 초기 캔들 데이터 가져오기 : 종목, 개수
2024-06-10 18:22:06 +09:00
foreach (var marketName in marketList)
{
2024-06-10 18:22:06 +09:00
var marketCandleDataList = commonProperty.candleDataLists.Find(i => i.ConGoodsData.MarketName.Equals(marketName));
if (marketCandleDataList == null) continue;
// 캔들 데이터 가져오기
foreach (var interval in Enum.GetValues(typeof(CommonProperty.MCandleTimeType)))
{
2024-07-12 12:57:46 +09:00
var strInterval = Utils.Convertor.GetEnumDescription((Enum)interval);
if (!indicatorProcess.intervalList.Contains(strInterval)) continue;
// Description
var description = Utils.Convertor.GetEnumDescription((Enum)interval);
// 1M, 3M Names....
var intervalName = Enum.GetName(typeof(CommonProperty.MCandleTimeType), interval);
var url = "";
switch (commonProperty.selectedChangePlace)
{
case ExchangePlace.Upbit:
break;
case ExchangePlace.Bitget:
switch (commonProperty.selectedBitgetProductType)
{
case BitgetProductType.COIN:
exchangeWebReqType = ExchangeWebReqType.BitgetCandleStick_Coin;
var defaultDateTime = DateTime.Now;
var startDateTime = DateTime.FromFileTimeUtc(defaultDateTime.Ticks);
// count + 50 개 캔들 추가 가져오기
var endDateTime = DateTime.FromFileTimeUtc(defaultDateTime.AddSeconds((int)interval * -1).Ticks);
// 종목, 인터벌시간, 시작시간(UTC), 종료시간(UTC), 제한 개수 (default:100, Max:1000)
url = string.Format(BitgetURL_MarketCandle_Coin,
marketName, description, startDateTime.ToString(), endDateTime.ToString(), candleCount.ToString());
break;
case BitgetProductType.FUTURE:
exchangeWebReqType = ExchangeWebReqType.BitgetCandleStick_Future;
url = string.Format(CommonProperty.BitgetURL_MarketCandle_Future,
marketName, description, candleCount.ToString(), "USDT-FUTURES");
break;
}
break;
}
2024-06-08 14:45:14 +09:00
// 초당 20회 제한 !!!!
// Thread.Sleep(50);
var candleList = BitgetAPI.WebService.WebConnection.SendWebServer(exchangeWebReqType, url, marketCandleDataList, (CommonProperty.MCandleTimeType) interval);
}
2024-05-29 17:37:10 +09:00
// 프로그레스 바
progressCnt++;
Invoke(new MethodInvoker(delegate ()
{
progressBarControl_data.EditValue = progressCnt;
progressBarControl_data.PerformStep();
progressBarControl_data.Update();
2024-07-11 11:27:14 +09:00
}));
}
2024-07-15 12:49:00 +09:00
dataCalculateThread = new Thread(() => DataCalculateThread(BitgetWebSocketType.캔들정보));
2024-07-11 11:27:14 +09:00
dataCalculateThread.Start();
}
2024-05-22 16:56:51 +09:00
// 거래소 콤보박스 클릭 시 이벤트 처리
private void comboBox_ExchangePlace_SelectedIndexChanged(object sender, EventArgs e)
{
var combobox = (ComboBoxEdit)sender;
// 거래소에 따라서 코인 타입 생성하기
switch (combobox.SelectedIndex)
{
case (int)CommonProperty.ExchangePlace.Bitget:
// 코인 타입 설정하기
comboBoxEdit_ConinType.Properties.Items.AddRange(Enum.GetNames(typeof(CommonProperty.BitgetProductType)));
comboBoxEdit_ConinType.SelectedIndex = (int)CommonProperty.BitgetProductType.FUTURE;
commonProperty.selectedBitgetProductType = CommonProperty.BitgetProductType.FUTURE;
break;
}
}
// 코인 타입 콤보박스 클릭 시 이벤트 처리
private void comboBox_CoinType_SelectedIndexChanged(object sender, EventArgs e)
{
var combobox = (ComboBoxEdit)sender;
// 선택된 타입에 따라서 종목 정보 가져오기
ExchangeWebReqType exchangeWebReqType = ExchangeWebReqType.BitgetMarket_Future;
switch (combobox.SelectedIndex)
{
case (int)CommonProperty.BitgetProductType.COIN:
commonProperty.selectedBitgetProductType = CommonProperty.BitgetProductType.COIN;
exchangeWebReqType = ExchangeWebReqType.BitgetMarket_Spot;
break;
case (int)CommonProperty.BitgetProductType.FUTURE:
commonProperty.selectedBitgetProductType = CommonProperty.BitgetProductType.FUTURE;
exchangeWebReqType = ExchangeWebReqType.BitgetMarket_Future;
break;
case (int)CommonProperty.BitgetProductType.MARGIN_보류:
commonProperty.selectedBitgetProductType = CommonProperty.BitgetProductType.MARGIN_보류;
break;
}
// 마켓 정보 가져오기
2024-06-10 18:22:06 +09:00
var marketInfos = commonProperty.marketInfoList = (List<MarketInfo>)BitgetAPI.WebService.WebConnection.SendWebServer(exchangeWebReqType);
commonProperty.marketInfoList = marketInfos;
2024-05-22 16:56:51 +09:00
labelControl_MarketCount.Text = marketInfos.Count().ToString();
treeList_MarketInfo.DataSource = marketInfos;
treeList_MarketInfo.RefreshDataSource();
List<MarketCandleDataList> candleDataLists = new List<MarketCandleDataList>();
commonProperty.candleDataLists = candleDataLists;
2024-05-23 16:32:30 +09:00
// 캔들 리스트 생성하기
foreach (var item in marketInfos)
{
MarketCandleDataList candleDataList = new MarketCandleDataList();
candleDataList.ConGoodsData = item;
foreach (var interval in Enum.GetValues(typeof(CommonProperty.MCandleTimeType)))
{
candleDataList.candleDataList.Add((MCandleTimeType)interval, new List<CandleData>());
}
candleDataLists.Add(candleDataList);
}
// 조건 설정 : 체크콤보박스 마켓 정보 추가하기
2024-06-10 18:22:06 +09:00
foreach (var item in marketInfos.OrderByDescending(i => i.quoteVolume))
checkedComboBoxEdit_MarketInfoList.Properties.Items.Add(item.MarketName);
2024-06-02 22:24:23 +09:00
// 조건 설정 : 체크콤보박스 시간별 정보 추가하기
// 캔들 데이터 가져오기
foreach (var interval in Enum.GetValues(typeof(CommonProperty.MCandleTimeType)))
{
var description = Utils.Convertor.GetEnumDescription((Enum)interval);
checkedComboBoxEdit_TimeInterval.Properties.Items.Add(description);
}
2024-06-10 18:22:06 +09:00
// 마켓정보(WebService Ticker) => 0.5초당 1번으로 업데이트 하기 (현황판)
th_MarketInfoList_WebService = new Thread(() => getMarketInfoList_WebService(exchangeWebReqType));
th_MarketInfoList_WebService.Start();
2024-06-10 18:22:06 +09:00
#region 캔들 웹소켓 : 종목 50, 캔들 1 개만 해도 뒤지려고 함 !! (일딴 패스)
/*
// 시간별 분봉 웹소켓
foreach (var interval in Enum.GetValues(typeof(CommonProperty.MCandleTimeType)))
{
var description = Utils.Convertor.GetEnumDescription((Enum)interval);
var th_CandleStatus = new Thread(() => ThreadEventAsync(BitgetWebSocketType.캔들정보, "candle" + description));
th_CandleStatus.Start();
break;
}*/
#endregion
2024-05-23 16:32:30 +09:00
}
2024-05-22 16:56:51 +09:00
private void ticker_WebSocket(List<object> marketList, int count)
{
}
// 폼 닫기 시 처리 이벤트
private void MainForm_FormClosing(object sender, FormClosingEventArgs e)
2024-05-23 16:32:30 +09:00
{
if (th_SignalInfo != null)
{
indicatorProcess.Is_th_SignalInfo = false;
th_SignalInfo.Join();
th_SignalInfo = null;
}
2024-06-10 18:22:06 +09:00
if (commonProperty.webConnection != null)
{
commonProperty.webConnection.Is_th_webSocketThread = false;
commonProperty.webConnection.closeWebSocket();
}
2024-05-29 17:37:10 +09:00
if (th_MarketInfoList_WebService != null)
2024-05-29 17:37:10 +09:00
{
Is_th_th_MarketInfoList_WebService = false;
2024-05-29 17:37:10 +09:00
if (th_MarketInfoList_WebService.ThreadState == ThreadState.Running)
{
th_MarketInfoList_WebService.Join();
th_MarketInfoList_WebService = null;
}
2024-06-03 19:01:51 +09:00
}
if (th_treeListMarketInfoListUpdateTimer != null)
2024-05-29 17:37:10 +09:00
{
Is_th_treeListUpdate = false;
if (th_treeListMarketInfoListUpdateTimer.ThreadState == ThreadState.Running)
2024-05-29 17:37:10 +09:00
{
th_treeListMarketInfoListUpdateTimer.Join();
th_treeListMarketInfoListUpdateTimer = null;
2024-05-29 17:37:10 +09:00
}
2024-05-29 17:37:10 +09:00
}
2024-07-15 12:49:00 +09:00
if(dataCalculateThread != null)
{
Is_th_dataCalculateThread = false;
if (dataCalculateThread.ThreadState == ThreadState.Running)
{
dataCalculateThread.Join();
dataCalculateThread = null;
}
}
2024-05-22 16:56:51 +09:00
}
2024-06-10 18:22:06 +09:00
// 검색기 > 종목 재 정렬
private void simpleButton_MarketOrderRefresh_Click(object sender, EventArgs e)
{
checkedComboBoxEdit_MarketInfoList.Properties.Items.Clear();
// 조건 설정 : 체크콤보박스 마켓 정보 추가하기
foreach (var item in commonProperty.marketInfoList.OrderByDescending(i=>i.quoteVolume))
checkedComboBoxEdit_MarketInfoList.Properties.Items.Add(item.MarketName);
}
// 신호 검색 시작
private void simpleButton_SignalStart_Click(object sender, EventArgs e)
{
2024-06-10 23:22:01 +09:00
if(th_SignalInfo != null)
{
indicatorProcess.Is_th_SignalInfo = false;
2024-06-10 23:22:01 +09:00
if (th_SignalInfo.ThreadState == ThreadState.Running)
th_SignalInfo.Join();
2024-06-10 23:22:01 +09:00
th_SignalInfo = null;
}
if (commonProperty.webConnection != null)
2024-06-10 23:22:01 +09:00
{
commonProperty.webConnection.Is_th_webSocketThread = false;
commonProperty.webConnection.closeWebSocket();
2024-06-10 23:22:01 +09:00
}
if(th_treeListMarketInfoListUpdateTimer != null)
2024-06-10 23:22:01 +09:00
{
Is_th_treeListUpdate = false;
if (th_treeListMarketInfoListUpdateTimer.ThreadState == ThreadState.Running)
2024-06-10 23:22:01 +09:00
{
th_treeListMarketInfoListUpdateTimer.Join();
th_treeListMarketInfoListUpdateTimer = null;
2024-06-10 23:22:01 +09:00
}
2024-07-15 12:49:00 +09:00
}
if (dataCalculateThread != null)
{
Is_th_dataCalculateThread = false;
2024-07-15 12:49:00 +09:00
if (dataCalculateThread.ThreadState == ThreadState.Running)
{
dataCalculateThread.Join();
dataCalculateThread = null;
}
2024-06-10 23:22:01 +09:00
}
2024-07-15 12:49:00 +09:00
foreach (var candleList in commonProperty.candleDataLists)
{
foreach (var interval in candleList.candleDataList)
interval.Value.Clear();
}
2024-06-10 23:22:01 +09:00
2024-06-10 18:22:06 +09:00
var count = 0;
var marketList = checkedComboBoxEdit_MarketInfoList.Properties.Items.GetCheckedValues();
if (marketList.Count <=0 ) return;
2024-07-25 12:26:45 +09:00
//if (marketList.Count > 50)
//{
// for(var i = 50; i < marketList.Count; i++)
// {
// checkedComboBoxEdit_MarketInfoList.Properties.Items[i].CheckState = CheckState.Unchecked;
// }
// marketList = checkedComboBoxEdit_MarketInfoList.Properties.Items.GetCheckedValues();
//}
2024-06-10 18:22:06 +09:00
var dic = new Dictionary<string, object>();
dic.Add("op", "subscribe");
var argsList = new List<Dictionary<string, object>>();
// Json String 만들기
// 종목별 Ticker 구독하기
// WebSocket으로 데이터 가져오기
foreach (var marketName in marketList)
{
var args = new Dictionary<string, object>();
args.Add("instType", "USDT-FUTURES");
2024-07-15 12:49:00 +09:00
//args.Add("channel", "ticker");
args.Add("channel", "candle1m");
2024-06-10 18:22:06 +09:00
args.Add("instId", marketName);
argsList.Add(args);
count++;
}
dic.Add("args", argsList);
// 웹소켓으로 캔들 쌓기
// WebSocket 생성
2024-07-12 12:57:46 +09:00
indicatorProcess = new IndicatorProcess();
var checkedMarkets = checkedComboBoxEdit_MarketInfoList.Properties.Items.GetCheckedValues();
var intervalList = checkedComboBoxEdit_TimeInterval.Properties.Items.GetCheckedValues();
indicatorProcess.checkedMarkets = checkedMarkets;
indicatorProcess.intervalList = intervalList;
commonProperty.webConnection = webConnection;
webConnection.Is_th_webSocketThread = true;
2024-07-15 12:49:00 +09:00
//webConnection.BitGetWebSocektStart(BitgetWebSocketType.현황정보_전체종목, dic);
webConnection.BitGetWebSocektStart(BitgetWebSocketType.캔들정보, dic);
//th_webSocketThread = new Thread(() => TheadWebSocketRecieve(BitgetWebSocketType.현황정보_전체종목, dic));
//th_webSocketThread.Start();
2024-06-10 18:22:06 +09:00
// WebServicee 초기 캔들 데이터 가져오기 : 종목, 개수
// 종목별 캔들 데이터 가져오기 (WebService)
// 선택된 타입에 따라서 종목 정보 가져오기
var exchangeWebReqType = ExchangeWebReqType.BitgetMarket_Future;
th_MarketInfoList_WebService = new Thread(() => getMarketCandleData_WebService(exchangeWebReqType, marketList));
th_MarketInfoList_WebService.Start();
2024-06-10 18:22:06 +09:00
// 트리 현황판 업데이트
th_treeListMarketInfoListUpdateTimer = new Thread(new ThreadStart(TreeListMarketInfoListUpdate));
2024-07-11 11:27:14 +09:00
th_treeListMarketInfoListUpdateTimer.Start();
2024-06-10 18:22:06 +09:00
}
2024-05-22 16:56:51 +09:00
}
}