/**
* Copyright (C) 2012 - present by OpenGamma Inc. and the OpenGamma group of companies
*
* Please see distribution for license.
*/
package com.opengamma.financial.analytics.model.future;
import java.util.Set;
import com.opengamma.analytics.financial.future.MarkToMarketFuturesCalculator;
import com.opengamma.analytics.financial.simpleinstruments.pricing.SimpleFutureDataBundle;
import com.opengamma.engine.ComputationTarget;
import com.opengamma.engine.function.FunctionCompilationContext;
import com.opengamma.engine.function.FunctionInputs;
import com.opengamma.engine.value.ValueProperties;
import com.opengamma.engine.value.ValuePropertyNames;
import com.opengamma.engine.value.ValueRequirement;
import com.opengamma.engine.value.ValueRequirementNames;
import com.opengamma.financial.analytics.timeseries.HistoricalTimeSeriesBundle;
import com.opengamma.financial.security.future.FutureSecurity;
/**
*
*/
public class MarkToMarketSpotFuturesFunction extends MarkToMarketFuturesFunction<Double> {
/**
* @param closingPriceField The field name of the historical time series for price, e.g. "PX_LAST", "Close". Set in *FunctionConfiguration
* @param costOfCarryField The field name of the historical time series for cost of carry e.g. "COST_OF_CARRY". Set in *FunctionConfiguration
* @param resolutionKey The key defining how the time series resolution is to occur e.g. "DEFAULT_TSS_CONFIG"
*/
public MarkToMarketSpotFuturesFunction(final String closingPriceField, final String costOfCarryField, final String resolutionKey) {
super(ValueRequirementNames.SPOT, MarkToMarketFuturesCalculator.SpotPriceCalculator.getInstance(), closingPriceField, costOfCarryField, resolutionKey);
}
@Override
public Set<ValueRequirement> getRequirements(final FunctionCompilationContext context, final ComputationTarget target, final ValueRequirement desiredValue) {
final Set<ValueRequirement> requirements = super.getRequirements(context, target, desiredValue);
if (requirements == null) {
return null;
}
final FutureSecurity security = (FutureSecurity) target.getTrade().getSecurity();
final ValueRequirement spotAssetRequirement = getSpotAssetRequirement(security);
if (spotAssetRequirement != null) {
requirements.add(spotAssetRequirement);
}
return requirements;
}
@Override
protected SimpleFutureDataBundle getFutureDataBundle(final FutureSecurity security, final FunctionInputs inputs,
final HistoricalTimeSeriesBundle timeSeriesBundle, final ValueRequirement desiredValue) {
final Double marketPrice = getMarketPrice(security, inputs);
final Double spotUnderlyer = getSpot(inputs);
return new SimpleFutureDataBundle(null, marketPrice, spotUnderlyer, null, null);
}
@Override
protected ValueProperties.Builder createValueProperties(final ComputationTarget target) {
return super.createValueProperties(target)
.withoutAny(ValuePropertyNames.CURRENCY);
}
}