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