스레드 재실행 수정중!!

This commit is contained in:
jwlee
2024-06-10 23:22:01 +09:00
parent dba228b6dd
commit 43148b773a
2 changed files with 112 additions and 16 deletions

View File

@@ -260,7 +260,7 @@ namespace BitgetAPI
ichimokuConditionSetup.calIchimokuData(candleDatas_정렬, candleData_전봉); 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 price = candleData.Close;
var rate = (candleData.Close / candleData.Open) * 100 - 100; var rate = (candleData.Close / candleData.Open) * 100 - 100;
@@ -285,7 +285,7 @@ namespace BitgetAPI
signals_LU.Add(signalInfoData); 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 price = candleData.Close;
var rate = (candleData.Close / candleData.Open) * 100 - 100; var rate = (candleData.Close / candleData.Open) * 100 - 100;
@@ -561,6 +561,47 @@ namespace BitgetAPI
// 신호 검색 시작 // 신호 검색 시작
private void simpleButton_SignalStart_Click(object sender, EventArgs e) 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 count = 0;
var marketList = checkedComboBoxEdit_MarketInfoList.Properties.Items.GetCheckedValues(); var marketList = checkedComboBoxEdit_MarketInfoList.Properties.Items.GetCheckedValues();

View File

@@ -16,6 +16,7 @@ using BitgetApi.Data;
using Newtonsoft.Json.Linq; using Newtonsoft.Json.Linq;
using DevExpress.Utils.Extensions; using DevExpress.Utils.Extensions;
using static BitgetAPI.CommonProperty; using static BitgetAPI.CommonProperty;
using DateTime = System.DateTime;
namespace BitgetAPI.WebService namespace BitgetAPI.WebService
{ {
@@ -157,21 +158,75 @@ namespace BitgetAPI.WebService
candleData.Vol_USD = Convert.ToDouble(item[6]); candleData.Vol_USD = Convert.ToDouble(item[6]);
// 같은 시간이 존재하면 업데이트 : 1개밖에 없음 // 같은 시간이 존재하면 업데이트 : 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) 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 else
{ {
@@ -283,7 +338,8 @@ namespace BitgetAPI.WebService
DateTime dt = new DateTime(1970, 01, 01); DateTime dt = new DateTime(1970, 01, 01);
tickerList.reciveTime = dt.AddMilliseconds(Convert.ToDouble(tickerList.ts)).ToLocalTime(); tickerList.reciveTime = dt.AddMilliseconds(Convert.ToDouble(tickerList.ts)).ToLocalTime();
// 웹소켓 티커 리스트에 추가 // 웹소켓 티커 리스트에 추가 (사용 안함)
/*
var searchIndex = commonProperty.webSocketCandles.IndexOf(i => i.instId == tickerList.instId); var searchIndex = commonProperty.webSocketCandles.IndexOf(i => i.instId == tickerList.instId);
if (searchIndex < 0) if (searchIndex < 0)
commonProperty.webSocketCandles.Add(tickerList); commonProperty.webSocketCandles.Add(tickerList);
@@ -291,6 +347,7 @@ namespace BitgetAPI.WebService
{ {
commonProperty.webSocketCandles[searchIndex] = tickerList; commonProperty.webSocketCandles[searchIndex] = tickerList;
} }
*/
// 캔들 리스트에서 해당 데이터 찾기 // 캔들 리스트에서 해당 데이터 찾기
var searchIndex_c = commonProperty.candleDataLists.IndexOf(i => i.ConGoodsData.MarketName == tickerList.instId); var searchIndex_c = commonProperty.candleDataLists.IndexOf(i => i.ConGoodsData.MarketName == tickerList.instId);
@@ -305,8 +362,6 @@ namespace BitgetAPI.WebService
candleData.Argument = tickerList.reciveTime; candleData.Argument = tickerList.reciveTime;
candleData.Close = tickerList.lastPr; candleData.Close = tickerList.lastPr;
if (interval == MCandleTimeType.H1) { }
// 캔들 리스트가 없으면 추가 // 캔들 리스트가 없으면 추가
if (candleDataList.Count == 0) if (candleDataList.Count == 0)
candleDataList.Add(candleData); candleDataList.Add(candleData);