buyer에 여러 MCandleTimeType호환 되도록 수정 중
This commit is contained in:
@@ -1,4 +1,5 @@
|
||||
using Million.Data;
|
||||
using Million.Data.Upbit;
|
||||
using Million.DbManagement;
|
||||
using Million.IndicatorConditionSetup;
|
||||
using System;
|
||||
@@ -399,9 +400,49 @@ namespace Million.Manager
|
||||
recentlyData.HighValue = recentlyData.HighValue < candleData.HighValue ? candleData.HighValue : recentlyData.HighValue;
|
||||
recentlyData.LowValue = recentlyData.LowValue < candleData.LowValue ? recentlyData.LowValue : candleData.LowValue;
|
||||
recentlyData.EndValue = candleData.EndValue;
|
||||
recentlyData.RecentlyDataFlag = true;
|
||||
recentlyData.MoneyVolume += candleData.MoneyVolume;
|
||||
return recentlyData;
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Tick List를
|
||||
/// </summary>
|
||||
/// <param name="tickList"></param>
|
||||
/// <returns></returns>
|
||||
public static List<CandleData> GetOneMinuteCandleDataFromTickList(List<Ticker> tickList)
|
||||
{
|
||||
var returnData = new List<CandleData>();
|
||||
|
||||
var dateTimeList = tickList.Select(t => t.DateTime.Minute).Distinct().ToList();
|
||||
|
||||
foreach (var item in dateTimeList)
|
||||
{
|
||||
var list = tickList.Where(t => t.DateTime.Minute == item).ToList();
|
||||
if (list.Count > 0)
|
||||
{
|
||||
var valueList = list.Select(t => t.TradePrice).ToList();
|
||||
var startValue = list[0].TradePrice;
|
||||
var endValue = list[list.Count - 1].TradePrice;
|
||||
var highValue = valueList.Max();
|
||||
var lowValue = valueList.Min();
|
||||
var candle = new CandleData();
|
||||
candle.DateTime = list[0].DateTime;
|
||||
candle.DateTime.AddSeconds(candle.DateTime.Second * -1);
|
||||
candle.CandleTimeType = 1;
|
||||
candle.StartValue = startValue;
|
||||
candle.HighValue = highValue;
|
||||
candle.LowValue = lowValue;
|
||||
candle.RecentlyDataFlag = true;
|
||||
candle.EndValue = endValue;
|
||||
|
||||
returnData.Add(candle);
|
||||
}
|
||||
}
|
||||
|
||||
return returnData;
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@@ -234,179 +234,210 @@ namespace Million.Manager
|
||||
|
||||
tickList = cloneTickList.Where(t => t.CoinFullName == coinFullName).OrderBy(t=>t.DateTime).ToList();
|
||||
|
||||
// 호출 당시 시, 분, 초
|
||||
var callH = basicDateTime.Hour;
|
||||
var callM = basicDateTime.Minute;
|
||||
var callS = basicDateTime.Second;
|
||||
try
|
||||
#region 여러 Type 다 호환 되도록 새로 구성
|
||||
/*
|
||||
* 1. Tick -> 1분봉으로 모두 변환(시가는 제일 작은거로 처리
|
||||
* 2. 기존에 가지고 있는 봉 마지막꺼를 포함한 모든 데이터를 가지고 GetConvertCandleDataList로 처리
|
||||
* 3. 마지막 봉삭제 후 모두 Addrange
|
||||
* 4. 이후 300개 이상일 경우 삭제 처리
|
||||
*/
|
||||
|
||||
var returnList = DataManager.GetOneMinuteCandleDataFromTickList(tickList);
|
||||
if(item.CandleDataLists_Im.Count > 0)
|
||||
{
|
||||
if (type == MCandleTimeType.M1)
|
||||
{
|
||||
var equalMinuteList = tickList.Where(t => t.DateTime.Minute == callM).ToList();
|
||||
|
||||
//해당 분 고가
|
||||
if (equalMinuteList.Count != 0)
|
||||
{
|
||||
var equalListM = equalMinuteList.Select(t => t.TradePrice).ToList();
|
||||
double equalListMax = 0;
|
||||
if (equalListM.Count != 0)
|
||||
{
|
||||
equalListMax = equalListM.Max();
|
||||
}
|
||||
|
||||
//해당 분 저가
|
||||
var equalListL = equalMinuteList.Select(t => t.TradePrice).ToList();
|
||||
|
||||
double equalListMin = 0;
|
||||
if (equalListL.Count != 0)
|
||||
{
|
||||
equalListMin = equalListL.Min();
|
||||
}
|
||||
if (item.CandleDataLists_Im.Count != 0)
|
||||
{
|
||||
if (item.CandleDataLists_Im[item.CandleDataLists_Im.Count - 1].HighValue < equalListMax && equalListMax != 0)
|
||||
item.CandleDataLists_Im[item.CandleDataLists_Im.Count - 1].HighValue = equalListMax;
|
||||
if (item.CandleDataLists_Im[item.CandleDataLists_Im.Count - 1].LowValue > equalListMin && equalListMin != 0)
|
||||
item.CandleDataLists_Im[item.CandleDataLists_Im.Count - 1].LowValue = equalListMin;
|
||||
item.CandleDataLists_Im[item.CandleDataLists_Im.Count - 1].RecentlyDataFlag = true;
|
||||
item.CandleDataLists_Im[item.CandleDataLists_Im.Count - 1].EndValue = equalMinuteList[equalMinuteList.Count - 1].TradePrice;
|
||||
}
|
||||
else
|
||||
{
|
||||
var candle = new CandleData();
|
||||
candle.CandleTimeType = (int)MCandleTimeType.M1;
|
||||
candle.StartValue = equalMinuteList[0].TradePrice;
|
||||
candle.HighValue = equalListMax;
|
||||
candle.LowValue = equalListMin;
|
||||
candle.RecentlyDataFlag = true;
|
||||
candle.EndValue = equalMinuteList[equalMinuteList.Count - 1].TradePrice;
|
||||
var date = basicDateTime.AddMinutes(1);
|
||||
date = date.AddSeconds(-1 * callS);
|
||||
candle.DateTime = date;
|
||||
if (item.CandleDataLists_Im.Count > 300)
|
||||
item.CandleDataLists_Im.RemoveRange(0, item.CandleDataLists_Im.Count - 300);
|
||||
item.CandleDataLists_Im.Add(candle);
|
||||
}
|
||||
}
|
||||
|
||||
var list = tickList.Where(t => t.DateTime > basicDateTime && t.DateTime.Minute != basicDateTime.Minute).ToList();
|
||||
|
||||
if (list.Count > 0)
|
||||
{
|
||||
// 데이터 가져올떄 1분 이상 걸릴 시 처리할 데이터
|
||||
var minList = list.Select(t => t.DateTime.Minute).Distinct().ToList();
|
||||
minList.Sort();
|
||||
|
||||
foreach (var min in minList)
|
||||
{
|
||||
var equalList = list.Where(t => t.DateTime.Minute == min).OrderBy(t => t.DateTime).ToList();
|
||||
|
||||
//해당 분 고가
|
||||
var max = equalList.Select(t => t.TradePrice).ToList().Max();
|
||||
//해당 분 저가
|
||||
var low = equalList.Select(t => t.TradePrice).ToList().Min();
|
||||
|
||||
var candle = new CandleData();
|
||||
candle.CandleTimeType = (int)MCandleTimeType.M1;
|
||||
candle.StartValue = equalList[0].TradePrice;
|
||||
candle.HighValue = max;
|
||||
candle.LowValue = low;
|
||||
candle.RecentlyDataFlag = true;
|
||||
candle.EndValue = equalList[equalList.Count - 1].TradePrice;
|
||||
|
||||
var intervalMin = min - callM;
|
||||
|
||||
var date = basicDateTime.AddMinutes(intervalMin);
|
||||
if(intervalMin < 0) date = date.AddHours(1);
|
||||
|
||||
date = date.AddSeconds(-1 * callS);
|
||||
candle.DateTime = date;
|
||||
if (item.CandleDataLists_Im.Count > 300)
|
||||
item.CandleDataLists_Im.RemoveRange(0, item.CandleDataLists_Im.Count - 300);
|
||||
item.CandleDataLists_Im.Add(candle);
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
else if (type == MCandleTimeType.H1)
|
||||
{
|
||||
var equalHourList = tickList.Where(t => t.DateTime.Hour == callH).ToList();
|
||||
if (equalHourList.Count != 0)
|
||||
{
|
||||
var equalListM = equalHourList.Select(t => t.TradePrice).ToList();
|
||||
double equalListMax = 0;
|
||||
if (equalListM.Count != 0)
|
||||
{
|
||||
equalListMax = equalListM.Max();
|
||||
}
|
||||
|
||||
//해당 분 저가
|
||||
var equalListL = equalHourList.Select(t => t.TradePrice).ToList();
|
||||
double equalListMin = 0;
|
||||
if (equalListL.Count != 0)
|
||||
{
|
||||
equalListMin = equalListL.Min();
|
||||
}
|
||||
if (item.CandleDataLists_Im.Count > 0)
|
||||
{
|
||||
if (item.CandleDataLists_Im[item.CandleDataLists_Im.Count - 1].HighValue < equalListMax && equalListMax != 0)
|
||||
item.CandleDataLists_Im[item.CandleDataLists_Im.Count - 1].HighValue = equalListMax;
|
||||
if (item.CandleDataLists_Im[item.CandleDataLists_Im.Count - 1].LowValue > equalListMin && equalListMin != 0)
|
||||
item.CandleDataLists_Im[item.CandleDataLists_Im.Count - 1].LowValue = equalListMin;
|
||||
item.CandleDataLists_Im[item.CandleDataLists_Im.Count - 1].RecentlyDataFlag = true;
|
||||
item.CandleDataLists_Im[item.CandleDataLists_Im.Count - 1].EndValue = equalHourList[equalHourList.Count - 1].TradePrice;
|
||||
}
|
||||
else
|
||||
{
|
||||
var candle = new CandleData();
|
||||
candle.CandleTimeType = (int)MCandleTimeType.H1;
|
||||
candle.StartValue = equalHourList[0].TradePrice;
|
||||
candle.HighValue = equalListMax;
|
||||
candle.LowValue = equalListMin;
|
||||
candle.RecentlyDataFlag = true;
|
||||
candle.EndValue = equalHourList[equalHourList.Count - 1].TradePrice;
|
||||
|
||||
var date = basicDateTime.AddHours(1);
|
||||
date = date.AddMinutes(-1 * callM);
|
||||
date = date.AddSeconds(-1 * callS);
|
||||
candle.DateTime = date;
|
||||
if (item.CandleDataLists_Im.Count > 300)
|
||||
item.CandleDataLists_Im.RemoveRange(0, 100);
|
||||
item.CandleDataLists_Im.Add(candle);
|
||||
}
|
||||
}
|
||||
|
||||
var list = tickList.Where(t => t.DateTime > basicDateTime && t.DateTime.Hour != basicDateTime.Hour).ToList();
|
||||
if (list.Count > 0)
|
||||
{
|
||||
//해당 분 고가
|
||||
var max = list.Select(t => t.TradePrice).ToList().Max();
|
||||
//해당 분 저가
|
||||
var low = list.Select(t => t.TradePrice).ToList().Min();
|
||||
|
||||
var candle = new CandleData();
|
||||
candle.CandleTimeType = (int)MCandleTimeType.H1;
|
||||
candle.StartValue = list[0].TradePrice;
|
||||
candle.HighValue = max;
|
||||
candle.LowValue = low;
|
||||
candle.RecentlyDataFlag = true;
|
||||
candle.EndValue = list[list.Count - 1].TradePrice;
|
||||
|
||||
var date = basicDateTime.AddHours(1);
|
||||
date = date.AddMinutes(-1 * callM);
|
||||
date = date.AddSeconds(-1 * callS);
|
||||
|
||||
candle.DateTime = date;
|
||||
if (item.CandleDataLists_Im.Count > 300)
|
||||
item.CandleDataLists_Im.RemoveRange(0, 100);
|
||||
item.CandleDataLists_Im.Add(candle);
|
||||
}
|
||||
}
|
||||
var lastData = item.CandleDataLists_Im[item.CandleDataLists_Im.Count - 1];
|
||||
returnList.Insert(0, lastData);
|
||||
}
|
||||
catch (Exception e)
|
||||
|
||||
var dataList = DataManager.GetConvertCandleDataList(returnList, type);
|
||||
|
||||
if (item.CandleDataLists_Im.Count > 0)
|
||||
{
|
||||
throw;
|
||||
item.CandleDataLists_Im.Remove(item.CandleDataLists_Im[item.CandleDataLists_Im.Count - 1]);
|
||||
}
|
||||
|
||||
item.CandleDataLists_Im.AddRange(dataList);
|
||||
if(item.CandleDataLists_Im.Count > 150)
|
||||
{
|
||||
item.CandleDataLists_Im.RemoveRange(0, item.CandleDataLists_Im.Count - 150);
|
||||
}
|
||||
|
||||
#endregion
|
||||
#region 옛날 소스
|
||||
//// 호출 당시 시, 분, 초
|
||||
//var callH = basicDateTime.Hour;
|
||||
//var callM = basicDateTime.Minute;
|
||||
//var callS = basicDateTime.Second;
|
||||
//try
|
||||
//{
|
||||
// if (type == MCandleTimeType.M1)
|
||||
// {
|
||||
// var equalMinuteList = tickList.Where(t => t.DateTime.Minute == callM).ToList();
|
||||
|
||||
// //해당 분 고가
|
||||
// if (equalMinuteList.Count != 0)
|
||||
// {
|
||||
// var equalListM = equalMinuteList.Select(t => t.TradePrice).ToList();
|
||||
// double equalListMax = 0;
|
||||
// if (equalListM.Count != 0)
|
||||
// {
|
||||
// equalListMax = equalListM.Max();
|
||||
// }
|
||||
|
||||
// //해당 분 저가
|
||||
// var equalListL = equalMinuteList.Select(t => t.TradePrice).ToList();
|
||||
|
||||
// double equalListMin = 0;
|
||||
// if (equalListL.Count != 0)
|
||||
// {
|
||||
// equalListMin = equalListL.Min();
|
||||
// }
|
||||
// if (item.CandleDataLists_Im.Count != 0)
|
||||
// {
|
||||
// if (item.CandleDataLists_Im[item.CandleDataLists_Im.Count - 1].HighValue < equalListMax && equalListMax != 0)
|
||||
// item.CandleDataLists_Im[item.CandleDataLists_Im.Count - 1].HighValue = equalListMax;
|
||||
// if (item.CandleDataLists_Im[item.CandleDataLists_Im.Count - 1].LowValue > equalListMin && equalListMin != 0)
|
||||
// item.CandleDataLists_Im[item.CandleDataLists_Im.Count - 1].LowValue = equalListMin;
|
||||
// item.CandleDataLists_Im[item.CandleDataLists_Im.Count - 1].RecentlyDataFlag = true;
|
||||
// item.CandleDataLists_Im[item.CandleDataLists_Im.Count - 1].EndValue = equalMinuteList[equalMinuteList.Count - 1].TradePrice;
|
||||
// }
|
||||
// else
|
||||
// {
|
||||
// var candle = new CandleData();
|
||||
// candle.CandleTimeType = (int)MCandleTimeType.M1;
|
||||
// candle.StartValue = equalMinuteList[0].TradePrice;
|
||||
// candle.HighValue = equalListMax;
|
||||
// candle.LowValue = equalListMin;
|
||||
// candle.RecentlyDataFlag = true;
|
||||
// candle.EndValue = equalMinuteList[equalMinuteList.Count - 1].TradePrice;
|
||||
// var date = basicDateTime.AddMinutes(1);
|
||||
// date = date.AddSeconds(-1 * callS);
|
||||
// candle.DateTime = date;
|
||||
// if (item.CandleDataLists_Im.Count > 300)
|
||||
// item.CandleDataLists_Im.RemoveRange(0, item.CandleDataLists_Im.Count - 300);
|
||||
// item.CandleDataLists_Im.Add(candle);
|
||||
// }
|
||||
// }
|
||||
|
||||
// var list = tickList.Where(t => t.DateTime > basicDateTime && t.DateTime.Minute != basicDateTime.Minute).ToList();
|
||||
|
||||
// if (list.Count > 0)
|
||||
// {
|
||||
// // 데이터 가져올떄 1분 이상 걸릴 시 처리할 데이터
|
||||
// var minList = list.Select(t => t.DateTime.Minute).Distinct().ToList();
|
||||
// minList.Sort();
|
||||
|
||||
// foreach (var min in minList)
|
||||
// {
|
||||
// var equalList = list.Where(t => t.DateTime.Minute == min).OrderBy(t => t.DateTime).ToList();
|
||||
|
||||
// //해당 분 고가
|
||||
// var max = equalList.Select(t => t.TradePrice).ToList().Max();
|
||||
// //해당 분 저가
|
||||
// var low = equalList.Select(t => t.TradePrice).ToList().Min();
|
||||
|
||||
// var candle = new CandleData();
|
||||
// candle.CandleTimeType = (int)MCandleTimeType.M1;
|
||||
// candle.StartValue = equalList[0].TradePrice;
|
||||
// candle.HighValue = max;
|
||||
// candle.LowValue = low;
|
||||
// candle.RecentlyDataFlag = true;
|
||||
// candle.EndValue = equalList[equalList.Count - 1].TradePrice;
|
||||
|
||||
// var intervalMin = min - callM;
|
||||
|
||||
// var date = basicDateTime.AddMinutes(intervalMin);
|
||||
// if(intervalMin < 0) date = date.AddHours(1);
|
||||
|
||||
// date = date.AddSeconds(-1 * callS);
|
||||
// candle.DateTime = date;
|
||||
// if (item.CandleDataLists_Im.Count > 300)
|
||||
// item.CandleDataLists_Im.RemoveRange(0, item.CandleDataLists_Im.Count - 300);
|
||||
// item.CandleDataLists_Im.Add(candle);
|
||||
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
// else if (type == MCandleTimeType.H1)
|
||||
// {
|
||||
// var equalHourList = tickList.Where(t => t.DateTime.Hour == callH).ToList();
|
||||
// if (equalHourList.Count != 0)
|
||||
// {
|
||||
// var equalListM = equalHourList.Select(t => t.TradePrice).ToList();
|
||||
// double equalListMax = 0;
|
||||
// if (equalListM.Count != 0)
|
||||
// {
|
||||
// equalListMax = equalListM.Max();
|
||||
// }
|
||||
|
||||
// //해당 분 저가
|
||||
// var equalListL = equalHourList.Select(t => t.TradePrice).ToList();
|
||||
// double equalListMin = 0;
|
||||
// if (equalListL.Count != 0)
|
||||
// {
|
||||
// equalListMin = equalListL.Min();
|
||||
// }
|
||||
// if (item.CandleDataLists_Im.Count > 0)
|
||||
// {
|
||||
// if (item.CandleDataLists_Im[item.CandleDataLists_Im.Count - 1].HighValue < equalListMax && equalListMax != 0)
|
||||
// item.CandleDataLists_Im[item.CandleDataLists_Im.Count - 1].HighValue = equalListMax;
|
||||
// if (item.CandleDataLists_Im[item.CandleDataLists_Im.Count - 1].LowValue > equalListMin && equalListMin != 0)
|
||||
// item.CandleDataLists_Im[item.CandleDataLists_Im.Count - 1].LowValue = equalListMin;
|
||||
// item.CandleDataLists_Im[item.CandleDataLists_Im.Count - 1].RecentlyDataFlag = true;
|
||||
// item.CandleDataLists_Im[item.CandleDataLists_Im.Count - 1].EndValue = equalHourList[equalHourList.Count - 1].TradePrice;
|
||||
// }
|
||||
// else
|
||||
// {
|
||||
// var candle = new CandleData();
|
||||
// candle.CandleTimeType = (int)MCandleTimeType.H1;
|
||||
// candle.StartValue = equalHourList[0].TradePrice;
|
||||
// candle.HighValue = equalListMax;
|
||||
// candle.LowValue = equalListMin;
|
||||
// candle.RecentlyDataFlag = true;
|
||||
// candle.EndValue = equalHourList[equalHourList.Count - 1].TradePrice;
|
||||
|
||||
// var date = basicDateTime.AddHours(1);
|
||||
// date = date.AddMinutes(-1 * callM);
|
||||
// date = date.AddSeconds(-1 * callS);
|
||||
// candle.DateTime = date;
|
||||
// if (item.CandleDataLists_Im.Count > 300)
|
||||
// item.CandleDataLists_Im.RemoveRange(0, 100);
|
||||
// item.CandleDataLists_Im.Add(candle);
|
||||
// }
|
||||
// }
|
||||
|
||||
// var list = tickList.Where(t => t.DateTime > basicDateTime && t.DateTime.Hour != basicDateTime.Hour).ToList();
|
||||
// if (list.Count > 0)
|
||||
// {
|
||||
// //해당 분 고가
|
||||
// var max = list.Select(t => t.TradePrice).ToList().Max();
|
||||
// //해당 분 저가
|
||||
// var low = list.Select(t => t.TradePrice).ToList().Min();
|
||||
|
||||
// var candle = new CandleData();
|
||||
// candle.CandleTimeType = (int)MCandleTimeType.H1;
|
||||
// candle.StartValue = list[0].TradePrice;
|
||||
// candle.HighValue = max;
|
||||
// candle.LowValue = low;
|
||||
// candle.RecentlyDataFlag = true;
|
||||
// candle.EndValue = list[list.Count - 1].TradePrice;
|
||||
|
||||
// var date = basicDateTime.AddHours(1);
|
||||
// date = date.AddMinutes(-1 * callM);
|
||||
// date = date.AddSeconds(-1 * callS);
|
||||
|
||||
// candle.DateTime = date;
|
||||
// if (item.CandleDataLists_Im.Count > 300)
|
||||
// item.CandleDataLists_Im.RemoveRange(0, 100);
|
||||
// item.CandleDataLists_Im.Add(candle);
|
||||
// }
|
||||
// }
|
||||
//}
|
||||
//catch (Exception e)
|
||||
//{
|
||||
// throw;
|
||||
//}
|
||||
#endregion
|
||||
}
|
||||
//});
|
||||
}
|
||||
@@ -457,3 +488,4 @@ namespace Million.Manager
|
||||
}
|
||||
}
|
||||
}
|
||||
;
|
||||
Reference in New Issue
Block a user