Ver Fonte

fix:修复calmar值过大导致指标存储报错的问题

mozuwen há 3 meses atrás
pai
commit
d56971148a

+ 9 - 3
service-calc/src/main/java/com/simuwang/calc/CompetitionIndicatorCalcService.java

@@ -2,16 +2,18 @@ package com.simuwang.calc;
 
 import cn.hutool.core.collection.CollUtil;
 import com.smppw.common.pojo.dto.CompoundRet;
-import com.smppw.utils.BigDecimalUtils;
 import org.springframework.stereotype.Service;
 
 import java.math.BigDecimal;
+import java.math.RoundingMode;
 import java.util.List;
 
 @Service
 public class CompetitionIndicatorCalcService {
 
-    private static final BigDecimal INDICATOR_MAX_VALUE = new BigDecimal(999999999);
+    private static final BigDecimal INDICATOR_INVALID_VALUE = new BigDecimal(999999999);
+
+    private static final BigDecimal INDICATOR_MAX_VALUE = new BigDecimal(999999998);
 
     /**
      * 计算年化收益率
@@ -76,8 +78,12 @@ public class CompetitionIndicatorCalcService {
             return null;
         }
         if (maxDrawDown.compareTo(BigDecimal.ZERO) == 0) {
+            return INDICATOR_INVALID_VALUE;
+        }
+        BigDecimal calmarRatio = retA.divide(maxDrawDown).setScale(4, RoundingMode.HALF_UP);
+        if (calmarRatio.compareTo(INDICATOR_INVALID_VALUE) > 0) {
             return INDICATOR_MAX_VALUE;
         }
-        return BigDecimalUtils.divide(retA, maxDrawDown);
+        return calmarRatio;
     }
 }