Skip to content

Instantly share code, notes, and snippets.

@febintt
Created December 24, 2013 06:20
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 febintt/8109485 to your computer and use it in GitHub Desktop.
Save febintt/8109485 to your computer and use it in GitHub Desktop.
Market value function.
/**
* Copyright (C) 2009 - present by OpenGamma Inc. and the OpenGamma group of companies
*
* Please see distribution for license.
*/
package com.opengamma.algotree.function;
import java.util.Collections;
import java.util.Set;
import com.opengamma.core.historicaltimeseries.HistoricalTimeSeries;
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.ValuePropertyNames;
import com.opengamma.engine.value.ValueRequirement;
import com.opengamma.engine.value.ValueSpecification;
import com.opengamma.financial.OpenGammaCompilationContext;
import com.opengamma.financial.analytics.timeseries.HistoricalTimeSeriesFunctionUtils;
import com.opengamma.financial.security.equity.EquitySecurity;
import com.opengamma.master.historicaltimeseries.HistoricalTimeSeriesResolutionResult;
import com.opengamma.master.historicaltimeseries.HistoricalTimeSeriesResolver;
/**
* Algotree market value function.
*/
public class CustomMarketValueFunction extends
AbstractFunction.NonCompiledInvoker {
/** data field name in the time series which is required to calculate the market value. */
public static final String VALUE_NAME = "CLOSE";
@Override
public boolean canApplyTo(final FunctionCompilationContext context,
final ComputationTarget target) {
return target.getSecurity() instanceof EquitySecurity;
}
@Override
public String getShortName() {
return CustomValueRequirementNames.CUSTOM_MARKET_VALUE;
}
@Override
public ComputationTargetType getTargetType() {
return ComputationTargetType.SECURITY;
}
@Override
public Set<ValueRequirement> getRequirements(
final FunctionCompilationContext context, final ComputationTarget target,
final ValueRequirement desiredValue) {
final HistoricalTimeSeriesResolver resolver = OpenGammaCompilationContext
.getHistoricalTimeSeriesResolver(context);
final String fieldName = VALUE_NAME;
final HistoricalTimeSeriesResolutionResult timeSeries = resolver.resolve(
target.getSecurity().getExternalIdBundle(), null, null, null,
fieldName, null);
if (timeSeries == null) {
return null;
}
return Collections.singleton(HistoricalTimeSeriesFunctionUtils
.createHTSRequirement(timeSeries, fieldName, null, true,
null, true));
}
@Override
public Set<ValueSpecification> getResults(
final FunctionCompilationContext context, final ComputationTarget target) {
final EquitySecurity equity = (EquitySecurity) target.getSecurity();
return Collections.singleton(new ValueSpecification(CustomValueRequirementNames.CUSTOM_MARKET_VALUE,
target.toSpecification(), createValueProperties().with(ValuePropertyNames.CURRENCY, equity.getCurrency().getCode()).get()));
}
@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 HistoricalTimeSeries hts = (HistoricalTimeSeries) inputs
.getAllValues().iterator().next().getValue();
final ValueRequirement desiredValue = desiredValues.iterator().next();
System.out.println("Desired value in execution fun: " + desiredValue.toString());
return Collections.singleton(new ComputedValue(new ValueSpecification(
desiredValue.getValueName(), target.toSpecification(),
createValueProperties().with(ValuePropertyNames.CURRENCY, equity.getCurrency().getCode()).get()), hts.getTimeSeries().getLatestValue()));
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment