Skip to content

Instantly share code, notes, and snippets.

@Vineeth-Mohan
Created May 14, 2012 19:04
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save Vineeth-Mohan/2695741 to your computer and use it in GitHub Desktop.
Save Vineeth-Mohan/2695741 to your computer and use it in GitHub Desktop.
package com.opengamma.examples.function;
import java.util.Collections;
import java.util.HashSet;
import java.util.Set;
import org.apache.commons.lang.Validate;
import com.opengamma.analytics.financial.equity.future.pricing.EquityFuturePricerFactory;
import com.opengamma.analytics.financial.equity.future.pricing.EquityFuturesPricingMethod;
import com.opengamma.core.value.MarketDataRequirementNames;
import com.opengamma.engine.ComputationTarget;
import com.opengamma.engine.ComputationTargetType;
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.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.equity.EquitySecurity;
/**
* The Standard Equity Model Function simply returns the market value for any cash Equity security.
*/
public class MyFunction extends AbstractFunction.NonCompiledInvoker {
// public MyFunction(final String valueRequirementName, final String pricingMethodName, final String fundingCurveName) {
// System.out.println("VINEETH " + valueRequirementName + " " + pricingMethodName + " " + fundingCurveName);
// }
@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()));
// TODO this needs to annotate the result value with the currency of the value.
return Collections.<ComputedValue>singleton(
new ComputedValue(
new ValueSpecification(
new ValueRequirement(ValueRequirementNames.VineethCustomValue, ComputationTargetType.SECURITY, equity.getUniqueId(),
ValueProperties.with(ValuePropertyNames.CURRENCY, equity.getCurrency().getCode()).get()),
getUniqueId()),
price));
}
@Override
public boolean canApplyTo(final FunctionCompilationContext context, final ComputationTarget target) {
if (target.getType() != ComputationTargetType.SECURITY) {
return false;
}
if (target.getSecurity() instanceof EquitySecurity) {
return true;
}
return false;
}
@Override
public Set<ValueRequirement> getRequirements(final FunctionCompilationContext context, final ComputationTarget target, final ValueRequirement desiredValue) {
if (canApplyTo(context, target)) {
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;
}
return null;
}
@Override
public Set<ValueSpecification> getResults(final FunctionCompilationContext context, final ComputationTarget target) {
if (canApplyTo(context, target)) {
final EquitySecurity equity = (EquitySecurity) target.getSecurity();
return Collections.<ValueSpecification>singleton(
new ValueSpecification(new ValueRequirement(ValueRequirementNames.VineethCustomValue,
ComputationTargetType.SECURITY,
equity.getUniqueId(),
ValueProperties.with(ValuePropertyNames.CURRENCY,
equity.getCurrency().getCode()).get()),
getUniqueId()));
}
return null;
}
@Override
public String getShortName() {
return ValueRequirementNames.VineethCustomValue;
}
@Override
public ComputationTargetType getTargetType() {
return ComputationTargetType.SECURITY;
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment