Merge branch 'feature/V1.1' of http://222.96.13.116/Million into feature/V1.1

This commit is contained in:
jwlee
2023-05-22 11:53:28 +09:00
7 changed files with 253 additions and 176 deletions

View File

@@ -527,7 +527,7 @@ namespace Million_Buyer
continue;
}
if (StarValueLowOverlapUp)
if (StarValueLowBuyValueUp)
{
if (recentlyData.StartValue < beforeData.HighValue)
{

View File

@@ -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
/// <param name="sender"></param>
/// <param name="e"></param>
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("추가 완료");

View File

@@ -74,7 +74,7 @@ namespace Million_Update_Server
data += Encoding.UTF8.GetString(buffer, 0, bytesRead);
} while (clientStream.DataAvailable);
var receivedPeople = JsonConvert.DeserializeObject<Million.SaveData.SavedResultData>(data);
//var receivedPeople = JsonConvert.DeserializeObject<Million.SaveData.SavedResultData>(data);

View File

@@ -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 사용하는 부분예외처리

View File

@@ -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; }

View File

@@ -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;
}
}
}

View File

@@ -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
}
}
}
;