This commit is contained in:
parent
fd01d2ce3b
commit
8f4f1a1a9a
1 changed files with 10 additions and 1 deletions
|
|
@ -4,6 +4,8 @@ import java.math.BigDecimal;
|
||||||
import java.math.MathContext;
|
import java.math.MathContext;
|
||||||
import java.math.RoundingMode;
|
import java.math.RoundingMode;
|
||||||
import java.time.LocalDate;
|
import java.time.LocalDate;
|
||||||
|
import org.slf4j.Logger;
|
||||||
|
import org.slf4j.LoggerFactory;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
import ru.clearing.classes.statics.data.misc.Listing;
|
import ru.clearing.classes.statics.data.misc.Listing;
|
||||||
import ru.clearing.classes.statics.data.misc.OrderCurrency;
|
import ru.clearing.classes.statics.data.misc.OrderCurrency;
|
||||||
|
|
@ -17,6 +19,7 @@ import ru.spcex.platform.enumeration.SettleCode;
|
||||||
|
|
||||||
@Service
|
@Service
|
||||||
public class OrderCalculationService {
|
public class OrderCalculationService {
|
||||||
|
protected final Logger log = LoggerFactory.getLogger(getClass());
|
||||||
private static final MathContext MC = new MathContext(20, RoundingMode.HALF_UP);
|
private static final MathContext MC = new MathContext(20, RoundingMode.HALF_UP);
|
||||||
|
|
||||||
private final ImdgQueryService imdgQueryService;
|
private final ImdgQueryService imdgQueryService;
|
||||||
|
|
@ -106,6 +109,9 @@ public class OrderCalculationService {
|
||||||
private CalculationResult calculationRubSums(Registry registry, Integer lotSize, BigDecimal s, BigDecimal n) {
|
private CalculationResult calculationRubSums(Registry registry, Integer lotSize, BigDecimal s, BigDecimal n) {
|
||||||
BigDecimal planPosition = registry.getBalance();
|
BigDecimal planPosition = registry.getBalance();
|
||||||
Rates cnyRate = imdgQueryService.getRate(registry.getSecuritySymbol(), LocalDate.now());
|
Rates cnyRate = imdgQueryService.getRate(registry.getSecuritySymbol(), LocalDate.now());
|
||||||
|
if (cnyRate == null) {
|
||||||
|
throw new IllegalStateException(String.format("Not fond rate by security symbol: %s", registry.getSecuritySymbol()));
|
||||||
|
}
|
||||||
BigDecimal rateValue = cnyRate.getValue();
|
BigDecimal rateValue = cnyRate.getValue();
|
||||||
|
|
||||||
BigDecimal sum1 = planPosition.divide(rateValue, MC);
|
BigDecimal sum1 = planPosition.divide(rateValue, MC);
|
||||||
|
|
@ -130,10 +136,13 @@ public class OrderCalculationService {
|
||||||
|
|
||||||
private BigDecimal swapPriceCalc(String baseCurrency, BigDecimal s, BigDecimal n) {
|
private BigDecimal swapPriceCalc(String baseCurrency, BigDecimal s, BigDecimal n) {
|
||||||
Rates rate = imdgQueryService.getRate(baseCurrency, LocalDate.now());
|
Rates rate = imdgQueryService.getRate(baseCurrency, LocalDate.now());
|
||||||
|
BigDecimal p = BigDecimal.ONE.divide(n, MC);
|
||||||
|
log.info("Calculation swap price: {}*{}*{}", s, n, p);
|
||||||
return rate.getValue()
|
return rate.getValue()
|
||||||
.multiply(s, MC)
|
.multiply(s, MC)
|
||||||
.multiply(n, MC)
|
.multiply(n, MC)
|
||||||
.divide(BigDecimal.valueOf(365), MC);
|
.multiply(p, MC)
|
||||||
|
.setScale(8, RoundingMode.HALF_UP);
|
||||||
}
|
}
|
||||||
|
|
||||||
private boolean isRub(Registry registry) {
|
private boolean isRub(Registry registry) {
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue