Package com.opengamma.analytics.financial.model.option.pricing.montecarlo

Source Code of com.opengamma.analytics.financial.model.option.pricing.montecarlo.MonteCarloOptionModel

/**
* Copyright (C) 2009 - present by OpenGamma Inc. and the OpenGamma group of companies
*
* Please see distribution for license.
*/
package com.opengamma.analytics.financial.model.option.pricing.montecarlo;

import java.util.Set;

import org.apache.commons.lang.Validate;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import com.opengamma.analytics.financial.greeks.Greek;
import com.opengamma.analytics.financial.greeks.GreekResultCollection;
import com.opengamma.analytics.financial.model.option.definition.OptionDefinition;
import com.opengamma.analytics.financial.model.option.definition.StandardOptionDataBundle;
import com.opengamma.analytics.financial.model.option.pricing.OptionModel;
import com.opengamma.analytics.financial.model.stochastic.StochasticProcess;
import com.opengamma.analytics.math.function.Function1D;
import com.opengamma.analytics.math.random.RandomNumberGenerator;
import com.opengamma.util.ArgumentChecker;

/**
*
* @param <T>
* @param <U>
*/
public abstract class MonteCarloOptionModel<T extends OptionDefinition, U extends StandardOptionDataBundle> implements OptionModel<T, U> {
  private static final Logger s_logger = LoggerFactory.getLogger(MonteCarloOptionModel.class);
  private final int _n;
  private final int _steps;
  private final StochasticProcess<T, U> _process;
  private final RandomNumberGenerator _generator;

  public MonteCarloOptionModel(final int n, final int steps, final StochasticProcess<T, U> process, final RandomNumberGenerator generator) {
    ArgumentChecker.notNegativeOrZero(n, "n");
    ArgumentChecker.notNegativeOrZero(steps, "steps");
    Validate.notNull(process, "process");
    Validate.notNull(generator, "generator");
    _n = n;
    _steps = steps;
    _process = process;
    _generator = generator;
  }

  @Override
  public GreekResultCollection getGreeks(final T definition, final U data, final Set<Greek> requiredGreeks) {
    Validate.notNull(definition, "definition");
    Validate.notNull(data, "data");
    Validate.notNull(requiredGreeks, "required greeks");
    Validate.notEmpty(requiredGreeks, "required greeks");
    if (requiredGreeks.contains(Greek.FAIR_PRICE)) {
      if (requiredGreeks.size() > 1) {
        s_logger.warn("Can only produce fair price");
      }
    } else {
      throw new IllegalArgumentException("Can only produce fair price");
    }
    final GreekResultCollection greeks = new GreekResultCollection();
    final Function1D<U, Double> price = getPricingFunction(definition);
    greeks.put(Greek.FAIR_PRICE, price.evaluate(data));
    return greeks;
  }

  public abstract Function1D<U, Double> getPricingFunction(T definition);

  protected int getN() {
    return _n;
  }

  protected int getSteps() {
    return _steps;
  }

  protected StochasticProcess<T, U> getProcess() {
    return _process;
  }

  protected RandomNumberGenerator getGenerator() {
    return _generator;
  }

}
TOP

Related Classes of com.opengamma.analytics.financial.model.option.pricing.montecarlo.MonteCarloOptionModel

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.