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

This commit is contained in:
jwlee
2023-04-06 05:07:43 +09:00
4 changed files with 225 additions and 21 deletions

View File

@@ -370,7 +370,7 @@ namespace Million
//}
});
foreach (var item in dic.Keys)
foreach (var item in dic.Keys)
{
if(dic.ContainsKey(item))
totalResultList.AddRange(dic[item]);
@@ -419,7 +419,7 @@ namespace Million
if (buy.BuyValue < sell.SellValue) t1++;
}
savedResult.EndDateTime = DateTime.Now;
//savedResult.EndDateTime = DateTime.Now;
savedResult.SavedDateTime = DateTime.Now;
tt /= totalResultList.Count;
@@ -457,8 +457,8 @@ namespace Million
var resultData = new List<SearchResult>();
var startMiniuteDate = startDate.AddMinutes(-200);
var startHourDate = startDate.AddHours(-200);
var startMiniuteDate = startDate.AddMinutes(-100);
var startHourDate = startDate.AddHours(-100);
var mCandleTypeList = new List<CommonProperty.MCandleTimeType>();
mCandleTypeList.Add(CommonProperty.MCandleTimeType.M1);
@@ -469,17 +469,220 @@ namespace Million
var hStandardData = DataManager.GetStandardData(totalIndicator, startHourDate, startDate, market, distinctIndicator, true, hCandleTypeList);
standardData.Add(CommonProperty.MCandleTimeType.H1, hStandardData[CommonProperty.MCandleTimeType.H1]);
//속도 및 메모리 부하를 줄이기 위한 로직 추가
//db 전체 데이터 불러오는 로직 -> 1분봉 데이터 하나도 안빠져있다는 가정
#region 개선 후
var standardStartDate = startDate;
var standardEndDate = startDate.AddDays(7);
if (endDate <= standardEndDate)
{
standardEndDate = endDate;
}
var mDataList = DbServiceFunctions.GetCandleData(market, standardStartDate, standardEndDate);
var breakFlag = true;
while (true)
{
if (mDataList.CandleDataLists_Im.Count == 0) break;
if(mDataList.CandleDataLists_Im.Count < 10)
{
if (breakFlag)
{
standardStartDate = standardEndDate;
standardEndDate = standardEndDate.AddDays(7);
if (standardEndDate >= endDate)
{
breakFlag = false;
standardEndDate = endDate;
}
var tempMDataList = DbServiceFunctions.GetCandleData(market, standardStartDate, standardEndDate);
mDataList.CandleDataLists_Im.AddRange(tempMDataList.CandleDataLists_Im);
}
}
var minData = mDataList.CandleDataLists_Im[0];
var compareMin = standardData[CommonProperty.MCandleTimeType.M1].LastOrDefault();
if (compareMin == null || compareMin.DateTime == minData.DateTime || compareMin.DateTime > minData.DateTime)
{
mDataList.CandleDataLists_Im.RemoveAt(0);
continue;
}
//remove
if (standardData[CommonProperty.MCandleTimeType.M1].Count > 150)
standardData[CommonProperty.MCandleTimeType.M1].RemoveAt(0);
if (standardData[CommonProperty.MCandleTimeType.H1].Count > 150)
standardData[CommonProperty.MCandleTimeType.H1].RemoveAt(0);
//1분씩 증가하면서 1h 처리
minData.RecentlyDataFlag = true;
standardData[CommonProperty.MCandleTimeType.M1].Add(minData);
var compareHour = standardData[CommonProperty.MCandleTimeType.H1].LastOrDefault();
if (compareHour.DateTime.Hour != minData.DateTime.Hour)
{
var candle = new CandleData();
candle.CandleTimeType = (int)MCandleTimeType.H1;
candle.StartValue = minData.StartValue;
candle.HighValue = minData.HighValue;
candle.LowValue = minData.LowValue;
candle.RecentlyDataFlag = true;
candle.EndValue = minData.EndValue;
var date = compareHour.DateTime.AddHours(1);
date = date.AddMinutes(-1 * date.Minute);
date = date.AddSeconds(-1 * date.Second);
candle.DateTime = date;
standardData[CommonProperty.MCandleTimeType.H1].Add(candle);
}
else
{
compareHour.HighValue = compareHour.HighValue < minData.HighValue ? minData.HighValue : compareHour.HighValue;
compareHour.LowValue = compareHour.LowValue < minData.LowValue ? compareHour.LowValue : minData.LowValue;
compareHour.EndValue = minData.EndValue;
compareHour.RecentlyDataFlag = true;
}
standardData = DataManager.GetExecuteData(standardData, totalIndicator);
var minDateTime = standardData[CommonProperty.MCandleTimeType.M1].Select(t => t.DateTime).Min();
var maxDateTime = standardData[CommonProperty.MCandleTimeType.M1].Select(t => t.DateTime).Max().AddHours(1);
var buyDataList = buyList.FirstOrDefault(t => t.ConGoodsData.CoinFullName == market.CoinFullName);
if (buyDataList != null && buyDataList.CandleDataLists_Im.Count > 0)
{
standardData = IndicatorSetupManager.CalculateIndicator(standardData, totalIndicator, minDateTime, maxDateTime, item, true, buyDataList.CandleDataLists_Im[0]);
}
else
{
standardData = IndicatorSetupManager.CalculateIndicator(standardData, totalIndicator, minDateTime, maxDateTime, item, true);
}
var recentlyData = DataManager.GetRecentlyData(standardData, MCandleTimeType.M1, true);
if (recentlyData == null) {
mDataList.CandleDataLists_Im.RemoveAt(0);
continue;
}
if (!buyList.Any(t => t.ConGoodsData.CoinFullName == item))
{
var flag = buyScript.DicExcuteScript(recentlyData.CalculateFlag);
if (flag)
{
//var buyData = new CandleDataList();
//buyData.CandleDataLists_Im.Add(recentlyData);
//var valDic = ResultLogicManager.GetIndicateValue(recentlyData.CalculateFlag, totalIndicator, recentlyData);
//recentlyData.BuyValue = OrderbookManager.GetAskPrice(CalculateManager.GetConditionValue(buyScript.regularExpressionString, valDic, recentlyData.CalculateFlag));
//recentlyData.BuyTime = recentlyData.DateTime;
//buyData.ConGoodsData = CommonProperty.selectedMarketOfPlaceList.FirstOrDefault(t => t.CoinFullName == item);
//recentlyData.BuyCount = 1;
//buyList.Add(buyData);
if (overlapBuyManagementList[item])
{
var buyData = new CandleDataList();
buyData.CandleDataLists_Im.Add(recentlyData);
var valDic = ResultLogicManager.GetIndicateValue(recentlyData.CalculateFlag, totalIndicator, recentlyData);
recentlyData.BuyValue = OrderbookManager.GetAskPrice(CalculateManager.GetConditionValue(buyScript.regularExpressionString, valDic, recentlyData.CalculateFlag));
recentlyData.BuyTime = recentlyData.DateTime;
buyData.ConGoodsData = CommonProperty.selectedMarketOfPlaceList.FirstOrDefault(t => t.CoinFullName == item);
recentlyData.BuyCount = 1;
buyList.Add(buyData);
overlapBuyManagementList[item] = false;
}
}
else
{
overlapBuyManagementList[item] = true;
}
}
//Hunter의 경우 1분안에 사고 팔고가 다 끝날수도 있음 그러므로 처리해야함
if (buyList.Any(t => t.ConGoodsData.CoinFullName == item))
{
var flag = false;
var scriptStr = sellScript.regularExpressionString;
if (sellExceptionScript.regularExpressionString != null &&
sellExceptionScript.regularExpressionString.Length > 0)
{
//예외처리 로직 추가
flag = sellExceptionScript.DicExcuteScript(recentlyData.CalculateFlag);
if (flag) scriptStr = sellExceptionScript.regularExpressionString;
}
if (!flag)
{
//default sell
flag = sellScript.DicExcuteScript(recentlyData.CalculateFlag);
scriptStr = sellScript.regularExpressionString;
}
if (flag)
{
var buyItem = buyList.FirstOrDefault(x => x.ConGoodsData.CoinFullName == item);
var sellItem = recentlyData;
var valDic = ResultLogicManager.GetIndicateValue(sellItem.CalculateFlag, totalIndicator, sellItem);
sellItem.SellValue = OrderbookManager.GetAskPrice(CalculateManager.GetConditionValue(scriptStr, valDic, sellItem.CalculateFlag), false);
var sellVal = sellItem.SellValue;
sellItem.SellTime = recentlyData.DateTime;
var buyCandleData = buyItem.CandleDataLists_Im[0];
var result = DataManager.GetBuyerSearchResult(buyCandleData, recentlyData, buyItem.ConGoodsData);
resultData.Add(result);
//초기화 작업
foreach (var sublIndi in subIndStringiList)
{
CommonProperty.subIndicatorStateManagement[sublIndi][item] = false;
}
//처리한 buyList는 삭제
buyList.Remove(buyItem);
}
}
mDataList.CandleDataLists_Im.RemoveAt(0);
}
#endregion
#region 개선 전
/*
var mTotalDataList = DbServiceFunctions.GetCandleData(market, startDate, endDate);
lastData = mTotalDataList.CandleDataLists_Im.LastOrDefault();
foreach (var minData in mTotalDataList.CandleDataLists_Im)
{
var compareMin = standardData[CommonProperty.MCandleTimeType.M1].LastOrDefault();
if (compareMin == null || compareMin.DateTime == minData.DateTime || compareMin.DateTime > minData.DateTime) continue;
//remove
standardData[CommonProperty.MCandleTimeType.M1].RemoveAt(0);
if (standardData[CommonProperty.MCandleTimeType.H1].Count > 300)
if (standardData[CommonProperty.MCandleTimeType.M1].Count > 250)
standardData[CommonProperty.MCandleTimeType.M1].RemoveAt(0);
if (standardData[CommonProperty.MCandleTimeType.H1].Count > 250)
standardData[CommonProperty.MCandleTimeType.H1].RemoveAt(0);
//1분씩 증가하면서 1h 처리
@@ -623,12 +826,14 @@ namespace Million
}
}
}
if(buyList.Count > 0)
*/
#endregion
if (buyList.Count > 0)
{
var lastData = standardData[MCandleTimeType.M1].LastOrDefault();
foreach(var buy in buyList)
{
var lastData = mTotalDataList.CandleDataLists_Im.LastOrDefault();
{
lastData.SellValue = lastData.EndValue;
lastData.SellTime = new DateTime(2000, 1, 1);
var result = DataManager.GetBuyerSearchResult(buy.CandleDataLists_Im[0], lastData, buy.ConGoodsData);

View File

@@ -112,7 +112,6 @@
<EmbeddedResource Include="Form1.resx">
<DependentUpon>Form1.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="Properties\licenses.licx" />
<EmbeddedResource Include="Properties\Resources.resx">
<Generator>ResXFileCodeGenerator</Generator>
<LastGenOutput>Resources.Designer.cs</LastGenOutput>

View File

@@ -119,9 +119,9 @@ namespace Million.IndicatorConditionSetup
if (data[data.Count() - 2].IndicatorDic.ContainsKey(movingKeyName))
{
i = data.Count() - 1;
for(int j= data.Count()-Period;j<i;i++)
for(int j= data.Count()-Period;j<i;j++)
{
var thisValue = GetStockValue(data[i]);
var thisValue = GetStockValue(data[j]);
total_average += thisValue;
endValueList.Add(thisValue);
}

View File

@@ -697,13 +697,13 @@ namespace Million.Manager
subFlag = false;
var str = "";
if(subValue < parent.EndValue)
{
str = coinFullName + " Sub 조건 Error 발생\r\n";
str += "parent : " + JsonConvert.SerializeObject(parent) + "\r\n";
LogManager.WriteLog(str, coinFullName);
LogManager.WriteLog(coinFullName + " ERROR 발생 함");
}
//if(subValue < parent.EndValue)
//{
// str = coinFullName + " Sub 조건 Error 발생\r\n";
// str += "parent : " + JsonConvert.SerializeObject(parent) + "\r\n";
// LogManager.WriteLog(str, coinFullName);
// LogManager.WriteLog(coinFullName + " ERROR 발생 함");
//}
if (recentlyDataFlag)
{