싹다 수정
This commit is contained in:
@@ -20,6 +20,9 @@ using DateTime = System.DateTime;
|
||||
using DevExpress.Xpo.Logger;
|
||||
using DevExpress.XtraTreeList.Filtering.Provider;
|
||||
using System.Runtime.InteropServices;
|
||||
using DevExpress.XtraEditors.Filtering;
|
||||
using DevExpress.XtraExport.Xls;
|
||||
using DevExpress.Utils.Filtering.Internal;
|
||||
|
||||
namespace BitgetAPI.WebService
|
||||
{
|
||||
@@ -335,7 +338,8 @@ namespace BitgetAPI.WebService
|
||||
}
|
||||
}
|
||||
|
||||
if (tempStrData == "") {
|
||||
if (tempStrData == "")
|
||||
{
|
||||
if (!ValidateJSON(message))
|
||||
{
|
||||
tempStrData = message;
|
||||
@@ -361,25 +365,28 @@ namespace BitgetAPI.WebService
|
||||
string[] separatingStrings = { "{\"action" };
|
||||
|
||||
var splitData = message.Split(separatingStrings, System.StringSplitOptions.RemoveEmptyEntries);
|
||||
|
||||
|
||||
foreach (var item in splitData)
|
||||
{
|
||||
var temp = "{\"action" + item;
|
||||
try
|
||||
{
|
||||
var datalist = JsonConvert.DeserializeObject<Dictionary<string, object>>(temp);
|
||||
lock (obj)
|
||||
if (datalist["action"].ToString() == "update")
|
||||
{
|
||||
webSocketDataList.Add(datalist);
|
||||
lock (obj)
|
||||
{
|
||||
webSocketDataList.Add(datalist);
|
||||
}
|
||||
}
|
||||
}
|
||||
catch (JsonReaderException)
|
||||
{
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
#region 접어 둘거
|
||||
//if (datalist.ContainsKey("data"))
|
||||
@@ -728,7 +735,7 @@ namespace BitgetAPI.WebService
|
||||
JToken.Parse(s);
|
||||
}
|
||||
|
||||
|
||||
|
||||
return true;
|
||||
}
|
||||
catch (JsonReaderException)
|
||||
@@ -765,23 +772,22 @@ namespace BitgetAPI.WebService
|
||||
}
|
||||
}
|
||||
|
||||
var dataList = cloneList.Where(t => t.ContainsKey("data")).Select(t => t["data"]);
|
||||
var list = JsonConvert.DeserializeObject<List<List<WebSocketTickerInfo>>>(JsonConvert.SerializeObject(dataList));
|
||||
|
||||
var calList = new List<WebSocketTickerInfo>();
|
||||
foreach(var item in list)
|
||||
{
|
||||
calList.Add(item[0]);
|
||||
}
|
||||
|
||||
var stringList = list.Select(t => t[0].instId).Distinct().ToList();
|
||||
list = list.OrderBy(t => t[0].ts).ToList();
|
||||
|
||||
|
||||
switch (bitgetWebSocketType)
|
||||
{
|
||||
case CommonProperty.BitgetWebSocketType.현황정보_전체종목:
|
||||
{
|
||||
var dataList = cloneList.Where(t => t.ContainsKey("data")).Select(t => t["data"]);
|
||||
var list = JsonConvert.DeserializeObject<List<List<WebSocketTickerInfo>>>(JsonConvert.SerializeObject(dataList));
|
||||
|
||||
var calList = new List<WebSocketTickerInfo>();
|
||||
foreach (var item in list)
|
||||
{
|
||||
calList.Add(item[0]);
|
||||
}
|
||||
|
||||
var stringList = list.Select(t => t[0].instId).Distinct().ToList();
|
||||
list = list.OrderBy(t => t[0].ts).ToList();
|
||||
|
||||
var minList = new Dictionary<string, List<CandleData>>();
|
||||
|
||||
foreach (var item in stringList)
|
||||
@@ -797,14 +803,14 @@ namespace BitgetAPI.WebService
|
||||
tickerList.reciveTime = dt.AddMilliseconds(Convert.ToDouble(tickerList.ts)).ToLocalTime();
|
||||
}
|
||||
|
||||
var timeList = temp.Select(t => t.reciveTime.Minute).OrderBy(t=>t).ToList();
|
||||
var timeList = temp.Select(t => t.reciveTime.Minute).OrderBy(t => t).ToList();
|
||||
|
||||
foreach (var min in timeList)
|
||||
{
|
||||
var minDataList = temp.Where(t => t.reciveTime.Minute == min).OrderBy(t=>t.reciveTime).ToList();
|
||||
var minDataList = temp.Where(t => t.reciveTime.Minute == min).OrderBy(t => t.reciveTime).ToList();
|
||||
|
||||
var candleData = new CandleData();
|
||||
var dt = minDataList[minDataList.Count -1].reciveTime;
|
||||
var dt = minDataList[minDataList.Count - 1].reciveTime;
|
||||
|
||||
candleData.Argument = dt;
|
||||
candleData.Close = minDataList.Last().lastPr;
|
||||
@@ -869,7 +875,7 @@ namespace BitgetAPI.WebService
|
||||
var temp = minList[item];
|
||||
|
||||
foreach (var candleData in temp)
|
||||
{
|
||||
{
|
||||
|
||||
// 캔들 리스트에서 해당 데이터 찾기
|
||||
var searchIndex_c = commonProperty.candleDataLists.IndexOf(i => i.ConGoodsData.MarketName == item);
|
||||
@@ -880,11 +886,14 @@ namespace BitgetAPI.WebService
|
||||
var strInterval = Utils.Convertor.GetEnumDescription((Enum)interval);
|
||||
if (!intervalList.Contains(strInterval)) continue;
|
||||
|
||||
var candleDataList = commonProperty.candleDataLists[searchIndex_c].candleDataList[interval];
|
||||
var candleDataList = commonProperty.candleDataLists[searchIndex_c].candleDataList[interval];
|
||||
|
||||
// 캔들 리스트가 없으면 추가
|
||||
if (candleDataList.Count == 0)
|
||||
{
|
||||
|
||||
candleDataList.Add(candleData);
|
||||
}
|
||||
else
|
||||
{
|
||||
var lastCandleData_Edit = candleDataList;
|
||||
@@ -909,54 +918,66 @@ namespace BitgetAPI.WebService
|
||||
|
||||
}
|
||||
|
||||
if (lastCandleData.Argument.Second != 0)
|
||||
{
|
||||
var beforeList = lastCandleData_Edit.OrderByDescending(t => t.Argument).ToList();
|
||||
var beforeArg = beforeList[1].Argument;
|
||||
lastCandleData.Argument = beforeList[1].Argument.AddMinutes((int)interval);
|
||||
}
|
||||
|
||||
// 업데이트 or 추가
|
||||
bool updateFlag = false;
|
||||
|
||||
switch (interval)
|
||||
{
|
||||
case CommonProperty.MCandleTimeType.M1:
|
||||
if (lastCandleData.Argument.Minute == candleData.Argument.Minute)
|
||||
updateFlag = true;
|
||||
break;
|
||||
case CommonProperty.MCandleTimeType.M3:
|
||||
if (candleData.Argument.Minute % 3 != 0 || (candleData.Argument.Minute % 3 == 0 && candleData.Argument.Minute == lastCandleData.Argument.Minute))
|
||||
updateFlag = true;
|
||||
break;
|
||||
case CommonProperty.MCandleTimeType.M5:
|
||||
if (candleData.Argument.Minute % 5 != 0 || (candleData.Argument.Minute % 5 == 0 && candleData.Argument.Minute == lastCandleData.Argument.Minute))
|
||||
updateFlag = true;
|
||||
break;
|
||||
case CommonProperty.MCandleTimeType.M15:
|
||||
if (candleData.Argument.Minute % 15 != 0 || (candleData.Argument.Minute % 15 == 0 && candleData.Argument.Minute == lastCandleData.Argument.Minute))
|
||||
updateFlag = true;
|
||||
break;
|
||||
case CommonProperty.MCandleTimeType.M30:
|
||||
if (candleData.Argument.Minute % 30 != 0 || (candleData.Argument.Minute % 30 == 0 && candleData.Argument.Minute == lastCandleData.Argument.Minute))
|
||||
updateFlag = true;
|
||||
break;
|
||||
case CommonProperty.MCandleTimeType.H1:
|
||||
if (candleData.Argument.Hour == candleData.Argument.Hour)
|
||||
updateFlag = true;
|
||||
break;
|
||||
case CommonProperty.MCandleTimeType.H4:
|
||||
if (candleData.Argument.Hour % 4 != 0 || (candleData.Argument.Hour % 4 == 0 && candleData.Argument.Hour == lastCandleData.Argument.Hour))
|
||||
updateFlag = true;
|
||||
break;
|
||||
case CommonProperty.MCandleTimeType.H6:
|
||||
if (candleData.Argument.Hour % 6 != 0 || (candleData.Argument.Hour % 6 == 0 && candleData.Argument.Hour == lastCandleData.Argument.Hour))
|
||||
updateFlag = true;
|
||||
break;
|
||||
case CommonProperty.MCandleTimeType.H12:
|
||||
if (candleData.Argument.Hour % 12 != 0 || (candleData.Argument.Hour % 12 == 0 && candleData.Argument.Hour == lastCandleData.Argument.Hour))
|
||||
updateFlag = true;
|
||||
break;
|
||||
}
|
||||
if (candleData.Argument > lastCandleData.Argument && candleData.Argument < lastCandleData.Argument.AddMinutes((int)interval))
|
||||
updateFlag = true;
|
||||
|
||||
//switch (interval)
|
||||
//{
|
||||
// case CommonProperty.MCandleTimeType.M1:
|
||||
// if (lastCandleData.Argument.Minute == candleData.Argument.Minute)
|
||||
// updateFlag = true;
|
||||
// break;
|
||||
// case CommonProperty.MCandleTimeType.M3:
|
||||
// if (candleData.Argument > lastCandleData.Argument && candleData.Argument < lastCandleData.Argument.AddMinutes((int)interval))
|
||||
// updateFlag = true;
|
||||
// //if (candleData.Argument.Minute % 3 != 0 || (candleData.Argument.Minute % 3 == 0 && candleData.Argument.Minute == lastCandleData.Argument.Minute))
|
||||
// // updateFlag = true;
|
||||
// break;
|
||||
// case CommonProperty.MCandleTimeType.M5:
|
||||
// //if (candleData.Argument.Minute % 5 != 0 || (candleData.Argument.Minute % 5 == 0 && candleData.Argument.Minute == lastCandleData.Argument.Minute))
|
||||
// updateFlag = true;
|
||||
// break;
|
||||
// case CommonProperty.MCandleTimeType.M15:
|
||||
// if (candleData.Argument.Minute % 15 != 0 || (candleData.Argument.Minute % 15 == 0 && candleData.Argument.Minute == lastCandleData.Argument.Minute))
|
||||
// updateFlag = true;
|
||||
// break;
|
||||
// case CommonProperty.MCandleTimeType.M30:
|
||||
// if (candleData.Argument.Minute % 30 != 0 || (candleData.Argument.Minute % 30 == 0 && candleData.Argument.Minute == lastCandleData.Argument.Minute))
|
||||
// updateFlag = true;
|
||||
// break;
|
||||
// case CommonProperty.MCandleTimeType.H1:
|
||||
// if (candleData.Argument.Hour == candleData.Argument.Hour)
|
||||
// updateFlag = true;
|
||||
// break;
|
||||
// case CommonProperty.MCandleTimeType.H4:
|
||||
// if (candleData.Argument.Hour % 4 != 0 || (candleData.Argument.Hour % 4 == 0 && candleData.Argument.Hour == lastCandleData.Argument.Hour))
|
||||
// updateFlag = true;
|
||||
// break;
|
||||
// case CommonProperty.MCandleTimeType.H6:
|
||||
// if (candleData.Argument.Hour % 6 != 0 || (candleData.Argument.Hour % 6 == 0 && candleData.Argument.Hour == lastCandleData.Argument.Hour))
|
||||
// updateFlag = true;
|
||||
// break;
|
||||
// case CommonProperty.MCandleTimeType.H12:
|
||||
// if (candleData.Argument.Hour % 12 != 0 || (candleData.Argument.Hour % 12 == 0 && candleData.Argument.Hour == lastCandleData.Argument.Hour))
|
||||
// updateFlag = true;
|
||||
// break;
|
||||
//}
|
||||
|
||||
// 이미 등록된 시간 캔들이 있는 경우 변경
|
||||
if (updateFlag)
|
||||
{
|
||||
// 시간 업데이트
|
||||
lastCandleData.Argument = candleData.Argument;
|
||||
//lastCandleData.Argument = candleData.Argument;
|
||||
// 종가 수정
|
||||
lastCandleData.Close = candleData.Close;
|
||||
lastCandleData.Low = lastCandleData.Low > candleData.Low ? candleData.Low : lastCandleData.Low;
|
||||
@@ -966,9 +987,12 @@ namespace BitgetAPI.WebService
|
||||
}
|
||||
// 없는 경우 추가
|
||||
else
|
||||
{
|
||||
{
|
||||
candleData.WebSocketUpdate = true;
|
||||
|
||||
var dt = candleData.Argument;
|
||||
dt = dt.AddSeconds(dt.Second * -1);
|
||||
dt = dt.AddMilliseconds(dt.Millisecond * -1);
|
||||
candleData.Open = lastCandleData.Close;
|
||||
// 새 데이터 등록
|
||||
candleDataList.Add(candleData);
|
||||
|
||||
@@ -988,115 +1012,174 @@ namespace BitgetAPI.WebService
|
||||
case CommonProperty.BitgetWebSocketType.캔들정보:
|
||||
#region 캔들 웹소켓 : 종목 50, 캔들 1 개만 해도 뒤지려고 함 !! (일딴 패스)
|
||||
{
|
||||
foreach (var datalist in cloneList)
|
||||
var list = new List<ResponseCandleStick>();
|
||||
cloneList = cloneList.Where(t => t["action"].ToString() == "update").ToList();
|
||||
foreach (var item in cloneList)
|
||||
{
|
||||
var argList = JsonConvert.DeserializeObject<Dictionary<string, object>>(datalist["arg"]?.ToString());
|
||||
var resCandleStick = new ResponseCandleStick();
|
||||
resCandleStick.arg = new ResponseCandleStickArg();
|
||||
|
||||
var candleInfos = JsonConvert.DeserializeObject<List<List<object>>>(datalist["data"]?.ToString());
|
||||
var candleInfo = candleInfos[0];
|
||||
double.TryParse(item["ts"].ToString(), out var ts);
|
||||
|
||||
DateTime dt = new DateTime(1970, 01, 01);
|
||||
var candleData = new CandleData(
|
||||
dt.AddMilliseconds(Convert.ToDouble(candleInfo[0])).ToLocalTime(),
|
||||
Convert.ToDouble(candleInfo[1]),
|
||||
Convert.ToDouble(candleInfo[2]),
|
||||
Convert.ToDouble(candleInfo[3]),
|
||||
Convert.ToDouble(candleInfo[4]),
|
||||
Convert.ToDouble(candleInfo[5]),
|
||||
Convert.ToDouble(candleInfo[6]),
|
||||
Convert.ToDouble(candleInfo[7])
|
||||
);
|
||||
var arg = (JObject)item["arg"];
|
||||
resCandleStick.arg.instType = arg.GetValue("instType").ToString();
|
||||
resCandleStick.arg.channel = arg.GetValue("channel").ToString();
|
||||
resCandleStick.arg.instId = arg.GetValue("instId").ToString();
|
||||
resCandleStick.action = item["action"]?.ToString();
|
||||
resCandleStick.ts = ts;
|
||||
var dataList = JsonConvert.DeserializeObject<List<List<string>>>(JsonConvert.SerializeObject(item["data"]));
|
||||
resCandleStick.data = dataList[0];
|
||||
list.Add(resCandleStick);
|
||||
}
|
||||
|
||||
// Websocket 캔들 정보 구분 하기 (1분, 1시간 등)
|
||||
CommonProperty.MCandleTimeType mCandleTimeType = CommonProperty.MCandleTimeType.H1;
|
||||
foreach (var interval in Enum.GetValues(typeof(CommonProperty.MCandleTimeType)))
|
||||
var minList = new Dictionary<string, List<CandleData>>();
|
||||
|
||||
var stringList = list.Select(t => t.arg.instId).ToList();
|
||||
list = list.OrderBy(t => t.ts).ToList();
|
||||
|
||||
foreach (var item in stringList)
|
||||
{
|
||||
var temp = list.Where(t => item == t.arg.instId);
|
||||
if (temp.Count() > 0)
|
||||
{
|
||||
// Description
|
||||
var description = Utils.Convertor.GetEnumDescription((Enum)interval);
|
||||
if (argList["channel"].ToString().Contains(description))
|
||||
mCandleTimeType = (CommonProperty.MCandleTimeType)interval;
|
||||
break;
|
||||
minList.Add(item, new List<CandleData>());
|
||||
foreach (var t in temp)
|
||||
{
|
||||
DateTime dt = new DateTime(1970, 01, 01);
|
||||
t.reciveTime = dt.AddMilliseconds(Convert.ToDouble(t.data[0])).ToLocalTime();
|
||||
}
|
||||
|
||||
var timeList = temp.Select(t => t.reciveTime.Minute).OrderBy(t => t).ToList();
|
||||
|
||||
foreach (var min in timeList)
|
||||
{
|
||||
var minDataList = temp.Where(t => t.reciveTime.Minute == min).OrderBy(t => t.reciveTime).ToList();
|
||||
var lastData = minDataList[minDataList.Count - 1];
|
||||
var candleData = new CandleData();
|
||||
|
||||
double.TryParse(lastData.data[1].ToString(), out var openData);
|
||||
double.TryParse(lastData.data[2].ToString(), out var highData);
|
||||
double.TryParse(lastData.data[3].ToString(), out var lowData);
|
||||
double.TryParse(lastData.data[4].ToString(), out var closeData);
|
||||
|
||||
candleData.Argument = lastData.reciveTime;
|
||||
candleData.Close = closeData;
|
||||
candleData.Open = openData;
|
||||
candleData.Low = lowData;
|
||||
candleData.High = highData;
|
||||
|
||||
minList[item].Add(candleData);
|
||||
}
|
||||
}
|
||||
}
|
||||
foreach (var item in minList.Keys)
|
||||
{
|
||||
var temp = minList[item];
|
||||
|
||||
// 캔들 리스트에서 해당 데이터 찾기
|
||||
var searchIndex = commonProperty.candleDataLists.IndexOf(i => i.ConGoodsData.MarketName == argList["instId"].ToString());
|
||||
|
||||
var candleDataList = commonProperty.candleDataLists[searchIndex].candleDataList[mCandleTimeType];
|
||||
|
||||
// 마지막 데이터 (최신데이터) 가져오기
|
||||
CandleData lastCandleData = null;
|
||||
|
||||
if (candleDataList.Count == 0)
|
||||
candleDataList.Add(candleData);
|
||||
else
|
||||
{
|
||||
lastCandleData = commonProperty.candleDataLists[searchIndex].candleDataList[mCandleTimeType].Last();
|
||||
|
||||
// 최신데이터와 비교하여 교체/등록하기
|
||||
|
||||
// 업데이트 or 추가
|
||||
bool updateFlag = false;
|
||||
|
||||
switch (mCandleTimeType)
|
||||
foreach (var candleData in temp)
|
||||
{
|
||||
foreach (CommonProperty.MCandleTimeType mCandleTimeType in Enum.GetValues(typeof(CommonProperty.MCandleTimeType)))
|
||||
{
|
||||
case CommonProperty.MCandleTimeType.M1:
|
||||
if (lastCandleData.Argument.Minute == candleData.Argument.Minute)
|
||||
updateFlag = true;
|
||||
break;
|
||||
case CommonProperty.MCandleTimeType.M3:
|
||||
if (candleData.Argument.Minute % 3 != 0 || (candleData.Argument.Minute % 3 == 0 && candleData.Argument.Minute == lastCandleData.Argument.Minute))
|
||||
updateFlag = true;
|
||||
break;
|
||||
case CommonProperty.MCandleTimeType.M5:
|
||||
if (candleData.Argument.Minute % 5 != 0 || (candleData.Argument.Minute % 5 == 0 && candleData.Argument.Minute == lastCandleData.Argument.Minute))
|
||||
updateFlag = true;
|
||||
break;
|
||||
case CommonProperty.MCandleTimeType.M15:
|
||||
if (candleData.Argument.Minute % 15 != 0 || (candleData.Argument.Minute % 15 == 0 && candleData.Argument.Minute == lastCandleData.Argument.Minute))
|
||||
updateFlag = true;
|
||||
break;
|
||||
case CommonProperty.MCandleTimeType.M30:
|
||||
if (candleData.Argument.Minute % 30 != 0 || (candleData.Argument.Minute % 30 == 0 && candleData.Argument.Minute == lastCandleData.Argument.Minute))
|
||||
updateFlag = true;
|
||||
break;
|
||||
case CommonProperty.MCandleTimeType.H1:
|
||||
if (candleData.Argument.Hour == candleData.Argument.Hour)
|
||||
updateFlag = true;
|
||||
break;
|
||||
case CommonProperty.MCandleTimeType.H4:
|
||||
if (candleData.Argument.Hour % 4 != 0 || (candleData.Argument.Hour % 4 == 0 && candleData.Argument.Hour == lastCandleData.Argument.Hour))
|
||||
updateFlag = true;
|
||||
break;
|
||||
case CommonProperty.MCandleTimeType.H6:
|
||||
if (candleData.Argument.Hour % 6 != 0 || (candleData.Argument.Hour % 6 == 0 && candleData.Argument.Hour == lastCandleData.Argument.Hour))
|
||||
updateFlag = true;
|
||||
break;
|
||||
case CommonProperty.MCandleTimeType.H12:
|
||||
if (candleData.Argument.Hour % 12 != 0 || (candleData.Argument.Hour % 12 == 0 && candleData.Argument.Hour == lastCandleData.Argument.Hour))
|
||||
updateFlag = true;
|
||||
break;
|
||||
}
|
||||
var strInterval = Utils.Convertor.GetEnumDescription((Enum)mCandleTimeType);
|
||||
if (!intervalList.Contains(strInterval)) continue;
|
||||
|
||||
// 이미 등록된 시간 캔들이 있는 경우 변경
|
||||
if (updateFlag)
|
||||
{
|
||||
lastCandleData = candleData;
|
||||
}
|
||||
// 없는 경우 추가
|
||||
else
|
||||
{
|
||||
lastCandleData.Close = candleData.Open;
|
||||
// 새 데이터 등록
|
||||
candleDataList.Add(candleData);
|
||||
// 기존 데이터 삭제
|
||||
if (candleDataList.Count > 250)
|
||||
// 캔들 리스트에서 해당 데이터 찾기
|
||||
var searchIndex = commonProperty.candleDataLists.IndexOf(i => i.ConGoodsData.MarketName == item);
|
||||
|
||||
var candleDataList = commonProperty.candleDataLists[searchIndex].candleDataList[mCandleTimeType];
|
||||
|
||||
// 마지막 데이터 (최신데이터) 가져오기
|
||||
CandleData lastCandleData = null;
|
||||
|
||||
if (candleDataList.Count == 0)
|
||||
candleDataList.Add(candleData);
|
||||
else
|
||||
{
|
||||
var max = candleDataList.Max(t => t.Argument);
|
||||
lastCandleData = candleDataList.Find(t => t.Argument == max);
|
||||
|
||||
var minData = candleDataList.Min(t => t.Argument);
|
||||
var minCandle = candleDataList.FirstOrDefault(t => t.Argument == minData);
|
||||
if (minCandle != null)
|
||||
// 최신데이터와 비교하여 교체/등록하기
|
||||
if (lastCandleData.Argument.Second != 0)
|
||||
{
|
||||
candleDataList.Remove(minCandle);
|
||||
var beforeList = candleDataList.OrderByDescending(t => t.Argument).ToList();
|
||||
var beforeArg = beforeList[1].Argument;
|
||||
lastCandleData.Argument = beforeList[1].Argument.AddMinutes((int)mCandleTimeType);
|
||||
}
|
||||
|
||||
// 업데이트 or 추가
|
||||
bool updateFlag = false;
|
||||
|
||||
if (candleData.Argument >= lastCandleData.Argument && candleData.Argument < lastCandleData.Argument.AddMinutes((int)mCandleTimeType))
|
||||
updateFlag = true;
|
||||
#region 접어 두기
|
||||
//switch (mCandleTimeType)
|
||||
//{
|
||||
// case CommonProperty.MCandleTimeType.M1:
|
||||
// if (lastCandleData.Argument.Minute == candleData.Argument.Minute)
|
||||
// updateFlag = true;
|
||||
// break;
|
||||
// case CommonProperty.MCandleTimeType.M3:
|
||||
// if (candleData.Argument.Minute % 3 != 0 || (candleData.Argument.Minute % 3 == 0 && candleData.Argument.Minute == lastCandleData.Argument.Minute))
|
||||
// updateFlag = true;
|
||||
// break;
|
||||
// case CommonProperty.MCandleTimeType.M5:
|
||||
// if (candleData.Argument.Minute % 5 != 0 || (candleData.Argument.Minute % 5 == 0 && candleData.Argument.Minute == lastCandleData.Argument.Minute))
|
||||
// updateFlag = true;
|
||||
// break;
|
||||
// case CommonProperty.MCandleTimeType.M15:
|
||||
// if (candleData.Argument.Minute % 15 != 0 || (candleData.Argument.Minute % 15 == 0 && candleData.Argument.Minute == lastCandleData.Argument.Minute))
|
||||
// updateFlag = true;
|
||||
// break;
|
||||
// case CommonProperty.MCandleTimeType.M30:
|
||||
// if (candleData.Argument.Minute % 30 != 0 || (candleData.Argument.Minute % 30 == 0 && candleData.Argument.Minute == lastCandleData.Argument.Minute))
|
||||
// updateFlag = true;
|
||||
// break;
|
||||
// case CommonProperty.MCandleTimeType.H1:
|
||||
// if (candleData.Argument.Hour == candleData.Argument.Hour)
|
||||
// updateFlag = true;
|
||||
// break;
|
||||
// case CommonProperty.MCandleTimeType.H4:
|
||||
// if (candleData.Argument.Hour % 4 != 0 || (candleData.Argument.Hour % 4 == 0 && candleData.Argument.Hour == lastCandleData.Argument.Hour))
|
||||
// updateFlag = true;
|
||||
// break;
|
||||
// case CommonProperty.MCandleTimeType.H6:
|
||||
// if (candleData.Argument.Hour % 6 != 0 || (candleData.Argument.Hour % 6 == 0 && candleData.Argument.Hour == lastCandleData.Argument.Hour))
|
||||
// updateFlag = true;
|
||||
// break;
|
||||
// case CommonProperty.MCandleTimeType.H12:
|
||||
// if (candleData.Argument.Hour % 12 != 0 || (candleData.Argument.Hour % 12 == 0 && candleData.Argument.Hour == lastCandleData.Argument.Hour))
|
||||
// updateFlag = true;
|
||||
// break;
|
||||
//}
|
||||
#endregion
|
||||
// 이미 등록된 시간 캔들이 있는 경우 변경
|
||||
if (updateFlag)
|
||||
{
|
||||
// 시간 업데이트
|
||||
//lastCandleData.Argument = candleData.Argument;
|
||||
// 종가 수정
|
||||
lastCandleData.Close = candleData.Close;
|
||||
lastCandleData.Low = lastCandleData.Low > candleData.Low ? candleData.Low : lastCandleData.Low;
|
||||
lastCandleData.High = lastCandleData.High < candleData.High ? candleData.High : lastCandleData.High;
|
||||
|
||||
lastCandleData.WebSocketUpdate = true;
|
||||
}
|
||||
// 없는 경우 추가
|
||||
else
|
||||
{
|
||||
candleData.WebSocketUpdate = true;
|
||||
var dt = candleData.Argument;
|
||||
dt = dt.AddSeconds(dt.Second * -1);
|
||||
dt = dt.AddMilliseconds(dt.Millisecond * -1);
|
||||
// 새 데이터 등록
|
||||
candleDataList.Add(candleData);
|
||||
|
||||
// 기존 데이터 삭제
|
||||
if (candleDataList.Count > 250)
|
||||
{
|
||||
// 가장 오래된 데이터 삭제
|
||||
candleDataList.Remove(j => j.Argument == candleDataList.Min(i => i.Argument));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user