Portfolio.h

#pragma once

#include "stdafx.h"
#include "Priceable.h"
#include "ContinuousTimeOption.h"
#include "MonteCarloPricer.h"

/**
 *   A Portfolio contains options in various quantities
 */
class Portfolio : public Priceable {
public:
    /*  Virtual destructor */
    virtual ~Portfolio() {};
    /*  Returns the number of items in the portflio */
    virtual int size() const = 0;
    /*  Add a new security to the portfolio, returns the index
        at which it was added */
    virtual int add( double quantity,
             std::shared_ptr<ContinuousTimeOption> security ) = 0;
    /*  Update the quantity at a given index */
    virtual void setQuantity( int index,
                              double quantity ) = 0;
    /*  Compute the current price */
    virtual double price( const MultiStockModel& model )
                              const = 0;
	/*  Price this portfolio using one consistent set of monte carlo simulations */
	virtual double monteCarloPrice(
		const MultiStockModel& model, const MonteCarloPricer& pricer) const = 0;
    /*  Creates a Portfolio */
    static std::shared_ptr<Portfolio> newInstance();
};

void testPortfolio();