Skip to content

Commit

Permalink
Merge pull request #93 from Julius278/feature/626
Browse files Browse the repository at this point in the history
SDC-626,
  • Loading branch information
Julius278 authored Sep 27, 2024
2 parents d87abec + 89edcf3 commit 7847d93
Show file tree
Hide file tree
Showing 3 changed files with 22 additions and 3 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ public class ValuationConfig {
private boolean liveMarketData;
private String settlementCurrency;
private String liveMarketDataProvider;
private String internalMarketDataProvider;

public boolean isLiveMarketData() {
return liveMarketData;
Expand All @@ -34,4 +35,12 @@ public String getLiveMarketDataProvider() {
public void setLiveMarketDataProvider(String liveMarketDataProvider) {
this.liveMarketDataProvider = liveMarketDataProvider;
}

public String getInternalMarketDataProvider() {
return internalMarketDataProvider;
}

public void setInternalMarketDataProvider(String internalMarketDataProvider) {
this.internalMarketDataProvider = internalMarketDataProvider;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -43,12 +43,14 @@ public SettlementService(RefinitivConfig refinitivConfig, ValuationConfig valuat
}

public RegularSettlementResult generateRegularSettlementResult(RegularSettlementRequest regularSettlementRequest) {

logger.info("Generating regular settlement result, liveData: {}, now parsing trade data", valuationConfig.isLiveMarketData());
SmartDerivativeContractDescriptor sdc = parseProductData(regularSettlementRequest.getTradeData());
logger.info("sdc trade id: {}, product marketdata provider: {}, valuation service marketdata provider: {}", sdc.getDltTradeId(), sdc.getMarketDataProvider(), valuationConfig.getLiveMarketDataProvider());
MarketDataList newMarketDataList = retrieveMarketData(sdc);
String newMarketDataString = SDCXMLParser.marshalClassToXMLString(newMarketDataList);
Settlement settlementLast = SDCXMLParser.unmarshalXml(regularSettlementRequest.getSettlementLast(), Settlement.class);
String marketDataLastString = SDCXMLParser.marshalClassToXMLString(settlementLast.getMarketData());
logger.info("newMarketDataString: {}", newMarketDataString);

ZonedDateTime settlementTimeNext = ZonedDateTime.now().plusDays(1);

Expand Down Expand Up @@ -77,10 +79,12 @@ public RegularSettlementResult generateRegularSettlementResult(RegularSettlement
}

public InitialSettlementResult generateInitialSettlementResult(InitialSettlementRequest initialSettlementRequest) {

logger.info("Generating initial settlement result, liveData: {}, now parsing trade data", valuationConfig.isLiveMarketData());
SmartDerivativeContractDescriptor sdc = parseProductData(initialSettlementRequest.getTradeData());
logger.info("sdc trade id: {}, product marketdata provider: {}, valuation service marketdata provider: {}", sdc.getDltTradeId(), sdc.getMarketDataProvider(), valuationConfig.getLiveMarketDataProvider());
MarketDataList newMarketDataList = retrieveMarketData(sdc);
String newMarketDataString = SDCXMLParser.marshalClassToXMLString(newMarketDataList);
logger.info("newMarketDataString: {}", newMarketDataString);

ZonedDateTime settlementTimeNext = ZonedDateTime.now().plusDays(1);

Expand Down Expand Up @@ -118,15 +122,19 @@ private static SmartDerivativeContractDescriptor parseProductData(String tradeDa

private MarketDataList retrieveMarketData(SmartDerivativeContractDescriptor sdc) {
AtomicReference<MarketDataList> marketDataList = new AtomicReference<>(new MarketDataList());
logger.info("retrieveMarketData started for trade: {}", sdc.getDltTradeId());

if (sdc.getMarketDataProvider().equals(valuationConfig.getLiveMarketDataProvider()) && valuationConfig.isLiveMarketData()) {
marketDataList.set(MarketDataGeneratorLauncher.instantiateMarketDataGeneratorWebsocket(initConnectionProperties(), sdc));
} else {
} else if (sdc.getMarketDataProvider().equals(valuationConfig.getInternalMarketDataProvider())) {
//includes provider internal or no liveMarketData activated
final io.reactivex.rxjava3.functions.Consumer<MarketDataList> marketDataWriter = marketDataList::set;
marketDataServiceScenarioList.asObservable().subscribe(marketDataWriter, //onNext
throwable -> logger.error("unable to generate marketData from files ", throwable), //onError
() -> logger.info("on complete, simulated marketData generated from files")); //onComplete
} else {
throw new SDCException(ExceptionId.SDC_WRONG_INPUT,
"Product data XML is not compatible with valuation service configuration, see logs for further investigation", 400);
}
return marketDataList.get();
}
Expand Down
2 changes: 2 additions & 0 deletions src/main/resources/application.yml
Original file line number Diff line number Diff line change
Expand Up @@ -54,6 +54,8 @@ storage:

valuation:
live-marketdata: false
live-market-data-provider: "refinitiv"
internal-market-data-provider: "internal"
settlement-currency: "EUR"

refinitiv:
Expand Down

0 comments on commit 7847d93

Please sign in to comment.