Merge branch 'feature/V1.1' of http://222.96.13.116/Million into feature/V1.1
This commit is contained in:
@@ -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);
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
@@ -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)
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user