From fdfd01b0f37618f9cd57c9c821d784a58f7643f2 Mon Sep 17 00:00:00 2001 From: Lev Date: Sun, 13 Jun 2021 17:11:24 -0500 Subject: [PATCH] Add Bot.h and Bot.cpp --- .../Midterm/Midterm Project/CSVReader.cpp | 126 +++++++------- .../Midterm/Midterm Project/CSVReader.h | 26 ++- .../Midterm/Midterm Project/MerkelMain.cpp | 114 ++++++------- .../Midterm/Midterm Project/MerkelMain.h | 37 ++-- .../Midterm/Midterm Project/OrderBook.cpp | 158 +++++++++--------- .../Midterm/Midterm Project/OrderBook.h | 34 ++-- .../Midterm Project/OrderBookEntry.cpp | 28 ++-- .../Midterm/Midterm Project/OrderBookEntry.h | 63 +++---- .../Midterm/Midterm Project/TradingBot.cpp | 20 +++ .../Midterm/Midterm Project/TradingBot.h | 15 ++ .../Midterm/Midterm Project/Wallet.cpp | 35 ++-- .../Midterm/Midterm Project/Wallet.h | 46 +++-- .../Midterm/Midterm Project/a.exe | Bin 0 -> 411181 bytes .../Midterm/Midterm Project/main.cpp | 7 +- 14 files changed, 362 insertions(+), 347 deletions(-) create mode 100644 CM2005 Object Oriented Programming/Midterm/Midterm Project/TradingBot.cpp create mode 100644 CM2005 Object Oriented Programming/Midterm/Midterm Project/TradingBot.h create mode 100644 CM2005 Object Oriented Programming/Midterm/Midterm Project/a.exe diff --git a/CM2005 Object Oriented Programming/Midterm/Midterm Project/CSVReader.cpp b/CM2005 Object Oriented Programming/Midterm/Midterm Project/CSVReader.cpp index 8f1947d..a31c423 100644 --- a/CM2005 Object Oriented Programming/Midterm/Midterm Project/CSVReader.cpp +++ b/CM2005 Object Oriented Programming/Midterm/Midterm Project/CSVReader.cpp @@ -2,10 +2,8 @@ #include #include - CSVReader::CSVReader() { - } std::vector CSVReader::readCSV(std::string csvFilename) @@ -16,38 +14,44 @@ std::vector CSVReader::readCSV(std::string csvFilename) std::string line; if (csvFile.is_open()) { - while(std::getline(csvFile, line)) + while (std::getline(csvFile, line)) { - try { + try + { OrderBookEntry obe = stringsToOBE(tokenise(line, ',')); entries.push_back(obe); - }catch(const std::exception& e) - { - std::cout << "CSVReader::readCSV bad data" << std::endl; } - }// end of while - } + catch (const std::exception &e) + { + std::cout << "CSVReader::readCSV bad data" << std::endl; + } + } // end of while + } - std::cout << "CSVReader::readCSV read " << entries.size() << " entries" << std::endl; - return entries; + std::cout << "CSVReader::readCSV read " << entries.size() << " entries" << std::endl; + return entries; } std::vector CSVReader::tokenise(std::string csvLine, char separator) { - std::vector tokens; - signed int start, end; - std::string token; + std::vector tokens; + signed int start, end; + std::string token; start = csvLine.find_first_not_of(separator, 0); - do{ + do + { end = csvLine.find_first_of(separator, start); - if (start == csvLine.length() || start == end) break; - if (end >= 0) token = csvLine.substr(start, end - start); - else token = csvLine.substr(start, csvLine.length() - start); + if (start == csvLine.length() || start == end) + break; + if (end >= 0) + token = csvLine.substr(start, end - start); + else + token = csvLine.substr(start, csvLine.length() - start); tokens.push_back(token); - start = end + 1; - }while(end > 0); + start = end + 1; + } while (end > 0); - return tokens; + return tokens; } OrderBookEntry CSVReader::stringsToOBE(std::vector tokens) @@ -60,46 +64,50 @@ OrderBookEntry CSVReader::stringsToOBE(std::vector tokens) throw std::exception{}; } // we have 5 tokens - try { - price = std::stod(tokens[3]); - amount = std::stod(tokens[4]); - }catch(const std::exception& e){ - std::cout << "CSVReader::stringsToOBE Bad float! " << tokens[3]<< std::endl; - std::cout << "CSVReader::stringsToOBE Bad float! " << tokens[4]<< std::endl; - throw; + try + { + price = std::stod(tokens[3]); + amount = std::stod(tokens[4]); + } + catch (const std::exception &e) + { + std::cout << "CSVReader::stringsToOBE Bad float! " << tokens[3] << std::endl; + std::cout << "CSVReader::stringsToOBE Bad float! " << tokens[4] << std::endl; + throw; } - OrderBookEntry obe{price, - amount, - tokens[0], - tokens[1], - OrderBookEntry::stringToOrderBookType(tokens[2])}; + OrderBookEntry obe{price, + amount, + tokens[0], + tokens[1], + OrderBookEntry::stringToOrderBookType(tokens[2])}; + + return obe; +} + +OrderBookEntry CSVReader::stringsToOBE(std::string priceString, + std::string amountString, + std::string timestamp, + std::string product, + OrderBookType orderType) +{ + double price, amount; + try + { + price = std::stod(priceString); + amount = std::stod(amountString); + } + catch (const std::exception &e) + { + std::cout << "CSVReader::stringsToOBE Bad float! " << priceString << std::endl; + std::cout << "CSVReader::stringsToOBE Bad float! " << amountString << std::endl; + throw; + } + OrderBookEntry obe{price, + amount, + timestamp, + product, + orderType}; - return obe; -} - - -OrderBookEntry CSVReader::stringsToOBE(std::string priceString, - std::string amountString, - std::string timestamp, - std::string product, - OrderBookType orderType) -{ - double price, amount; - try { - price = std::stod(priceString); - amount = std::stod(amountString); - }catch(const std::exception& e){ - std::cout << "CSVReader::stringsToOBE Bad float! " << priceString<< std::endl; - std::cout << "CSVReader::stringsToOBE Bad float! " << amountString<< std::endl; - throw; - } - OrderBookEntry obe{price, - amount, - timestamp, - product, - orderType}; - return obe; } - \ No newline at end of file diff --git a/CM2005 Object Oriented Programming/Midterm/Midterm Project/CSVReader.h b/CM2005 Object Oriented Programming/Midterm/Midterm Project/CSVReader.h index 789ac3f..695a5f2 100644 --- a/CM2005 Object Oriented Programming/Midterm/Midterm Project/CSVReader.h +++ b/CM2005 Object Oriented Programming/Midterm/Midterm Project/CSVReader.h @@ -4,22 +4,20 @@ #include #include - class CSVReader { - public: - CSVReader(); +public: + CSVReader(); - static std::vector readCSV(std::string csvFile); - static std::vector tokenise(std::string csvLine, char separator); - - static OrderBookEntry stringsToOBE(std::string price, - std::string amount, - std::string timestamp, - std::string product, - OrderBookType OrderBookType); + static std::vector readCSV(std::string csvFile); + static std::vector tokenise(std::string csvLine, char separator); - private: - static OrderBookEntry stringsToOBE(std::vector strings); - + static OrderBookEntry stringsToOBE(std::string price, + std::string amount, + std::string timestamp, + std::string product, + OrderBookType OrderBookType); + +private: + static OrderBookEntry stringsToOBE(std::vector strings); }; \ No newline at end of file diff --git a/CM2005 Object Oriented Programming/Midterm/Midterm Project/MerkelMain.cpp b/CM2005 Object Oriented Programming/Midterm/Midterm Project/MerkelMain.cpp index 25ac13c..c500c9f 100644 --- a/CM2005 Object Oriented Programming/Midterm/Midterm Project/MerkelMain.cpp +++ b/CM2005 Object Oriented Programming/Midterm/Midterm Project/MerkelMain.cpp @@ -6,7 +6,6 @@ MerkelMain::MerkelMain() { - } void MerkelMain::init() @@ -16,7 +15,7 @@ void MerkelMain::init() wallet.insertCurrency("BTC", 10); - while(true) + while (true) { printMenu(); input = getUserOption(); @@ -24,7 +23,6 @@ void MerkelMain::init() } } - void MerkelMain::printMenu() { // 1 print help @@ -33,11 +31,11 @@ void MerkelMain::printMenu() std::cout << "2: Print exchange stats" << std::endl; // 3 make an offer std::cout << "3: Make an offer " << std::endl; - // 4 make a bid + // 4 make a bid std::cout << "4: Make a bid " << std::endl; // 5 print wallet std::cout << "5: Print wallet " << std::endl; - // 6 continue + // 6 continue std::cout << "6: Continue " << std::endl; std::cout << "============== " << std::endl; @@ -52,34 +50,15 @@ void MerkelMain::printHelp() void MerkelMain::printMarketStats() { - for (std::string const& p : orderBook.getKnownProducts()) + for (std::string const &p : orderBook.getKnownProducts()) { std::cout << "Product: " << p << std::endl; - std::vector entries = orderBook.getOrders(OrderBookType::ask, - p, currentTime); + std::vector entries = orderBook.getOrders(OrderBookType::ask, + p, currentTime); std::cout << "Asks seen: " << entries.size() << std::endl; std::cout << "Max ask: " << OrderBook::getHighPrice(entries) << std::endl; std::cout << "Min ask: " << OrderBook::getLowPrice(entries) << std::endl; - - - } - // std::cout << "OrderBook contains : " << orders.size() << " entries" << std::endl; - // unsigned int bids = 0; - // unsigned int asks = 0; - // for (OrderBookEntry& e : orders) - // { - // if (e.orderType == OrderBookType::ask) - // { - // asks ++; - // } - // if (e.orderType == OrderBookType::bid) - // { - // bids ++; - // } - // } - // std::cout << "OrderBook asks: " << asks << " bids:" << bids << std::endl; - } void MerkelMain::enterAsk() @@ -93,28 +72,31 @@ void MerkelMain::enterAsk() { std::cout << "MerkelMain::enterAsk Bad input! " << input << std::endl; } - else { - try { + else + { + try + { OrderBookEntry obe = CSVReader::stringsToOBE( tokens[1], - tokens[2], - currentTime, - tokens[0], - OrderBookType::ask - ); + tokens[2], + currentTime, + tokens[0], + OrderBookType::ask); obe.username = "simuser"; if (wallet.canFulfillOrder(obe)) { std::cout << "Wallet looks good. " << std::endl; orderBook.insertOrder(obe); } - else { + else + { std::cout << "Wallet has insufficient funds . " << std::endl; } - }catch (const std::exception& e) + } + catch (const std::exception &e) { std::cout << " MerkelMain::enterAsk Bad input " << std::endl; - } + } } } @@ -129,15 +111,16 @@ void MerkelMain::enterBid() { std::cout << "MerkelMain::enterBid Bad input! " << input << std::endl; } - else { - try { + else + { + try + { OrderBookEntry obe = CSVReader::stringsToOBE( tokens[1], - tokens[2], - currentTime, - tokens[0], - OrderBookType::bid - ); + tokens[2], + currentTime, + tokens[0], + OrderBookType::bid); obe.username = "simuser"; if (wallet.canFulfillOrder(obe)) @@ -145,13 +128,15 @@ void MerkelMain::enterBid() std::cout << "Wallet looks good. " << std::endl; orderBook.insertOrder(obe); } - else { + else + { std::cout << "Wallet has insufficient funds . " << std::endl; } - }catch (const std::exception& e) + } + catch (const std::exception &e) { std::cout << " MerkelMain::enterBid Bad input " << std::endl; - } + } } } @@ -159,41 +144,42 @@ void MerkelMain::printWallet() { std::cout << wallet.toString() << std::endl; } - + void MerkelMain::gotoNextTimeframe() { std::cout << "Going to next time frame. " << std::endl; for (std::string p : orderBook.getKnownProducts()) { std::cout << "matching " << p << std::endl; - std::vector sales = orderBook.matchAsksToBids(p, currentTime); + std::vector sales = orderBook.matchAsksToBids(p, currentTime); std::cout << "Sales: " << sales.size() << std::endl; - for (OrderBookEntry& sale : sales) + for (OrderBookEntry &sale : sales) { - std::cout << "Sale price: " << sale.price << " amount " << sale.amount << std::endl; + std::cout << "Sale price: " << sale.price << " amount " << sale.amount << std::endl; if (sale.username == "simuser") { // update the wallet wallet.processSale(sale); } } - } currentTime = orderBook.getNextTime(currentTime); } - + int MerkelMain::getUserOption() { int userOption = 0; std::string line; std::cout << "Type in 1-6" << std::endl; std::getline(std::cin, line); - try{ - userOption = std::stoi(line); - }catch(const std::exception& e) + try { - // + userOption = std::stoi(line); + } + catch (const std::exception &e) + { + // } std::cout << "You chose: " << userOption << std::endl; return userOption; @@ -205,28 +191,28 @@ void MerkelMain::processUserOption(int userOption) { std::cout << "Invalid choice. Choose 1-6" << std::endl; } - if (userOption == 1) + if (userOption == 1) { printHelp(); } - if (userOption == 2) + if (userOption == 2) { printMarketStats(); } - if (userOption == 3) + if (userOption == 3) { enterAsk(); } - if (userOption == 4) + if (userOption == 4) { enterBid(); } - if (userOption == 5) + if (userOption == 5) { printWallet(); } - if (userOption == 6) + if (userOption == 6) { gotoNextTimeframe(); - } + } } diff --git a/CM2005 Object Oriented Programming/Midterm/Midterm Project/MerkelMain.h b/CM2005 Object Oriented Programming/Midterm/Midterm Project/MerkelMain.h index daee918..22f1883 100644 --- a/CM2005 Object Oriented Programming/Midterm/Midterm Project/MerkelMain.h +++ b/CM2005 Object Oriented Programming/Midterm/Midterm Project/MerkelMain.h @@ -5,28 +5,27 @@ #include "OrderBook.h" #include "Wallet.h" - class MerkelMain { - public: - MerkelMain(); - /** Call this to start the sim */ - void init(); - private: - void printMenu(); - void printHelp(); - void printMarketStats(); - void enterAsk(); - void enterBid(); - void printWallet(); - void gotoNextTimeframe(); - int getUserOption(); - void processUserOption(int userOption); +public: + MerkelMain(); + /** Call this to start the sim */ + void init(); - std::string currentTime; +private: + void printMenu(); + void printHelp(); + void printMarketStats(); + void enterAsk(); + void enterBid(); + void printWallet(); + void gotoNextTimeframe(); + int getUserOption(); + void processUserOption(int userOption); -// OrderBook orderBook{"20200317.csv"}; - OrderBook orderBook{"20200601.csv"}; - Wallet wallet; + std::string currentTime; + // OrderBook orderBook{"20200317.csv"}; + OrderBook orderBook{"20200601.csv"}; + Wallet wallet; }; diff --git a/CM2005 Object Oriented Programming/Midterm/Midterm Project/OrderBook.cpp b/CM2005 Object Oriented Programming/Midterm/Midterm Project/OrderBook.cpp index 6c46766..de7d5ab 100644 --- a/CM2005 Object Oriented Programming/Midterm/Midterm Project/OrderBook.cpp +++ b/CM2005 Object Oriented Programming/Midterm/Midterm Project/OrderBook.cpp @@ -4,7 +4,6 @@ #include #include - /** construct, reading a csv data file */ OrderBook::OrderBook(std::string filename) { @@ -16,15 +15,15 @@ std::vector OrderBook::getKnownProducts() { std::vector products; - std::map prodMap; + std::map prodMap; - for (OrderBookEntry& e : orders) + for (OrderBookEntry &e : orders) { prodMap[e.product] = true; } - + // now flatten the map to a vector of strings - for (auto const& e : prodMap) + for (auto const &e : prodMap) { products.push_back(e.first); } @@ -32,41 +31,41 @@ std::vector OrderBook::getKnownProducts() return products; } /** return vector of Orders according to the sent filters*/ -std::vector OrderBook::getOrders(OrderBookType type, - std::string product, - std::string timestamp) +std::vector OrderBook::getOrders(OrderBookType type, + std::string product, + std::string timestamp) { std::vector orders_sub; - for (OrderBookEntry& e : orders) + for (OrderBookEntry &e : orders) { - if (e.orderType == type && - e.product == product && - e.timestamp == timestamp ) - { - orders_sub.push_back(e); - } + if (e.orderType == type && + e.product == product && + e.timestamp == timestamp) + { + orders_sub.push_back(e); + } } return orders_sub; } - -double OrderBook::getHighPrice(std::vector& orders) +double OrderBook::getHighPrice(std::vector &orders) { double max = orders[0].price; - for (OrderBookEntry& e : orders) + for (OrderBookEntry &e : orders) { - if (e.price > max)max = e.price; + if (e.price > max) + max = e.price; } return max; } - -double OrderBook::getLowPrice(std::vector& orders) +double OrderBook::getLowPrice(std::vector &orders) { double min = orders[0].price; - for (OrderBookEntry& e : orders) + for (OrderBookEntry &e : orders) { - if (e.price < min)min = e.price; + if (e.price < min) + min = e.price; } return min; } @@ -79,9 +78,9 @@ std::string OrderBook::getEarliestTime() std::string OrderBook::getNextTime(std::string timestamp) { std::string next_timestamp = ""; - for (OrderBookEntry& e : orders) + for (OrderBookEntry &e : orders) { - if (e.timestamp > timestamp) + if (e.timestamp > timestamp) { next_timestamp = e.timestamp; break; @@ -94,7 +93,7 @@ std::string OrderBook::getNextTime(std::string timestamp) return next_timestamp; } -void OrderBook::insertOrder(OrderBookEntry& order) +void OrderBook::insertOrder(OrderBookEntry &order) { orders.push_back(order); std::sort(orders.begin(), orders.end(), OrderBookEntry::compareByTimestamp); @@ -102,17 +101,17 @@ void OrderBook::insertOrder(OrderBookEntry& order) std::vector OrderBook::matchAsksToBids(std::string product, std::string timestamp) { -// asks = orderbook.asks - std::vector asks = getOrders(OrderBookType::ask, - product, + // asks = orderbook.asks + std::vector asks = getOrders(OrderBookType::ask, + product, + timestamp); + // bids = orderbook.bids + std::vector bids = getOrders(OrderBookType::bid, + product, timestamp); -// bids = orderbook.bids - std::vector bids = getOrders(OrderBookType::bid, - product, - timestamp); // sales = [] - std::vector sales; + std::vector sales; // I put in a little check to ensure we have bids and asks // to process. @@ -127,24 +126,24 @@ std::vector OrderBook::matchAsksToBids(std::string product, std: // sort bids highest first std::sort(bids.begin(), bids.end(), OrderBookEntry::compareByPriceDesc); // for ask in asks: - std::cout << "max ask " << asks[asks.size()-1].price << std::endl; + std::cout << "max ask " << asks[asks.size() - 1].price << std::endl; std::cout << "min ask " << asks[0].price << std::endl; std::cout << "max bid " << bids[0].price << std::endl; - std::cout << "min bid " << bids[bids.size()-1].price << std::endl; - - for (OrderBookEntry& ask : asks) + std::cout << "min bid " << bids[bids.size() - 1].price << std::endl; + + for (OrderBookEntry &ask : asks) { - // for bid in bids: - for (OrderBookEntry& bid : bids) + // for bid in bids: + for (OrderBookEntry &bid : bids) { - // if bid.price >= ask.price # we have a match + // if bid.price >= ask.price # we have a match if (bid.price >= ask.price) { - // sale = new order() - // sale.price = ask.price - OrderBookEntry sale{ask.price, 0, timestamp, - product, - OrderBookType::asksale}; + // sale = new order() + // sale.price = ask.price + OrderBookEntry sale{ask.price, 0, timestamp, + product, + OrderBookType::asksale}; if (bid.username == "simuser") { @@ -154,63 +153,62 @@ std::vector OrderBook::matchAsksToBids(std::string product, std: if (ask.username == "simuser") { sale.username = "simuser"; - sale.orderType = OrderBookType::asksale; + sale.orderType = OrderBookType::asksale; } - - // # now work out how much was sold and - // # create new bids and asks covering - // # anything that was not sold - // if bid.amount == ask.amount: # bid completely clears ask + + // # now work out how much was sold and + // # create new bids and asks covering + // # anything that was not sold + // if bid.amount == ask.amount: # bid completely clears ask if (bid.amount == ask.amount) { - // sale.amount = ask.amount + // sale.amount = ask.amount sale.amount = ask.amount; - // sales.append(sale) + // sales.append(sale) sales.push_back(sale); - // bid.amount = 0 # make sure the bid is not processed again + // bid.amount = 0 # make sure the bid is not processed again bid.amount = 0; - // # can do no more with this ask - // # go onto the next ask - // break + // # can do no more with this ask + // # go onto the next ask + // break break; } - // if bid.amount > ask.amount: # ask is completely gone slice the bid + // if bid.amount > ask.amount: # ask is completely gone slice the bid if (bid.amount > ask.amount) { - // sale.amount = ask.amount + // sale.amount = ask.amount sale.amount = ask.amount; - // sales.append(sale) + // sales.append(sale) sales.push_back(sale); - // # we adjust the bid in place - // # so it can be used to process the next ask - // bid.amount = bid.amount - ask.amount - bid.amount = bid.amount - ask.amount; - // # ask is completely gone, so go to next ask - // break + // # we adjust the bid in place + // # so it can be used to process the next ask + // bid.amount = bid.amount - ask.amount + bid.amount = bid.amount - ask.amount; + // # ask is completely gone, so go to next ask + // break break; } - - // if bid.amount < ask.amount # bid is completely gone, slice the ask - if (bid.amount < ask.amount && - bid.amount > 0) + // if bid.amount < ask.amount # bid is completely gone, slice the ask + if (bid.amount < ask.amount && + bid.amount > 0) { - // sale.amount = bid.amount + // sale.amount = bid.amount sale.amount = bid.amount; - // sales.append(sale) + // sales.append(sale) sales.push_back(sale); - // # update the ask - // # and allow further bids to process the remaining amount - // ask.amount = ask.amount - bid.amount + // # update the ask + // # and allow further bids to process the remaining amount + // ask.amount = ask.amount - bid.amount ask.amount = ask.amount - bid.amount; - // bid.amount = 0 # make sure the bid is not processed again + // bid.amount = 0 # make sure the bid is not processed again bid.amount = 0; - // # some ask remains so go to the next bid - // continue + // # some ask remains so go to the next bid + // continue continue; } } } } - return sales; + return sales; } diff --git a/CM2005 Object Oriented Programming/Midterm/Midterm Project/OrderBook.h b/CM2005 Object Oriented Programming/Midterm/Midterm Project/OrderBook.h index a331747..c8269a4 100644 --- a/CM2005 Object Oriented Programming/Midterm/Midterm Project/OrderBook.h +++ b/CM2005 Object Oriented Programming/Midterm/Midterm Project/OrderBook.h @@ -6,33 +6,31 @@ class OrderBook { - public: +public: /** construct, reading a csv data file */ - OrderBook(std::string filename); + OrderBook(std::string filename); /** return vector of all know products in the dataset*/ - std::vector getKnownProducts(); + std::vector getKnownProducts(); /** return vector of Orders according to the sent filters*/ - std::vector getOrders(OrderBookType type, - std::string product, - std::string timestamp); + std::vector getOrders(OrderBookType type, + std::string product, + std::string timestamp); - /** returns the earliest time in the orderbook*/ - std::string getEarliestTime(); - /** returns the next time after the + /** returns the earliest time in the orderbook*/ + std::string getEarliestTime(); + /** returns the next time after the * sent time in the orderbook * If there is no next timestamp, wraps around to the start * */ - std::string getNextTime(std::string timestamp); + std::string getNextTime(std::string timestamp); - void insertOrder(OrderBookEntry& order); + void insertOrder(OrderBookEntry &order); - std::vector matchAsksToBids(std::string product, std::string timestamp); - - static double getHighPrice(std::vector& orders); - static double getLowPrice(std::vector& orders); - - private: - std::vector orders; + std::vector matchAsksToBids(std::string product, std::string timestamp); + static double getHighPrice(std::vector &orders); + static double getLowPrice(std::vector &orders); +private: + std::vector orders; }; diff --git a/CM2005 Object Oriented Programming/Midterm/Midterm Project/OrderBookEntry.cpp b/CM2005 Object Oriented Programming/Midterm/Midterm Project/OrderBookEntry.cpp index 48a6957..7af218f 100644 --- a/CM2005 Object Oriented Programming/Midterm/Midterm Project/OrderBookEntry.cpp +++ b/CM2005 Object Oriented Programming/Midterm/Midterm Project/OrderBookEntry.cpp @@ -1,20 +1,20 @@ #include "OrderBookEntry.h" -OrderBookEntry::OrderBookEntry( double _price, - double _amount, - std::string _timestamp, - std::string _product, - OrderBookType _orderType, - std::string _username) -: price(_price), - amount(_amount), - timestamp(_timestamp), - product(_product), - orderType(_orderType), - username(_username) +OrderBookEntry::OrderBookEntry( + double _price, + double _amount, + std::string _timestamp, + std::string _product, + OrderBookType _orderType, + std::string _username) + : + price(_price), + amount(_amount), + timestamp(_timestamp), + product(_product), + orderType(_orderType), + username(_username) { - - } OrderBookType OrderBookEntry::stringToOrderBookType(std::string s) diff --git a/CM2005 Object Oriented Programming/Midterm/Midterm Project/OrderBookEntry.h b/CM2005 Object Oriented Programming/Midterm/Midterm Project/OrderBookEntry.h index 0ba0a56..c765b62 100644 --- a/CM2005 Object Oriented Programming/Midterm/Midterm Project/OrderBookEntry.h +++ b/CM2005 Object Oriented Programming/Midterm/Midterm Project/OrderBookEntry.h @@ -2,39 +2,44 @@ #include -enum class OrderBookType{bid, ask, unknown, asksale, bidsale}; +enum class OrderBookType +{ + bid, + ask, + unknown, + asksale, + bidsale +}; class OrderBookEntry { - public: - +public: + OrderBookEntry(double _price, + double _amount, + std::string _timestamp, + std::string _product, + OrderBookType _orderType, + std::string username = "dataset"); - OrderBookEntry( double _price, - double _amount, - std::string _timestamp, - std::string _product, - OrderBookType _orderType, - std::string username = "dataset"); + static OrderBookType stringToOrderBookType(std::string s); - static OrderBookType stringToOrderBookType(std::string s); + static bool compareByTimestamp(OrderBookEntry &e1, OrderBookEntry &e2) + { + return e1.timestamp < e2.timestamp; + } + static bool compareByPriceAsc(OrderBookEntry &e1, OrderBookEntry &e2) + { + return e1.price < e2.price; + } + static bool compareByPriceDesc(OrderBookEntry &e1, OrderBookEntry &e2) + { + return e1.price > e2.price; + } - static bool compareByTimestamp(OrderBookEntry& e1, OrderBookEntry& e2) - { - return e1.timestamp < e2.timestamp; - } - static bool compareByPriceAsc(OrderBookEntry& e1, OrderBookEntry& e2) - { - return e1.price < e2.price; - } - static bool compareByPriceDesc(OrderBookEntry& e1, OrderBookEntry& e2) - { - return e1.price > e2.price; - } - - double price; - double amount; - std::string timestamp; - std::string product; - OrderBookType orderType; - std::string username; + double price; + double amount; + std::string timestamp; + std::string product; + OrderBookType orderType; + std::string username; }; diff --git a/CM2005 Object Oriented Programming/Midterm/Midterm Project/TradingBot.cpp b/CM2005 Object Oriented Programming/Midterm/Midterm Project/TradingBot.cpp new file mode 100644 index 0000000..5ca74e1 --- /dev/null +++ b/CM2005 Object Oriented Programming/Midterm/Midterm Project/TradingBot.cpp @@ -0,0 +1,20 @@ +#include "TradingBot.h" +#include + +Bot::Bot(std::string filename) +{ + orders = CSVReader::readCSV(filename); + Print(20); +} + +void Bot::Print(int intLimit) +{ + int i = 0; + for (OrderBookEntry &entry : orders) + { + std::cout << entry.product << " " << entry.price << " " << entry.amount << std::endl; + i++; + if (i == intLimit) + break; + } +} \ No newline at end of file diff --git a/CM2005 Object Oriented Programming/Midterm/Midterm Project/TradingBot.h b/CM2005 Object Oriented Programming/Midterm/Midterm Project/TradingBot.h new file mode 100644 index 0000000..3afcf02 --- /dev/null +++ b/CM2005 Object Oriented Programming/Midterm/Midterm Project/TradingBot.h @@ -0,0 +1,15 @@ +#pragma once + +#include "OrderBook.h" +#include +//#include "CSVReader.h" + +class Bot +{ +public: + Bot(std::string filename); + void Print(int intLimit); + +private: + std::vector orders; +}; \ No newline at end of file diff --git a/CM2005 Object Oriented Programming/Midterm/Midterm Project/Wallet.cpp b/CM2005 Object Oriented Programming/Midterm/Midterm Project/Wallet.cpp index 2079dcd..359db12 100644 --- a/CM2005 Object Oriented Programming/Midterm/Midterm Project/Wallet.cpp +++ b/CM2005 Object Oriented Programming/Midterm/Midterm Project/Wallet.cpp @@ -4,8 +4,6 @@ Wallet::Wallet() { - - } void Wallet::insertCurrency(std::string type, double amount) @@ -19,33 +17,35 @@ void Wallet::insertCurrency(std::string type, double amount) { balance = 0; } - else { // is there + else + { // is there balance = currencies[type]; } - balance += amount; - currencies[type] = balance; + balance += amount; + currencies[type] = balance; } bool Wallet::removeCurrency(std::string type, double amount) { if (amount < 0) { - return false; + return false; } if (currencies.count(type) == 0) // not there yet { //std::cout << "No currency for " << type << std::endl; return false; } - else { // is there - do we have enough - if (containsCurrency(type, amount))// we have enough + else + { // is there - do we have enough + if (containsCurrency(type, amount)) // we have enough { //std::cout << "Removing " << type << ": " << amount << std::endl; currencies[type] -= amount; return true; - } + } else // they have it but not enough. - return false; + return false; } } @@ -53,15 +53,14 @@ bool Wallet::containsCurrency(std::string type, double amount) { if (currencies.count(type) == 0) // not there yet return false; - else + else return currencies[type] >= amount; - } std::string Wallet::toString() { std::string s; - for (std::pair pair : currencies) + for (std::pair pair : currencies) { std::string currency = pair.first; double amount = pair.second; @@ -91,12 +90,10 @@ bool Wallet::canFulfillOrder(OrderBookEntry order) return containsCurrency(currency, amount); } - - return false; + return false; } - -void Wallet::processSale(OrderBookEntry& sale) +void Wallet::processSale(OrderBookEntry &sale) { std::vector currs = CSVReader::tokenise(sale.product, '/'); // ask @@ -109,7 +106,6 @@ void Wallet::processSale(OrderBookEntry& sale) currencies[incomingCurrency] += incomingAmount; currencies[outgoingCurrency] -= outgoingAmount; - } // bid if (sale.orderType == OrderBookType::bidsale) @@ -123,9 +119,8 @@ void Wallet::processSale(OrderBookEntry& sale) currencies[outgoingCurrency] -= outgoingAmount; } } -std::ostream& operator<<(std::ostream& os, Wallet& wallet) +std::ostream &operator<<(std::ostream &os, Wallet &wallet) { os << wallet.toString(); return os; } - diff --git a/CM2005 Object Oriented Programming/Midterm/Midterm Project/Wallet.h b/CM2005 Object Oriented Programming/Midterm/Midterm Project/Wallet.h index 7518270..8987a36 100644 --- a/CM2005 Object Oriented Programming/Midterm/Midterm Project/Wallet.h +++ b/CM2005 Object Oriented Programming/Midterm/Midterm Project/Wallet.h @@ -5,36 +5,28 @@ #include "OrderBookEntry.h" #include -class Wallet +class Wallet { - public: - Wallet(); - /** insert currency to the wallet */ - void insertCurrency(std::string type, double amount); - /** remove currency from the wallet */ - bool removeCurrency(std::string type, double amount); - - /** check if the wallet contains this much currency or more */ - bool containsCurrency(std::string type, double amount); - /** checks if the wallet can cope with this ask or bid.*/ - bool canFulfillOrder(OrderBookEntry order); - /** update the contents of the wallet +public: + Wallet(); + /** insert currency to the wallet */ + void insertCurrency(std::string type, double amount); + /** remove currency from the wallet */ + bool removeCurrency(std::string type, double amount); + + /** check if the wallet contains this much currency or more */ + bool containsCurrency(std::string type, double amount); + /** checks if the wallet can cope with this ask or bid.*/ + bool canFulfillOrder(OrderBookEntry order); + /** update the contents of the wallet * assumes the order was made by the owner of the wallet */ - void processSale(OrderBookEntry& sale); + void processSale(OrderBookEntry &sale); + /** generate a string representation of the wallet */ + std::string toString(); + friend std::ostream &operator<<(std::ostream &os, Wallet &wallet); - /** generate a string representation of the wallet */ - std::string toString(); - friend std::ostream& operator<<(std::ostream& os, Wallet& wallet); - - - private: - std::map currencies; - +private: + std::map currencies; }; - - - - - diff --git a/CM2005 Object Oriented Programming/Midterm/Midterm Project/a.exe b/CM2005 Object Oriented Programming/Midterm/Midterm Project/a.exe new file mode 100644 index 0000000000000000000000000000000000000000..81f9b16cac4c7b9eeee0aaeefbeb20576c25d0d0 GIT binary patch literal 411181 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

-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 literal 0 HcmV?d00001 diff --git a/CM2005 Object Oriented Programming/Midterm/Midterm Project/main.cpp b/CM2005 Object Oriented Programming/Midterm/Midterm Project/main.cpp index 8d4066e..d0e0ec9 100644 --- a/CM2005 Object Oriented Programming/Midterm/Midterm Project/main.cpp +++ b/CM2005 Object Oriented Programming/Midterm/Midterm Project/main.cpp @@ -1,10 +1,11 @@ #include "Wallet.h" #include #include "MerkelMain.h" +#include "TradingBot.h" int main() -{ +{ MerkelMain app{}; - app.init(); - + Bot myBot("20200317.csv"); + //app.init(); }