Update implemented predictRates for 1 time slot
This commit is contained in:
@ -25,8 +25,10 @@ void TradingBot::printMenu()
|
|||||||
std::cout << spacer << std::endl;
|
std::cout << spacer << std::endl;
|
||||||
// 1 print help
|
// 1 print help
|
||||||
std::cout << "1: Retrieve current orders" << std::endl;
|
std::cout << "1: Retrieve current orders" << std::endl;
|
||||||
|
std::cout << "2: Predict ask and bid rates" << std::endl;
|
||||||
std::cout << "8: Exit bot" << std::endl;
|
std::cout << "8: Exit bot" << std::endl;
|
||||||
std::cout << spacer << std::endl;
|
std::cout << spacer << std::endl;
|
||||||
|
std::cout << "Enter an option: ";
|
||||||
return;
|
return;
|
||||||
// 2 print exchange stats
|
// 2 print exchange stats
|
||||||
std::cout << "2: Print exchange stats" << std::endl;
|
std::cout << "2: Print exchange stats" << std::endl;
|
||||||
@ -63,6 +65,24 @@ void TradingBot::processUserOption(int userOption)
|
|||||||
if (userOption == 1)
|
if (userOption == 1)
|
||||||
{
|
{
|
||||||
retrieveOrders();
|
retrieveOrders();
|
||||||
|
if (bookAsks.size() > 0 && bookBids.size() > 0)
|
||||||
|
std::cout << "Bids and Asks loaded successfully for the current time." << std::endl;
|
||||||
|
}
|
||||||
|
if (userOption == 2)
|
||||||
|
{
|
||||||
|
predictRates();
|
||||||
|
if (predictedAsks.size() > 0 && predictedBids.size() > 0)
|
||||||
|
{
|
||||||
|
std::cout << "New predicitons have been created" << std::endl;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (userOption == 3)
|
||||||
|
{
|
||||||
|
printPredictions();
|
||||||
|
}
|
||||||
|
if (userOption == 7)
|
||||||
|
{
|
||||||
|
testFunc();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -71,9 +91,152 @@ void TradingBot::retrieveOrders()
|
|||||||
bookAsks.clear();
|
bookAsks.clear();
|
||||||
bookAsks = merkel->getCurrentAsks();
|
bookAsks = merkel->getCurrentAsks();
|
||||||
bookBids.clear();
|
bookBids.clear();
|
||||||
bookBids = merkel->getCurrentBids();std::cout << bookBids[0].product << std::endl;
|
bookBids = merkel->getCurrentBids();
|
||||||
|
}
|
||||||
|
|
||||||
|
// Predict the next rates for all products
|
||||||
|
void TradingBot::predictRates()
|
||||||
|
{
|
||||||
|
if (bookAsks.size() == 0 || bookBids.size() == 0)
|
||||||
|
{
|
||||||
|
std::cout << "No orders have been imported. Import orders and try again" << std::endl;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// We'll go through all products and get the mean
|
||||||
|
std::vector<std::string> products = merkel->getKnownProducts();
|
||||||
|
|
||||||
|
// Get all asks and store the mean
|
||||||
|
std::map<std::string, double> askMap;
|
||||||
|
for (const std::string &product : products)
|
||||||
|
{
|
||||||
|
askMap[product] = getMean(bookAsks, product);
|
||||||
|
}
|
||||||
|
askHistory.push_back(askMap);
|
||||||
|
|
||||||
|
// Get all bids and store the mean
|
||||||
|
std::map<std::string, double> bidMap;
|
||||||
|
for (const std::string &product : products)
|
||||||
|
{
|
||||||
|
bidMap[product] = getMean(bookBids, product);
|
||||||
|
}
|
||||||
|
bidHistory.push_back(bidMap);
|
||||||
|
|
||||||
|
// If the history vectors only have 1 element, then we're at the first time slot
|
||||||
|
// Our prediction will be half way between the mean ask and bid
|
||||||
|
if (bidHistory.size() == 1)
|
||||||
|
{
|
||||||
|
for (std::string &product : products)
|
||||||
|
{
|
||||||
|
predictedAsks[product] = (bidHistory[0][product] + askHistory[0][product]) / 2;
|
||||||
|
predictedBids[product] = predictedAsks[product];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//std::map<std::string, std::vector<double>> provMap;
|
||||||
|
|
||||||
|
//askHistory.push_back(getMean(bookAsks));
|
||||||
|
//bidHistory.push_back(getMean(bookBids));
|
||||||
|
}
|
||||||
|
|
||||||
|
// return the mean price from the vector
|
||||||
|
double TradingBot::getMean(std::vector<OrderBookEntry> orders, std::string product)
|
||||||
|
{
|
||||||
|
double sum = 0;
|
||||||
|
for (const OrderBookEntry &order : orders)
|
||||||
|
{
|
||||||
|
if (order.product == product)
|
||||||
|
sum += order.price;
|
||||||
|
}
|
||||||
|
return sum / orders.size();
|
||||||
|
}
|
||||||
|
|
||||||
|
// Print predictions if they have been made
|
||||||
|
void TradingBot::printPredictions()
|
||||||
|
{
|
||||||
|
std::cout << "Asks" << std::endl;
|
||||||
|
if (predictedAsks.size() == 0)
|
||||||
|
std::cout << "No ask predictions have been made yet" << std::endl;
|
||||||
|
for (auto const &ask : predictedAsks)
|
||||||
|
{
|
||||||
|
std::cout << ask.first << " - " << ask.second << std::endl;
|
||||||
|
}
|
||||||
|
|
||||||
|
std::cout << "Bids" << std::endl;
|
||||||
|
if (predictedBids.size() == 0)
|
||||||
|
std::cout << "No bid predictions have been made yet" << std::endl;
|
||||||
|
for (auto const &bid : predictedBids)
|
||||||
|
{
|
||||||
|
std::cout << bid.first << " - " << bid.second << std::endl;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void TradingBot::testFunc()
|
void TradingBot::testFunc()
|
||||||
{
|
{
|
||||||
|
std::cout << "Asks" << std::endl;
|
||||||
|
for (auto const &ask : predictedAsks)
|
||||||
|
{
|
||||||
|
std::cout << ask.first << " - " << ask.second << std::endl;
|
||||||
|
}
|
||||||
|
|
||||||
|
std::cout << "Bids" << std::endl;
|
||||||
|
for (auto const &bid : predictedBids)
|
||||||
|
{
|
||||||
|
std::cout << bid.first << " - " << bid.second << std::endl;
|
||||||
|
}
|
||||||
|
|
||||||
|
//std::cout << "Ask: " << askHistory[0] << std::endl;
|
||||||
|
return;
|
||||||
|
std::cout << "Asks" << std::endl;
|
||||||
|
for (int i = 0; i < bookAsks.size(); ++i)
|
||||||
|
{
|
||||||
|
std::cout << "Entry: " << bookAsks[i].timestamp << " - "
|
||||||
|
<< bookAsks[i].product << " - "
|
||||||
|
<< OrderBookEntry::OrderBookTypeToString(bookAsks[i].orderType) << " - "
|
||||||
|
<< std::fixed << bookAsks[i].price << " - "
|
||||||
|
<< std::fixed << bookAsks[i].amount << " - "
|
||||||
|
<< bookAsks[i].username << std::endl;
|
||||||
|
}
|
||||||
|
|
||||||
|
std::cout << "Bids" << std::endl;
|
||||||
|
for (int i = 0; i < bookBids.size(); ++i)
|
||||||
|
{
|
||||||
|
std::cout << "Entry: " << bookBids[i].timestamp << " - "
|
||||||
|
<< bookBids[i].product << " - "
|
||||||
|
<< OrderBookEntry::OrderBookTypeToString(bookBids[i].orderType) << " - "
|
||||||
|
<< std::fixed << bookBids[i].price << " - "
|
||||||
|
<< std::fixed << bookBids[i].amount << " - "
|
||||||
|
<< bookBids[i].username << std::endl;
|
||||||
|
}
|
||||||
|
|
||||||
|
return;
|
||||||
|
std::vector<OrderBookEntry> currentAsks = merkel->getCurrentAsks();
|
||||||
|
std::cout.precision(8);
|
||||||
|
for (int i = 0; i < currentAsks.size(); ++i)
|
||||||
|
{
|
||||||
|
//std::cout << merkel->getCurrentTime() << std::endl;
|
||||||
|
if (currentAsks[i].product == "DOGE/BTC")
|
||||||
|
{
|
||||||
|
//std::cout.precision(14);
|
||||||
|
std::cout << "Entry: " << currentAsks[i].timestamp << " - "
|
||||||
|
<< currentAsks[i].product << " - "
|
||||||
|
<< OrderBookEntry::OrderBookTypeToString(currentAsks[i].orderType) << " - "
|
||||||
|
<< std::fixed << currentAsks[i].price << " - "
|
||||||
|
<< std::fixed << currentAsks[i].amount << " - "
|
||||||
|
<< currentAsks[i].username << std::endl;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return;
|
||||||
|
|
||||||
|
std::vector<std::string> prods = merkel->getKnownProducts();
|
||||||
|
for (int i = 0; i < prods.size(); ++i)
|
||||||
|
{
|
||||||
|
std::cout << prods[i] << std::endl;
|
||||||
|
}
|
||||||
|
return;
|
||||||
|
|
||||||
|
std::string test1 = OrderBookEntry::OrderBookTypeToString(OrderBookType::bid);
|
||||||
|
std::cout << test1 << std::endl;
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
Reference in New Issue
Block a user