Skip to content

Commit c6b2aca

Browse files
authored
Merge pull request #18 from spacious-team/feature-investbook-gh-365
Добавить тип "Произвольный актив"
2 parents 9bfbe74 + a194ef3 commit c6b2aca

File tree

2 files changed

+18
-7
lines changed

2 files changed

+18
-7
lines changed

src/main/java/org/spacious_team/broker/pojo/SecurityQuote.java

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,7 @@ public class SecurityQuote {
5656

5757
@NotNull
5858
@Schema(description = "Котировка (для облигаций - в процентах, деривативы - в пунктах)", example = "4800.20", required = true)
59-
private final BigDecimal quote; // for stock and currency pair in currency, for bond - in percent, for derivative - in quote
59+
private final BigDecimal quote; // for stock, currency pair and asset in currency, for bond - in percent, for derivative - in quote
6060

6161
//@Nullable
6262
@Schema(description = "Котировка (в валюте, только для облигаций и деривативов)", example = "1020.30", nullable = true)
@@ -69,7 +69,8 @@ public class SecurityQuote {
6969

7070
//@Nullable
7171
@JsonProperty("currency")
72-
@Schema(description = "Валюта котировки для акций, облигаций и деривативов (опционально)", example = "RUB", nullable = true)
72+
@Schema(description = "Валюта котировки для акций, облигаций, произвольных активов и опционально для деривативов",
73+
example = "RUB", nullable = true)
7374
private final String currency;
7475

7576
/**
@@ -83,7 +84,7 @@ public BigDecimal getCleanPriceInCurrency() {
8384
return price;
8485
} else {
8586
if (price == null && accruedInterest == null) {
86-
return quote; // for stocks and currency pairs
87+
return quote; // for stocks, currency pairs, asset
8788
} else {
8889
return price; // for bonds
8990
}

src/main/java/org/spacious_team/broker/pojo/SecurityType.java

Lines changed: 14 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -24,10 +24,14 @@
2424
@RequiredArgsConstructor
2525
public enum SecurityType {
2626

27-
STOCK_OR_BOND("акция/облигация"),
27+
STOCK("акция"),
28+
BOND("облигация"),
29+
STOCK_OR_BOND("акция/облигация"), // нельзя сказать точно акция или облигация
2830
DERIVATIVE("срочный контракт"),
29-
CURRENCY_PAIR("валюта");
31+
CURRENCY_PAIR("валюта"),
32+
ASSET("произвольный актив");
3033

34+
public static final String ASSET_PREFIX = "ASSET:";
3135
@Getter
3236
private final String description;
3337

@@ -41,9 +45,11 @@ public static SecurityType getSecurityType(String security) {
4145
return STOCK_OR_BOND;
4246
} else if (length == 6 || (length > 7 && security.charAt(6) == '_')) { // USDRUB_TOM or USDRUB_TOD or USDRUB
4347
return CURRENCY_PAIR;
44-
} else {
45-
return DERIVATIVE;
48+
} else if (security.startsWith(ASSET_PREFIX)) {
49+
return ASSET;
4650
}
51+
// фьючерс всегда с дефисом, например Si-12.21, опцион может быть MXI-6.21M170621CA3000 или MM3000BF1
52+
return DERIVATIVE;
4753
}
4854

4955
/**
@@ -53,4 +59,8 @@ public static String getCurrencyPair(String contract) {
5359
return (contract.length() == 6) ? contract :
5460
contract.substring(0, Math.min(6, contract.length()));
5561
}
62+
63+
public boolean isStockOrBond() {
64+
return this == STOCK || this == BOND || this == STOCK_OR_BOND;
65+
}
5666
}

0 commit comments

Comments
 (0)