Cross 관련 상세 검증 완료

This commit is contained in:
kyh
2022-06-12 14:11:47 +09:00
parent 02b8af41f7
commit 1bd056f2ea
2 changed files with 81 additions and 74 deletions

View File

@@ -273,12 +273,13 @@ namespace Million_Hunter
var tableList = CommonProperty.selectedMarketOfPlaceList;
var totalResultList = new List<SearchResult>();
//임시로 하나만
Parallel.For(0, tableList.Count, i =>
{
//임시로 하나만
//for (var i = 0; i < tableList.Count; i++)
//{
var selectTable = tableList[i];
var selectTable = tableList[i];
//data setting
var distinctIndicator = IndicatorSetupManager.Distinct(totalIndicator);
@@ -310,15 +311,22 @@ namespace Million_Hunter
resultCandleDataList = resultCandleDataList.Where(t => _saveResultData.StartDateTime <= t.DateTime && t.DateTime < _saveResultData.EndDateTime).ToList();
// 최초와 cross의 조건먼저 계산이 필요함(선처리)
var subIndicator = totalIndicator.Where(t => t.SubIndicatorSetupType == CommonProperty.SubIndicatorSetupType.최초돌파 ||
var parentIndicator = totalIndicator.Where(t => t.SubIndicatorSetupType == CommonProperty.SubIndicatorSetupType.최초돌파 ||
t.SubIndicatorSetupType == CommonProperty.SubIndicatorSetupType.크로스).ToList();
var indiList = new List<string>();
foreach(var item in subIndicator)
indiList.AddRange(item.FirstOverSubRegExpression.Split(',').ToList());
foreach(var item in parentIndicator)
{
var subRegExpression = item.FirstOverSubRegExpression;
if (item.SubIndicatorSetupType == CommonProperty.SubIndicatorSetupType.크로스)
subRegExpression = item.CrossSubRegExpression;
indiList.AddRange(subRegExpression.Split(',').ToList());
}
indiList = indiList.Distinct().ToList();
foreach(var item in indiList)
var subIndicator = totalIndicator.Where(t => indiList.Any(u => u == t.IndexString)).ToList();
foreach (var item in indiList)
{
var indicator = totalIndicator.FirstOrDefault(t => t.IndexString == item);
if(indicator != null)
@@ -364,16 +372,15 @@ namespace Million_Hunter
list = list.Where(t => _saveResultData.StartDateTime <= t.DateTime && t.DateTime < _saveResultData.EndDateTime).ToList();
CalculateManager.SwitchFun(indicator, list, resultCandleDataList, subIndicator);
//totalCalculateCandleList.AddRange(CalculateManager.SwitchFun(indicator, list, resultCandleDataList));
}
//계산되지 않는 범위의 데이터 Filter
//totalCalculateCandleList = totalCalculateCandleList.Where(t => t.DateTime >= _saveResultData.StartDateTime && t.DateTime < _saveResultData.EndDateTime).ToList();
var resultLsit = ResultLogicManager.GetSearchResultList(resultCandleDataList, lossIndicator,
_saveResultData.BuyRegularExpression, _saveResultData.SellRegularExpression, selectTable, totalIndicator);
totalResultList.AddRange(resultLsit);
//}
//}
});
double totalVal = 0;

View File

@@ -428,30 +428,32 @@ namespace Million.Manager
for (var i = 0; i < parentCandleDataList.Count; i++)
{
var parent = parentCandleDataList[i];
if (!parent.IndicatorDic.ContainsKey(subSetup.IndexString)) continue;
var subKey = GetKeyData(subSetup);
if (!parent.IndicatorDic.ContainsKey(subKey)) continue;
var subIndiOverlapVal = parent.IndicatorDic[subSetup.IndexString].overlapValue;
var overlapValue = parent.IndicatorDic[setUp.IndexString].overlapValue;
var subIndiOverlapVal = parent.IndicatorDic[subKey].overlapValue;
var overlapValue = GetValueData(setUp, parent, key);
// 고가
if(type == 1)
if (type == 1)
{
if (parent.IndicatorDic[subSetup.IndexString].highValue != 0 &&
parent.IndicatorDic[setUp.IndexString].highValue != 0)
if (parent.IndicatorDic[subKey].highValue != 0 &&
parent.IndicatorDic[key].highValue != 0)
{
subIndiOverlapVal = parent.IndicatorDic[subSetup.IndexString].highValue;
overlapValue = parent.IndicatorDic[setUp.IndexString].highValue;
subIndiOverlapVal = parent.IndicatorDic[subKey].highValue;
overlapValue = parent.IndicatorDic[key].highValue;
}
}
// 저가
if(type == 2)
{
if (parent.IndicatorDic[subSetup.IndexString].lowValue != 0 &&
parent.IndicatorDic[setUp.IndexString].lowValue != 0)
if (parent.IndicatorDic[subKey].lowValue != 0 &&
parent.IndicatorDic[key].lowValue != 0)
{
subIndiOverlapVal = parent.IndicatorDic[subSetup.IndexString].lowValue;
overlapValue = parent.IndicatorDic[setUp.IndexString].lowValue;
subIndiOverlapVal = parent.IndicatorDic[subKey].lowValue;
overlapValue = parent.IndicatorDic[key].lowValue;
}
}
@@ -489,7 +491,7 @@ namespace Million.Manager
if (((MovingAverageConditionSetup)subSetup).MovingAverageType == MovingAverageType.거래량)
childs = GetChildrenDatas(parent, subSetup.MCandleTimeType, childrenCandleDataList);
var subIndiOver = setUp.GetQuoteValue(subList, childs);
var subIndiOver = subSetup.GetQuoteValue(subList, childs);
double overlapVal = 0;
foreach(var item in indiOver)
{
@@ -504,55 +506,22 @@ namespace Million.Manager
foreach(var item in childs)
{
if(item.EndValue > overlapVal)
if (item.CalculateFlag[setUp.IndexString]) continue;
item.CalculateFlag[setUp.IndexString] = true;
parent.CalculateFlag[setUp.IndexString] = true;
if (!(item.HighValue <= overlapVal && item.LowValue >= overlapVal))
{
if (item.CalculateFlag[setUp.IndexString]) continue;
overlapVal = item.StartValue;
}
item.CalculateFlag[setUp.IndexString] = true;
parent.CalculateFlag[setUp.IndexString] = true;
if (parent.IndicatorDic.ContainsKey(key))
{
parent.IndicatorDic[key].overlapValue = overlapVal;
}
else
{
parent.IndicatorDic[key] = new IndicatorData();
parent.IndicatorDic[key] = parent.IndicatorDic[key];
parent.IndicatorDic[key].overlapValue = overlapVal;
}
if (item.IndicatorDic.ContainsKey(key))
{
if (setUp.CrossType == CrossType.CrossOverStatus)
{
item.IndicatorDic[key].overlapValue = overlapVal;
}
else
{
if (item.StartValue > overlapVal)
item.IndicatorDic[key].overlapValue = item.StartValue;
else
item.IndicatorDic[key].overlapValue = overlapVal;
}
}
else
{
item.IndicatorDic[key] = new IndicatorData();
item.IndicatorDic[key] = parent.IndicatorDic[key];
if (setUp.CrossType == CrossType.CrossOverStatus)
{
item.IndicatorDic[key].overlapValue = overlapVal;
}
else
{
if (item.StartValue > overlapVal)
item.IndicatorDic[key].overlapValue = item.StartValue;
else
item.IndicatorDic[key].overlapValue = overlapVal;
}
}
}
if (!parent.IndicatorDic.ContainsKey(key))
{
parent.IndicatorDic[key] = new IndicatorData();
parent.IndicatorDic[key] = parent.IndicatorDic[key];
parent.IndicatorDic[key].overlapValue = overlapVal;
}
}
// 해당하는 봉만 True
@@ -780,7 +749,7 @@ namespace Million.Manager
{
if (!item.IndicatorDic.ContainsKey(key)) continue;
double value = GetValue(item, setUp);
var overlapData = GetOverlapValueData(setUp, item, key);
var overlapData = GetValueData(setUp, item, key);
if (CompareSettingValueOfTranspierce(setUp.IndicatorOver, overlapData, value))
{
@@ -930,6 +899,37 @@ namespace Million.Manager
return false;
}
/// <summary>
/// 계산된 값 가져오는 함수
/// </summary>
/// <param name="setUp"></param>
/// <param name="candleData"></param>
/// <param name="key"></param>
/// <returns></returns>
private static double GetValueData(IndicatorCoditionSetup setUp, CandleData candleData, string key)
{
var data = candleData.IndicatorDic[key].value;
#region 비교할 데이터 추출
if (candleData.IndicatorDic[key].GetType() == typeof(IchimokData))
{
if (((IchimokuConditionSetup)setUp).IndicatorIchmokuOverLine == CommonProperty.Indicator_IchmokuOverLine.선행스팬1)
{
data = ((IchimokData)candleData.IndicatorDic[key]).value;
}
else if (((IchimokuConditionSetup)setUp).IndicatorIchmokuOverLine == CommonProperty.Indicator_IchmokuOverLine.선행스팬2)
{
data = ((IchimokData)candleData.IndicatorDic[key]).value2;
}
else if (((IchimokuConditionSetup)setUp).IndicatorIchmokuOverLine == CommonProperty.Indicator_IchmokuOverLine.선행스팬1OR2중고가)
{
data = ((IchimokData)candleData.IndicatorDic[key]).GetOverValue();
}
}
#endregion
return data;
}
/// <summary>
/// 조건별 Overlap value 데이터 리턴
/// </summary>
@@ -955,7 +955,7 @@ namespace Million.Manager
{
overlapData = ((IchimokData)candleData.IndicatorDic[key]).GetOverValue();
}
}
}
#endregion
return overlapData;
}