/** * Copyright (C) 2009 - present by OpenGamma Inc. and the OpenGamma group of companies * * Please see distribution for license. */ package com.opengamma.financial.analytics.model.equity.portfoliotheory; import java.util.HashSet; import java.util.Set; import com.opengamma.core.value.MarketDataRequirementNames; import com.opengamma.engine.ComputationTarget; import com.opengamma.engine.function.AbstractFunction; import com.opengamma.engine.function.FunctionCompilationContext; import com.opengamma.engine.function.FunctionExecutionContext; import com.opengamma.engine.function.FunctionInputs; import com.opengamma.engine.target.ComputationTargetType; import com.opengamma.engine.value.ComputedValue; 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.engine.value.ValueSpecification; import com.opengamma.financial.security.FinancialSecurityTypes; import com.opengamma.financial.security.equity.EquitySecurity; /** * The Standard Equity Model Function simply returns the market value for any cash Equity security. * Produces two aliases - MARKET_VALUE and FAIR_VALUE ValueRequirementNames, both equal to the Market_Value requirement. */ public class StandardEquityModelFunction extends AbstractFunction.NonCompiledInvoker { @Override public Set<ComputedValue> execute(final FunctionExecutionContext executionContext, final FunctionInputs inputs, final ComputationTarget target, final Set<ValueRequirement> desiredValues) { final EquitySecurity equity = (EquitySecurity) target.getSecurity(); final double price = (Double) inputs.getValue( new ValueRequirement( MarketDataRequirementNames.MARKET_VALUE, ComputationTargetType.SECURITY, equity.getUniqueId())); final Set<ComputedValue> result = new HashSet<>(); final ValueProperties properties = createValueProperties().with(ValuePropertyNames.CURRENCY, equity.getCurrency().getCode()).get(); result.add(new ComputedValue(new ValueSpecification(ValueRequirementNames.FAIR_VALUE, target.toSpecification(), properties), price)); result.add(new ComputedValue(new ValueSpecification(ValueRequirementNames.PRESENT_VALUE, target.toSpecification(), properties), price)); return result; } @Override public Set<ValueRequirement> getRequirements(final FunctionCompilationContext context, final ComputationTarget target, final ValueRequirement desiredValue) { final EquitySecurity equity = (EquitySecurity) target.getSecurity(); final Set<ValueRequirement> requirements = new HashSet<ValueRequirement>(); requirements.add(new ValueRequirement(MarketDataRequirementNames.MARKET_VALUE, ComputationTargetType.SECURITY, equity.getUniqueId())); return requirements; } @Override public Set<ValueSpecification> getResults(final FunctionCompilationContext context, final ComputationTarget target) { final EquitySecurity equity = (EquitySecurity) target.getSecurity(); final Set<ValueSpecification> result = new HashSet<>(); final ValueProperties properties = createValueProperties().with(ValuePropertyNames.CURRENCY, equity.getCurrency().getCode()).get(); result.add(new ValueSpecification(ValueRequirementNames.FAIR_VALUE, target.toSpecification(), properties)); result.add(new ValueSpecification(ValueRequirementNames.PRESENT_VALUE, target.toSpecification(), properties)); return result; } @Override public ComputationTargetType getTargetType() { return FinancialSecurityTypes.EQUITY_SECURITY; } }