// Tutorial4.cpp : Defines the entry point for the console application. // #include #include #include #include #include #include "Equity.h" #include "EquityOption.h" #include "EquityDerivativeTrade.h" #include "OptionType.h" #include "DerivativePortfolioPosition.h" using namespace std; map deriveEquityTradesForDeltaNeutralPosition(DerivativePortfolioPosition const & position) { map deltaRiskMap = position.calculateDeltaRisk(); map tradesForDeltaNeutralPosition; for (auto trade = deltaRiskMap.begin(); trade != deltaRiskMap.end(); trade++) { tradesForDeltaNeutralPosition.insert(make_pair(trade->first, -1 * trade->second)); }; return tradesForDeltaNeutralPosition; }; int main() { //Create option instruments Equity amazon("AMZ", 1.0); EquityOption equityOptionAMZS("AMZS1", amazon, 1.0, OptionType::Call, 1.0 , 100.0, 0.5); EquityOption equityOptionAMZU("AMZU1", amazon, 1.0, OptionType::Call, 1.5, 120.0, 0.3); EquityOption equityOptionAMZZ("AMZZ1", amazon, 1.0, OptionType::Put, 0.5, 120.0, -0.2); Equity google("GOOGL", 1.0); EquityOption equityOptionGOOGS("GOOGS1", google, 1.0, OptionType::Put, 0.25, 150.0, 0.1); EquityOption equityOptionGOOGU("GOOGU1", google, 1.0, OptionType::Put, 0.5, 110.0, 0.7); EquityOption equityOptionGOOGZ("GOOGZ1", google, 1.0, OptionType::Call, 0.1, 90.0, -0.4); //Create Trades based on the instruments //Amazon EquityDerivativeTrade trade1(equityOptionAMZS, 20.0, 2.5, TradeSide::Buy); //Buy 20 contracts EquityDerivativeTrade trade2(equityOptionAMZZ, 10.0, 1.5, TradeSide::Buy); //Buy 10 contracts EquityDerivativeTrade trade3(equityOptionAMZZ, 15.0, 0.6, TradeSide::Sell); //Sell 15 contracts //Google EquityDerivativeTrade trade4(equityOptionGOOGU, 25.0, 2.5, TradeSide::Buy); //Buy 20 contracts EquityDerivativeTrade trade5(equityOptionGOOGZ, 12.0, 1.5, TradeSide::Buy); //Buy 10 contracts EquityDerivativeTrade trade6(equityOptionGOOGS, 11.0, 0.6, TradeSide::Sell); //Sell 15 contracts DerivativePortfolioPosition position; //Accumulate position position.addTrade(trade1); position.addTrade(trade2); position.addTrade(trade3); position.addTrade(trade4); position.addTrade(trade5); position.addTrade(trade6); try{ cout << "Current Delta Position " << endl; for (pair elem : position.calculateDeltaRisk()) { cout << elem.first << " " << elem.second << "\n"; } cout << "Trades for Delta Nuetral Position " << endl; for (pair elem : deriveEquityTradesForDeltaNeutralPosition(position)) { cout << elem.first << " " << elem.second << "\n"; } } catch (exception& e) { cout << "Can not calculate position delta risk due the error " << e.what() << endl; } system("pause"); return 0; }