package uk.ac.cam.cstibhotel.otcanalyser.trade; import java.util.Date; import java.util.logging.Level; import java.util.logging.Logger; public class Trade implements Comparable<Trade> { // The fields in here are a direct copy of the fields of a trade taken // from the OTC repository private long disseminationID; private long originalDisseminationID; private Action action; private Date executionTimestamp; private Boolean cleared; private Collateralization collateralization; private Boolean endUserException; private Boolean bespoke; private Boolean executionVenue; // true for ON, false for OFF private Boolean blockTrades; private Date effectiveDate; private Date endDate; private String dayCountConvention; // e.g. ACT/360 and 1/1 30/360 private String settlementCurrency; private TradeType tradeType; private AssetClass assetClass; private String subAssetClass; private UPI taxonomy; private PriceFormingContinuationData priceFormingContinuationData; private String underlyingAsset1; private String underlyingAsset2; private String priceNotationType; private Double priceNotation; private String additionalPriceNotationType; private Double additionalPriceNotation; private String notionalCurrency1; private String notionalCurrency2; //TODO: Not sure about the types in the upcoming fields private long roundedNotionalAmount1; private long roundedNotionalAmount2; private String paymentFrequency1; //e.g. 3M, 1M, 0, but also dates like 2016-01-29 private String paymentFrequency2; //e.g. 1D, 1T, 1M private String resetFrequency1; //e.g. 2024-10-10 private String resetFrequency2; //e.g. 1D, 1M, 1T private String embeddedOption; //e.g. EMBED1 // Options private Double optionStrikePrice; private String optionType; private String optionFamily; private String optionCurrency; private Double optionPremium; //e.g. 0.00034 and 90250 private Date optionLockPeriod; private Date optionExpirationDate; private String priceNotation2Type; private Double priceNotation2; private String priceNotation3Type; private Double priceNotation3; public Trade() { // Sets defaults on all enum and objects // Necessary to avoid a lot of try-catch for NPEs in Database action = Action.NEW; executionTimestamp = null; collateralization = Collateralization.BLANK; effectiveDate = null; endDate = null; settlementCurrency = ""; tradeType = TradeType.OPTION; assetClass = AssetClass.COMMODITY; subAssetClass = ""; try { taxonomy = new UPI("ForeignExchange:ForeignExchange:Bar"); } catch (InvalidTaxonomyException ex) { Logger.getLogger(Trade.class.getName()).log(Level.SEVERE, null, ex); } catch (EmptyTaxonomyException e) { // TODO Auto-generated catch block e.printStackTrace(); } priceFormingContinuationData = PriceFormingContinuationData.TRADE; notionalCurrency1 = ""; notionalCurrency2 = ""; optionCurrency = ""; optionLockPeriod = null; optionExpirationDate = null; priceNotation = new Double(0); priceNotation2 = new Double(0); priceNotation3 = new Double(0); additionalPriceNotation = new Double(0); optionStrikePrice = new Double(0); optionPremium = new Double(0); } public void setDisseminationID(long disseminationID) { this.disseminationID = disseminationID; } public void setOriginalDisseminationID(long originalDisseminationID) { this.originalDisseminationID = originalDisseminationID; } public void setAction(Action action) { this.action = action; } public void setExecutionTimestamp(Date executionTimestamp) { this.executionTimestamp = executionTimestamp; } public void setCleared(Boolean cleared) { this.cleared = cleared; } public void setCollateralization(Collateralization collateralization) { this.collateralization = collateralization; } public void setEndUserException(Boolean endUserException) { this.endUserException = endUserException; } public void setBespoke(Boolean bespoke) { this.bespoke = bespoke; } public void setExecutionVenue(Boolean executionVenue) { this.executionVenue = executionVenue; } public void setBlockTrades(Boolean blockTrades) { this.blockTrades = blockTrades; } public void setEffectiveDate(Date effectiveDate) { this.effectiveDate = effectiveDate; } public void setEndDate(Date endDate) { this.endDate = endDate; } public void setDayCountConvention(String dayCountConvention) { this.dayCountConvention = dayCountConvention; } public void setSettlementCurrency(String settlementCurrency) { this.settlementCurrency = settlementCurrency; } public void setTradeType(TradeType tradeType) { this.tradeType = tradeType; } public void setAssetClass(AssetClass assetClass) { this.assetClass = assetClass; } public void setSubAssetClass(String subAssetClass) { this.subAssetClass = subAssetClass; } public void setTaxonomy(UPI taxonomy) { this.taxonomy = taxonomy; } public void setPriceFormingContinuationData(PriceFormingContinuationData priceFormingContinuationData) { this.priceFormingContinuationData = priceFormingContinuationData; } public void setUnderlyingAsset1(String underlyingAsset1) { this.underlyingAsset1 = underlyingAsset1; } public void setUnderlyingAsset2(String underlyingAsset2) { this.underlyingAsset2 = underlyingAsset2; } public void setPriceNotationType(String priceNotationType) { this.priceNotationType = priceNotationType; } public void setPriceNotation(Double priceNotation) { this.priceNotation = priceNotation; } public void setAdditionalPriceNotationType(String additionalPriceNotationType) { this.additionalPriceNotationType = additionalPriceNotationType; } public void setAdditionalPriceNotation(Double additionalPriceNotation) { this.additionalPriceNotation = additionalPriceNotation; } public void setNotionalCurrency1(String notionalCurrency1) { this.notionalCurrency1 = notionalCurrency1; } public void setNotionalCurrency2(String notionalCurrency2) { this.notionalCurrency2 = notionalCurrency2; } public void setRoundedNotionalAmount1(long roundedNotionalAmount1) { this.roundedNotionalAmount1 = roundedNotionalAmount1; } public void setRoundedNotionalAmount2(long roundedNotionalAmount2) { this.roundedNotionalAmount2 = roundedNotionalAmount2; } public void setPaymentFrequency1(String paymentFrequency1) { this.paymentFrequency1 = paymentFrequency1; } public void setPaymentFrequency2(String paymentFrequency2) { this.paymentFrequency2 = paymentFrequency2; } public void setResetFrequency1(String resetFrequency1) { this.resetFrequency1 = resetFrequency1; } public void setResetFrequency2(String resetFrequency2) { this.resetFrequency2 = resetFrequency2; } public void setEmbeddedOption(String embeddedOption) { this.embeddedOption = embeddedOption; } public void setOptionStrikePrice(Double optionStrikePrice) { this.optionStrikePrice = optionStrikePrice; } public void setOptionType(String optionType) { this.optionType = optionType; } public void setOptionFamily(String optionFamily) { this.optionFamily = optionFamily; } public void setOptionCurrency(String optionCurrency) { this.optionCurrency = optionCurrency; } public void setOptionPremium(Double optionPremium) { this.optionPremium = optionPremium; } public void setOptionLockPeriod(Date optionLockPeriod) { this.optionLockPeriod = optionLockPeriod; } public void setOptionExpirationDate(Date optionExpirationDate) { this.optionExpirationDate = optionExpirationDate; } public void setPriceNotation2Type(String priceNotation2Type) { this.priceNotation2Type = priceNotation2Type; } public void setPriceNotation2(Double priceNotation2) { this.priceNotation2 = priceNotation2; } public void setPriceNotation3Type(String priceNotation3Type) { this.priceNotation3Type = priceNotation3Type; } public void setPriceNotation3(Double priceNotation3) { this.priceNotation3 = priceNotation3; } public long getDisseminationID() { return disseminationID; } public long getOriginalDisseminationID() { return originalDisseminationID; } public Action getAction() { return action; } public Boolean isCleared() { return cleared; } public Date getExecutionTimestamp() { return executionTimestamp; } public Collateralization getCollateralization() { return collateralization; } public Boolean isEndUserException() { return endUserException; } public Boolean isBespoke() { return bespoke; } public Boolean isExecutionVenue() { return executionVenue; } public Boolean isBlockTrades() { return blockTrades; } public Date getEffectiveDate() { return effectiveDate; } public Date getEndDate() { return endDate; } public String getDayCountConvention() { return dayCountConvention; } public String getSettlementCurrency() { return settlementCurrency; } public TradeType getTradeType() { return tradeType; } public AssetClass getAssetClass() { return assetClass; } public String getSubAssetClass() { return subAssetClass; } public UPI getTaxonomy() { return taxonomy; } public PriceFormingContinuationData getPriceFormingContinuationData() { return priceFormingContinuationData; } public String getUnderlyingAsset1() { return underlyingAsset1; } public String getUnderlyingAsset2() { return underlyingAsset2; } public String getPriceNotationType() { return priceNotationType; } public Double getPriceNotation() { return priceNotation; } public String getAdditionalPriceNotationType() { return additionalPriceNotationType; } public Double getAdditionalPriceNotation() { return additionalPriceNotation; } public String getNotionalCurrency1() { return notionalCurrency1; } public String getNotionalCurrency2() { return notionalCurrency2; } public long getRoundedNotionalAmount1() { return roundedNotionalAmount1; } public long getRoundedNotionalAmount2() { return roundedNotionalAmount2; } public String getPaymentFrequency1() { return paymentFrequency1; } public String getPaymentFrequency2() { return paymentFrequency2; } public String getResetFrequency1() { return resetFrequency1; } public String getResetFrequency2() { return resetFrequency2; } public String getEmbeddedOption() { return embeddedOption; } public Double getOptionStrikePrice() { return optionStrikePrice; } public String getOptionType() { return optionType; } public String getOptionFamily() { return optionFamily; } public String getOptionCurrency() { return optionCurrency; } public Double getOptionPremium() { return optionPremium; } public Date getOptionLockPeriod() { return optionLockPeriod; } public Date getOptionExpirationDate() { return optionExpirationDate; } public String getPriceNotation2Type() { return priceNotation2Type; } public Double getPriceNotation2() { return priceNotation2; } public String getPriceNotation3Type() { return priceNotation3Type; } public Double getPriceNotation3() { return priceNotation3; } @Override public int compareTo(Trade trade2) { return (int) (this.getDisseminationID() - trade2.getDisseminationID()); } }