diff --git a/Million Buyer/MainForm.cs b/Million Buyer/MainForm.cs
index bad211f..4e4e180 100644
--- a/Million Buyer/MainForm.cs
+++ b/Million Buyer/MainForm.cs
@@ -527,7 +527,7 @@ namespace Million_Buyer
continue;
}
- if (StarValueLowOverlapUp)
+ if (StarValueLowBuyValueUp)
{
if (recentlyData.StartValue < beforeData.HighValue)
{
diff --git a/Million Hunter/HunterMainForm.cs b/Million Hunter/HunterMainForm.cs
index 4e1e8f3..f0b043a 100644
--- a/Million Hunter/HunterMainForm.cs
+++ b/Million Hunter/HunterMainForm.cs
@@ -273,7 +273,7 @@ namespace Million
// 조건 검색을 반영하여 데이터 계산
private void simpleButton_CalcurateData_Click(object sender, EventArgs e)
{
- CommonProperty.StarValueLowOverlapUp = cb_StarValueLowOverlapUp.Checked;
+ CommonProperty.StarValueLowBuyValueUp = cb_StarValueLowOverlapUp.Checked;
// 계산 결과 데이터 관련 클래스에 값 채우기
DeafultDataSet();
@@ -617,7 +617,7 @@ namespace Million
recentlyData.BuyValue = OrderbookManager.GetAskPrice(CalculateManager.GetConditionValue(buyScript.regularExpressionString, valDic, recentlyData.CalculateFlag));
// 이전 전봉(H1)의 고가가 사려는 가격보다 높을경우 pass
- if (StarValueLowOverlapUp)
+ if (StarValueLowBuyValueUp)
{
if (recentlyData.StartValue < beforeData.HighValue)
{
@@ -1031,8 +1031,7 @@ namespace Million
///
///
private void bt_CalculateList_Click(object sender, EventArgs e)
- {
- CommonProperty.StarValueLowOverlapUp = cb_StarValueLowOverlapUp.Checked;
+ {
if (multiSavedResultDatas.Count > 0)
{
LogManager.WriteLog("헌터 리스트 계산 시작", "Hunter List 계산");
@@ -1040,6 +1039,8 @@ namespace Million
foreach (var item in multiSavedResultDatas)
{
+ CommonProperty.StarValueLowBuyValueUp = item.StarValueLowOverlapUp;
+
CalculateDatas(item.SavedResultData, item.UpperMainIndicatorFlag, item.IncludeClearIndicator, item.DownBeforeValueFlag, item.HunterMode);
LogManager.WriteLog("헌터 리스트 계산 완료. Name : " + item.SavedResultData.Name, "Hunter List 계산");
@@ -1086,6 +1087,7 @@ namespace Million
data.HunterMode = rd_Hunter.Checked;
data.IncludeClearIndicator = cb_IncludeClearIndicator.Checked;
data.UpperMainIndicatorFlag = cb_UpperMainIndi.Checked;
+ data.StarValueLowOverlapUp = cb_StarValueLowOverlapUp.Checked;
multiSavedResultDatas.Add(data);
MessageBox.Show("추가 완료");
diff --git a/Million Update Server/Form1.cs b/Million Update Server/Form1.cs
index 7e54691..fefd1b0 100644
--- a/Million Update Server/Form1.cs
+++ b/Million Update Server/Form1.cs
@@ -74,7 +74,7 @@ namespace Million_Update_Server
data += Encoding.UTF8.GetString(buffer, 0, bytesRead);
} while (clientStream.DataAvailable);
- var receivedPeople = JsonConvert.DeserializeObject(data);
+ //var receivedPeople = JsonConvert.DeserializeObject(data);
diff --git a/Million/CommonProperty.cs b/Million/CommonProperty.cs
index 7756f50..2945262 100644
--- a/Million/CommonProperty.cs
+++ b/Million/CommonProperty.cs
@@ -369,7 +369,7 @@ namespace Million
#region Realtime Hunter Flag
public static bool RealtimeHunterMode = false;
- public static bool StarValueLowOverlapUp = false;
+ public static bool StarValueLowBuyValueUp = false;
#endregion
#region Realtime 관련 Sub data 사용하는 부분예외처리
diff --git a/Million/Data/SaveData/MultiSavedResultData.cs b/Million/Data/SaveData/MultiSavedResultData.cs
index cb927be..d7265f7 100644
--- a/Million/Data/SaveData/MultiSavedResultData.cs
+++ b/Million/Data/SaveData/MultiSavedResultData.cs
@@ -19,6 +19,8 @@ namespace Million.Data.SaveData
public bool UpperMainIndicatorFlag { get; set; }
+ public bool StarValueLowOverlapUp { get; set; }
+
public bool IncludeClearIndicator { get; set; }
public bool DownBeforeValueFlag { get; set; }
diff --git a/Million/Manager/DataManager.cs b/Million/Manager/DataManager.cs
index 829a2f5..1ff1a8f 100644
--- a/Million/Manager/DataManager.cs
+++ b/Million/Manager/DataManager.cs
@@ -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;
}
}
+
+ ///
+ /// Tick List를
+ ///
+ ///
+ ///
+ public static List GetOneMinuteCandleDataFromTickList(List tickList)
+ {
+ var returnData = new List();
+
+ 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;
+ }
+
}
}
diff --git a/Million/Manager/RealtimeDataSettingManager.cs b/Million/Manager/RealtimeDataSettingManager.cs
index 419c4bc..c30343b 100644
--- a/Million/Manager/RealtimeDataSettingManager.cs
+++ b/Million/Manager/RealtimeDataSettingManager.cs
@@ -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
}
}
}
+;
\ No newline at end of file