Created
December 24, 2013 06:20
-
-
Save febintt/8109485 to your computer and use it in GitHub Desktop.
Market value function.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/** | |
* 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