/**
* Copyright (C) 2012 - present by OpenGamma Inc. and the OpenGamma group of companies
*
* Please see distribution for license.
*/
package com.opengamma.financial.generator;
import java.math.BigDecimal;
import com.opengamma.core.position.PortfolioNode;
import com.opengamma.core.position.Position;
import com.opengamma.core.position.impl.SimplePortfolioNode;
import com.opengamma.master.position.ManageableTrade;
import com.opengamma.master.security.ManageableSecurity;
/**
* Utility for constructing a random FX portfolio.
*/
public class MixedFXPortfolioGeneratorTool extends AbstractPortfolioGeneratorTool {
/**
*
*/
protected class MixedFXSecurityGenerator<T extends ManageableSecurity> extends AbstractFXSecurityGenerator<T> implements PortfolioNodeGenerator {
private int _count = 1;
@Override
public T createSecurity() {
return null;
}
private void add(final SimplePortfolioNode node, final ManageableTrade trade) {
final Position position = SimplePositionGenerator.createPositionFromTrade(trade);
if (position != null) {
node.addPosition(position);
}
}
@Override
public PortfolioNode createPortfolioNode() {
final SimplePortfolioNode node = new SimplePortfolioNode("Strategy " + _count);
final Bundle bundle = createBundle();
add(node, createFXBarrierOptionSecurityTrade(bundle, BigDecimal.ONE, getSecurityPersister(), getCounterPartyGenerator()));
add(node, createFXDigitalOptionSecurityTrade(bundle, BigDecimal.ONE, getSecurityPersister(), getCounterPartyGenerator()));
add(node, createFXForwardSecurityTrade(bundle, BigDecimal.ONE, getSecurityPersister(), getCounterPartyGenerator()));
add(node, createFXOptionSecurityTrade(bundle, BigDecimal.ONE, getSecurityPersister(), getCounterPartyGenerator()));
if (node.getPositions().isEmpty()) {
return null;
}
_count++;
return node;
}
}
protected <T extends ManageableSecurity> MixedFXSecurityGenerator<T> createMixedFXSecurityGenerator() {
return new MixedFXSecurityGenerator<T>();
}
@Override
public PortfolioNodeGenerator createPortfolioNodeGenerator(final int size) {
final MixedFXSecurityGenerator<?> securities = createMixedFXSecurityGenerator();
configure(securities);
final TreePortfolioNodeGenerator rootNode = new TreePortfolioNodeGenerator(new StaticNameGenerator("Mixed FX"));
for (int i = 0; i < size / 4; i++) {
rootNode.addChildNode(securities);
}
return rootNode;
}
}