/** * Restricted copy constructor. * @param beanToCopy the bean to copy from, not null */ private Builder(EtdFutureSecurity beanToCopy) { this.info = beanToCopy.getInfo(); this.contractSpecId = beanToCopy.getContractSpecId(); this.expiry = beanToCopy.getExpiry(); this.variant = beanToCopy.getVariant(); }
/** * Gets the currency of the trade. * <p> * This is typically the same as the currency of the product. * * @return the trading currency */ public Currency getCurrency() { return security.getCurrency(); }
@Override public SecurityId getSecurityId() { return security.getSecurityId(); }
public void test() { EtdFutureSecurity test = sut(); assertEquals(test.getVariant(), EtdVariant.MONTHLY); assertEquals(test.getType(), EtdType.FUTURE); assertEquals(test.getCurrency(), Currency.GBP); assertEquals(test.getUnderlyingIds(), ImmutableSet.of()); assertEquals(test.createProduct(REF_DATA), test); assertEquals( test.createTrade(TradeInfo.empty(), 1, 2, ReferenceData.empty()), EtdFutureTrade.of(TradeInfo.empty(), test, 1, 2)); assertEquals( test.createPosition(PositionInfo.empty(), 1, ReferenceData.empty()), EtdFuturePosition.ofNet(PositionInfo.empty(), test, 1)); assertEquals( test.createPosition(PositionInfo.empty(), 1, 2, ReferenceData.empty()), EtdFuturePosition.ofLongShort(PositionInfo.empty(), test, 1, 2)); }
public void test_of() { EtdFutureTrade test = EtdFutureTrade.of(TRADE_INFO, SECURITY, 1000, 20); assertEquals(test.getSecurity(), SECURITY); assertEquals(test.getQuantity(), 1000d, 0d); assertEquals(test.getPrice(), 20d, 0d); assertEquals(test.getSecurityId(), SECURITY.getSecurityId()); assertEquals(test.getCurrency(), SECURITY.getCurrency()); assertEquals(test.withInfo(TRADE_INFO).getInfo(), TRADE_INFO); assertEquals(test.withQuantity(129).getQuantity(), 129d, 0d); assertEquals(test.withPrice(129).getPrice(), 129d, 0d); }
public void test_resolveTarget() { EtdFuturePosition position = sut(); GenericSecurity resolvedSecurity = GenericSecurity.of(SECURITY.getInfo()); ImmutableReferenceData refData = ImmutableReferenceData.of(SECURITY.getSecurityId(), resolvedSecurity); GenericSecurityPosition expected = GenericSecurityPosition.ofLongShort(POSITION_INFO, resolvedSecurity, LONG_QUANTITY, SHORT_QUANTITY); assertEquals(position.resolveTarget(refData), expected); }
public void test_summaryDescription() { assertEquals(sut().summaryDescription(), "Jun17"); assertEquals(sut2().summaryDescription(), "W2Sep17"); }
/** * Obtains an instance from a contract specification, expiry year-month and variant. * <p> * The security identifier will be automatically created using {@link EtdIdUtils}. * The specification must be for a future. * * @param spec the future contract specification * @param expiry the expiry year-month of the future * @param variant the variant of the ETD, such as 'Monthly', 'Weekly, 'Daily' or 'Flex' * @return a future security based on this contract specification * @throws IllegalStateException if the product type of the contract specification is not {@code FUTURE} */ public static EtdFutureSecurity of(EtdContractSpec spec, YearMonth expiry, EtdVariant variant) { if (spec.getType() != EtdType.FUTURE) { throw new IllegalStateException( Messages.format("Cannot create an EtdFutureSecurity from a contract specification of type '{}'", spec.getType())); } SecurityId securityId = EtdIdUtils.futureId(spec.getExchangeId(), spec.getContractCode(), expiry, variant); return EtdFutureSecurity.builder() .info(SecurityInfo.of(securityId, spec.getPriceInfo())) .contractSpecId(spec.getId()) .expiry(expiry) .variant(variant) .build(); }
/** * Creates a future security based on this contract specification. * <p> * The security identifier will be automatically created using {@link EtdIdUtils}. * The {@link #getType() type} must be {@link EtdType#FUTURE} otherwise an exception will be thrown. * * @param expiryMonth the expiry month of the future * @param variant the variant of the ETD, such as 'Monthly', 'Weekly, 'Daily' or 'Flex' * @return a future security based on this contract specification * @throws IllegalStateException if the product type of the contract specification is not {@code FUTURE} */ public EtdFutureSecurity createFuture(YearMonth expiryMonth, EtdVariant variant) { return EtdFutureSecurity.of(this, expiryMonth, variant); }
@Override public EtdFutureSecurity build() { return new EtdFutureSecurity( info, contractSpecId, expiry, variant); }
public void test_summarize() { EtdFuturePosition trade = sut(); PortfolioItemSummary expected = PortfolioItemSummary.builder() .id(POSITION_INFO.getId().orElse(null)) .portfolioItemType(PortfolioItemType.POSITION) .productType(ProductType.ETD_FUTURE) .currencies(SECURITY.getCurrency()) .description(SECURITY.getSecurityId().getStandardId().getValue() + " x 1000, Jun17") .build(); assertEquals(trade.summarize(), expected); }
public void test_resolveTarget() { GenericSecurity security = GenericSecurity.of(SECURITY.getInfo()); Trade test = sut().resolveTarget(ImmutableReferenceData.of(SECURITY.getSecurityId(), security)); GenericSecurityTrade expected = GenericSecurityTrade.of(TRADE_INFO, security, 3000, 20); assertEquals(test, expected); }
@Override public PortfolioItemSummary summarize() { // F-ECAG-FGBS-201706 x 200, Jun17 String future = security.summaryDescription(); String description = getSecurityId().getStandardId().getValue() + " x " + SummarizerUtils.value(getQuantity()) + ", " + future; return SummarizerUtils.summary(this, ProductType.ETD_FUTURE, description, getCurrency()); }
static EtdFutureSecurity sut() { return EtdFutureSecurity.builder() .info(SecurityInfo.of(SecurityId.of("A", "B"), SecurityPriceInfo.of(Currency.GBP, 100))) .contractSpecId(EtdContractSpecId.of("test", "123")) .expiry(YearMonth.of(2017, 6)) .build(); }
.id(StandardId.of("OG", "123421")) .build()) .security(EtdFutureSecurity.of(contract, YearMonth.of(2017, 6), EtdVariant.ofMonthly())) .longQuantity(15d) .shortQuantity(2d) .id(StandardId.of("OG", "123422")) .build()) .security(EtdFutureSecurity.of(contract, YearMonth.of(2017, 6), EtdVariant.ofFlexFuture(13, EtdSettlementType.CASH))) .longQuantity(0d) .shortQuantity(13d) .id(StandardId.of("OG", "123423")) .build()) .security(EtdFutureSecurity.of(contract, YearMonth.of(2017, 6), EtdVariant.ofWeekly(2))) .longQuantity(0d) .shortQuantity(20d) .id(StandardId.of("OG", "123424")) .build()) .security(EtdFutureSecurity.of(contract, YearMonth.of(2017, 6), EtdVariant.ofDaily(3))) .longQuantity(30d) .shortQuantity(0d)
@Override protected Object propertyGet(Bean bean, String propertyName, boolean quiet) { switch (propertyName.hashCode()) { case 3237038: // info return ((EtdFutureSecurity) bean).getInfo(); case 948987368: // contractSpecId return ((EtdFutureSecurity) bean).getContractSpecId(); case -1289159373: // expiry return ((EtdFutureSecurity) bean).getExpiry(); case 236785797: // variant return ((EtdFutureSecurity) bean).getVariant(); } return super.propertyGet(bean, propertyName, quiet); }
public void test_summarize() { EtdFutureTrade trade = sut(); PortfolioItemSummary expected = PortfolioItemSummary.builder() .portfolioItemType(PortfolioItemType.TRADE) .productType(ProductType.ETD_FUTURE) .currencies(SECURITY.getCurrency()) .description(SECURITY.getSecurityId().getStandardId().getValue() + " x 3000, Jun17") .build(); assertEquals(trade.summarize(), expected); }
@Override public PortfolioItemSummary summarize() { // F-ECAG-FGBS-201706 x 200, Jun17 String future = security.summaryDescription(); String description = getSecurityId().getStandardId().getValue() + " x " + SummarizerUtils.value(getQuantity()) + ", " + future; return SummarizerUtils.summary(this, ProductType.ETD_FUTURE, description, getCurrency()); }
static EtdFutureSecurity sut2() { return EtdFutureSecurity.builder() .info(SecurityInfo.of(SecurityId.of("B", "C"), SecurityPriceInfo.of(Currency.EUR, 10))) .contractSpecId(EtdContractSpecId.of("test", "234")) .expiry(YearMonth.of(2017, 9)) .variant(EtdVariant.ofWeekly(2)) .build(); }
public void test_methods() { EtdFuturePosition test = sut(); assertEquals(test.getType(), EtdType.FUTURE); assertEquals(test.getCurrency(), Currency.GBP); assertEquals(test.getSecurityId(), test.getSecurity().getSecurityId()); assertEquals(test.getQuantity(), 1000d, 0d); }