Package com.opengamma.financial.analytics.fudgemsg

Source Code of com.opengamma.financial.analytics.fudgemsg.ForexOptionDataBundleBuilders$BlackForexTermStructureParametersBuilder

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

import org.fudgemsg.FudgeMsg;
import org.fudgemsg.MutableFudgeMsg;
import org.fudgemsg.mapping.FudgeBuilderFor;
import org.fudgemsg.mapping.FudgeDeserializer;
import org.fudgemsg.mapping.FudgeSerializer;

import com.opengamma.analytics.financial.model.option.definition.SmileDeltaParameters;
import com.opengamma.analytics.financial.model.volatility.curve.BlackForexTermStructureParameters;
import com.opengamma.analytics.financial.model.volatility.surface.SmileDeltaTermStructureParameters;
import com.opengamma.analytics.financial.model.volatility.surface.SmileDeltaTermStructureParametersStrikeInterpolation;
import com.opengamma.analytics.math.curve.DoublesCurve;
import com.opengamma.analytics.math.interpolation.Interpolator1D;

/**
*
*/
/* package */ class ForexOptionDataBundleBuilders {

  @FudgeBuilderFor(SmileDeltaTermStructureParametersStrikeInterpolation.class)
  public static class SmileDeltaTermStructureParameterStrikeInterpolationBuilder extends AbstractFudgeBuilder<SmileDeltaTermStructureParametersStrikeInterpolation> {
    private static final String T_DATA_FIELD_NAME = "Time data";
    private static final String DELTA_DATA_FIELD_NAME = "Delta data";
    private static final String VOLATILITY_DATA_FIELD_NAME = "Volatility data";
    private static final String TIME_INTERPOLATOR_NAME = "Time Interpolator";
    private static final String STRIKE_INTERPOLATOR_NAME = "Strike Interpolator";

    @Override
    public SmileDeltaTermStructureParametersStrikeInterpolation buildObject(final FudgeDeserializer deserializer, final FudgeMsg message) {
      final double[] t = deserializer.fieldValueToObject(double[].class, message.getByName(T_DATA_FIELD_NAME));
      final double[][] delta = deserializer.fieldValueToObject(double[][].class, message.getByName(DELTA_DATA_FIELD_NAME));
      final double[][] volatility = deserializer.fieldValueToObject(double[][].class, message.getByName(VOLATILITY_DATA_FIELD_NAME));
      final int n = t.length;
      final SmileDeltaParameters[] smiles = new SmileDeltaParameters[n];
      for (int i = 0; i < n; i++) {
        smiles[i] = new SmileDeltaParameters(t[i], delta[i], volatility[i]);
      }
      final Interpolator1D strikeInterpolator = deserializer.fieldValueToObject(Interpolator1D.class, message.getByName(STRIKE_INTERPOLATOR_NAME));
      final Interpolator1D timeInterpolator = deserializer.fieldValueToObject(Interpolator1D.class, message.getByName(TIME_INTERPOLATOR_NAME));
      return new SmileDeltaTermStructureParametersStrikeInterpolation(smiles, strikeInterpolator, timeInterpolator);
    }

    @Override
    protected void buildMessage(final FudgeSerializer serializer, final MutableFudgeMsg message, final SmileDeltaTermStructureParametersStrikeInterpolation object) {
      final SmileDeltaParameters[] smiles = object.getVolatilityTerm();
      final int n = smiles.length;
      final double[] t = new double[n];
      final double[][] delta = new double[n][];
      final double[][] volatility = new double[n][];
      for (int i = 0; i < n; i++) {
        t[i] = smiles[i].getTimeToExpiry();
        delta[i] = smiles[i].getDelta();
        volatility[i] = smiles[i].getVolatility();
      }
      serializer.addToMessage(message, T_DATA_FIELD_NAME, null, t);
      serializer.addToMessage(message, DELTA_DATA_FIELD_NAME, null, delta);
      serializer.addToMessage(message, VOLATILITY_DATA_FIELD_NAME, null, volatility);
      serializer.addToMessage(message, STRIKE_INTERPOLATOR_NAME, null, object.getStrikeInterpolator());
      serializer.addToMessage(message, TIME_INTERPOLATOR_NAME, null, object.getTimeInterpolator());
    }
  }

  @FudgeBuilderFor(SmileDeltaTermStructureParameters.class)
  public static class SmileDeltaTermStructureParameterBuilder extends AbstractFudgeBuilder<SmileDeltaTermStructureParameters> {
    private static final String T_DATA_FIELD_NAME = "Time data";
    private static final String DELTA_DATA_FIELD_NAME = "Delta data";
    private static final String VOLATILITY_DATA_FIELD_NAME = "Volatility data";
    private static final String TIME_INTERPOLATOR_NAME = "Time Interpolator";

    @Override
    public SmileDeltaTermStructureParameters buildObject(final FudgeDeserializer deserializer, final FudgeMsg message) {
      final double[] t = deserializer.fieldValueToObject(double[].class, message.getByName(T_DATA_FIELD_NAME));
      final double[][] delta = deserializer.fieldValueToObject(double[][].class, message.getByName(DELTA_DATA_FIELD_NAME));
      final double[][] volatility = deserializer.fieldValueToObject(double[][].class, message.getByName(VOLATILITY_DATA_FIELD_NAME));
      final int n = t.length;
      final SmileDeltaParameters[] smiles = new SmileDeltaParameters[n];
      for (int i = 0; i < n; i++) {
        smiles[i] = new SmileDeltaParameters(t[i], delta[i], volatility[i]);
      }
      final Interpolator1D interpolator = deserializer.fieldValueToObject(Interpolator1D.class, message.getByName(TIME_INTERPOLATOR_NAME));
      return new SmileDeltaTermStructureParameters(smiles, interpolator);
    }

    @Override
    protected void buildMessage(final FudgeSerializer serializer, final MutableFudgeMsg message, final SmileDeltaTermStructureParameters object) {
      final SmileDeltaParameters[] smiles = object.getVolatilityTerm();
      final int n = smiles.length;
      final double[] t = new double[n];
      final double[][] delta = new double[n][];
      final double[][] volatility = new double[n][];
      for (int i = 0; i < n; i++) {
        t[i] = smiles[i].getTimeToExpiry();
        delta[i] = smiles[i].getDelta();
        volatility[i] = smiles[i].getVolatility();
      }
      serializer.addToMessage(message, T_DATA_FIELD_NAME, null, t);
      serializer.addToMessage(message, DELTA_DATA_FIELD_NAME, null, delta);
      serializer.addToMessage(message, VOLATILITY_DATA_FIELD_NAME, null, volatility);
      serializer.addToMessage(message, TIME_INTERPOLATOR_NAME, null, object.getTimeInterpolator());
    }
  }

  @FudgeBuilderFor(BlackForexTermStructureParameters.class)
  public static class BlackForexTermStructureParametersBuilder extends AbstractFudgeBuilder<BlackForexTermStructureParameters> {
    private static final String VOLATILITY_DATA_FIELD_NAME = "Volatility data";

    @Override
    public BlackForexTermStructureParameters buildObject(final FudgeDeserializer deserializer, final FudgeMsg message) {
      final DoublesCurve volatility = deserializer.fieldValueToObject(DoublesCurve.class, message.getByName(VOLATILITY_DATA_FIELD_NAME));
      return new BlackForexTermStructureParameters(volatility);
    }

    @Override
    protected void buildMessage(final FudgeSerializer serializer, final MutableFudgeMsg message, final BlackForexTermStructureParameters object) {
      serializer.addToMessage(message, VOLATILITY_DATA_FIELD_NAME, null, object.getVolatilityCurve());
    }
  }
}
TOP

Related Classes of com.opengamma.financial.analytics.fudgemsg.ForexOptionDataBundleBuilders$BlackForexTermStructureParametersBuilder

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.