corr total calc for cashout

This commit is contained in:
dimxy
2019-05-10 20:03:53 +05:00
parent 98c96012c4
commit 8dc85e9c27

View File

@@ -121,12 +121,13 @@ typedef struct MatchedBookTotal {
typedef struct TotalFund { typedef struct TotalFund {
int64_t totalFund; int64_t totalFund;
int64_t totalBets; int64_t totalActiveBets;
int64_t totalCashout;
int64_t totalRekt; int64_t totalRekt;
int64_t totalEquity; int64_t totalEquity;
TotalFund() { TotalFund() {
totalFund = totalBets = totalRekt = totalEquity = 0; totalFund = totalActiveBets = totalCashout = totalRekt = totalEquity = 0;
} }
} TotalFund; } TotalFund;
@@ -1304,7 +1305,7 @@ void prices_betjson(UniValue &result, std::vector<OneBetData> bets, int16_t leve
{ {
UniValue resultbets(UniValue::VARR); UniValue resultbets(UniValue::VARR);
int64_t totalbets = 0; int64_t totalposition = 0;
int64_t totalprofits = 0; int64_t totalprofits = 0;
for (auto b : bets) { for (auto b : bets) {
@@ -1314,14 +1315,14 @@ void prices_betjson(UniValue &result, std::vector<OneBetData> bets, int16_t leve
entry.push_back(Pair("costbasis", ValueFromAmount(b.costbasis))); entry.push_back(Pair("costbasis", ValueFromAmount(b.costbasis)));
entry.push_back(Pair("firstheight", b.firstheight)); entry.push_back(Pair("firstheight", b.firstheight));
resultbets.push_back(entry); resultbets.push_back(entry);
totalbets += b.positionsize; totalposition += b.positionsize;
totalprofits += b.profits; totalprofits += b.profits;
} }
int64_t equity = totalbets + totalprofits; int64_t equity = totalposition + totalprofits;
result.push_back(Pair("bets", resultbets)); result.push_back(Pair("bets", resultbets));
result.push_back(Pair("leverage", (int64_t)leverage)); result.push_back(Pair("leverage", (int64_t)leverage));
result.push_back(Pair("TotalPositionSize", ValueFromAmount(totalbets))); result.push_back(Pair("TotalPositionSize", ValueFromAmount(totalposition)));
result.push_back(Pair("TotalProfits", ValueFromAmount(totalprofits))); result.push_back(Pair("TotalProfits", ValueFromAmount(totalprofits)));
result.push_back(Pair("equity", ValueFromAmount(equity))); result.push_back(Pair("equity", ValueFromAmount(equity)));
result.push_back(Pair("LastPrice", ValueFromAmount(lastprice))); result.push_back(Pair("LastPrice", ValueFromAmount(lastprice)));
@@ -1538,7 +1539,7 @@ int32_t prices_scanchain(std::vector<OneBetData> &bets, int16_t leverage, std::v
bool stop = false; bool stop = false;
for (int32_t height = bets[0].firstheight; ; height++) // the last datum for 24h is the costbasis value for (int32_t height = bets[0].firstheight; ; height++) // the last datum for 24h is the costbasis value
{ {
int64_t totalbets = 0; int64_t totalposition = 0;
int64_t totalprofits = 0; int64_t totalprofits = 0;
// scan upto the chain tip // scan upto the chain tip
@@ -1552,7 +1553,7 @@ int32_t prices_scanchain(std::vector<OneBetData> &bets, int16_t leverage, std::v
stop = true; stop = true;
break; break;
} }
totalbets += bets[i].positionsize; totalposition += bets[i].positionsize;
totalprofits += bets[i].profits; totalprofits += bets[i].profits;
} }
} }
@@ -1561,7 +1562,7 @@ int32_t prices_scanchain(std::vector<OneBetData> &bets, int16_t leverage, std::v
break; break;
endheight = height; endheight = height;
int64_t equity = totalbets + totalprofits; int64_t equity = totalposition + totalprofits;
if (equity < 0) if (equity < 0)
{ // we are in loss { // we are in loss
break; break;
@@ -1702,15 +1703,15 @@ int32_t prices_getbetinfo(uint256 bettxid, BetInfo &betinfo)
return -4; return -4;
} }
mpz_t mpzTotalbets; mpz_t mpzTotalPosition;
mpz_t mpzTotalprofits; mpz_t mpzTotalprofits;
mpz_t mpzTotalcostbasis; mpz_t mpzTotalcostbasis;
mpz_init(mpzTotalbets); mpz_init(mpzTotalPosition);
mpz_init(mpzTotalprofits); mpz_init(mpzTotalprofits);
mpz_init(mpzTotalcostbasis); mpz_init(mpzTotalcostbasis);
int64_t totalbets = 0; int64_t totalposition = 0;
int64_t totalprofits = 0; int64_t totalprofits = 0;
for (auto b : betinfo.bets) { for (auto b : betinfo.bets) {
@@ -1729,26 +1730,26 @@ int32_t prices_getbetinfo(uint256 bettxid, BetInfo &betinfo)
mpz_mul_ui(mpzProduct, mpzProduct, (uint64_t)b.positionsize); // b.costbasis * b.amount mpz_mul_ui(mpzProduct, mpzProduct, (uint64_t)b.positionsize); // b.costbasis * b.amount
mpz_add(mpzTotalcostbasis, mpzTotalcostbasis, mpzProduct); //averageCostbasis += b.costbasis * b.amount; mpz_add(mpzTotalcostbasis, mpzTotalcostbasis, mpzProduct); //averageCostbasis += b.costbasis * b.amount;
mpz_add_ui(mpzTotalbets, mpzTotalbets, (uint64_t)b.positionsize); //totalbets += b.amount; mpz_add_ui(mpzTotalPosition, mpzTotalPosition, (uint64_t)b.positionsize); //totalposition += b.amount;
mpz_add(mpzTotalprofits, mpzTotalprofits, mpzProfits); //totalprofits += b.profits; mpz_add(mpzTotalprofits, mpzTotalprofits, mpzProfits); //totalprofits += b.profits;
totalbets += b.positionsize; totalposition += b.positionsize;
totalprofits += b.profits; totalprofits += b.profits;
mpz_clear(mpzProduct); mpz_clear(mpzProduct);
mpz_clear(mpzProfits); mpz_clear(mpzProfits);
} }
betinfo.equity = totalbets + totalprofits; betinfo.equity = totalposition + totalprofits;
//int64_t averageCostbasis = 0; //int64_t averageCostbasis = 0;
if (mpz_get_ui(mpzTotalbets) != 0) { //prevent zero div if (mpz_get_ui(mpzTotalPosition) != 0) { //prevent zero div
mpz_t mpzAverageCostbasis; mpz_t mpzAverageCostbasis;
mpz_init(mpzAverageCostbasis); mpz_init(mpzAverageCostbasis);
//averageCostbasis = totalcostbasis / totalbets; //averageCostbasis = totalcostbasis / totalposition;
mpz_mul_ui(mpzTotalcostbasis, mpzTotalcostbasis, SATOSHIDEN); // profits *= SATOSHIDEN normalization to prevent loss of significance while division mpz_mul_ui(mpzTotalcostbasis, mpzTotalcostbasis, SATOSHIDEN); // profits *= SATOSHIDEN normalization to prevent loss of significance while division
mpz_tdiv_q(mpzAverageCostbasis, mpzTotalcostbasis, mpzTotalbets); mpz_tdiv_q(mpzAverageCostbasis, mpzTotalcostbasis, mpzTotalPosition);
mpz_tdiv_q_ui(mpzAverageCostbasis, mpzAverageCostbasis, SATOSHIDEN); // profits /= SATOSHIDEN de-normalization mpz_tdiv_q_ui(mpzAverageCostbasis, mpzAverageCostbasis, SATOSHIDEN); // profits /= SATOSHIDEN de-normalization
@@ -1766,10 +1767,10 @@ int32_t prices_getbetinfo(uint256 bettxid, BetInfo &betinfo)
else else
{ {
betinfo.isRekt = true; betinfo.isRekt = true;
betinfo.exitfee = totalbets / 500; betinfo.exitfee = totalposition / 500;
} }
mpz_clear(mpzTotalbets); mpz_clear(mpzTotalPosition);
mpz_clear(mpzTotalprofits); mpz_clear(mpzTotalprofits);
mpz_clear(mpzTotalcostbasis); mpz_clear(mpzTotalcostbasis);
return 0; return 0;
@@ -1821,11 +1822,11 @@ UniValue PricesRekt(int64_t txfee, uint256 bettxid, int32_t rektheight)
return(result); return(result);
} }
int64_t totalbets = 0; int64_t totalposition = 0;
int64_t totalprofits = 0; int64_t totalprofits = 0;
for (auto b : betinfo.bets) { for (auto b : betinfo.bets) {
totalbets += b.positionsize; totalposition += b.positionsize;
totalprofits += b.profits; totalprofits += b.profits;
} }
@@ -1906,11 +1907,11 @@ UniValue PricesCashout(int64_t txfee, uint256 bettxid)
return(result); return(result);
} }
int64_t totalbets = 0; int64_t totalposition = 0;
int64_t totalprofits = 0; int64_t totalprofits = 0;
for (auto b : betinfo.bets) { for (auto b : betinfo.bets) {
totalbets += b.positionsize; totalposition += b.positionsize;
totalprofits += b.profits; totalprofits += b.profits;
} }
@@ -2211,7 +2212,7 @@ void prices_getorderbook(std::map<std::string, std::vector<BetInfo> > & bookmatc
fundTotals.totalFund = 0; fundTotals.totalFund = 0;
fundTotals.totalRekt = 0; fundTotals.totalRekt = 0;
fundTotals.totalEquity = 0; fundTotals.totalEquity = 0;
fundTotals.totalBets = 0; fundTotals.totalActiveBets = 0;
std::vector<std::pair<CAddressUnspentKey, CAddressUnspentValue> > addressCCunspents; std::vector<std::pair<CAddressUnspentKey, CAddressUnspentValue> > addressCCunspents;
SetCCunspents(addressCCunspents, cp->unspendableCCaddr, true); // cc marker SetCCunspents(addressCCunspents, cp->unspendableCCaddr, true); // cc marker
@@ -2224,12 +2225,12 @@ void prices_getorderbook(std::map<std::string, std::vector<BetInfo> > & bookmatc
// extract out opposite bets: // extract out opposite bets:
while (book.size() > 0) { while (book.size() > 0) {
int64_t betspos = 0; int64_t totalPos = 0;
for (auto bet : book[0].bets) betspos += bet.positionsize; for (auto bet : book[0].bets) totalPos += bet.positionsize;
if (!book[0].isRekt) { if (book[0].isOpen) {
fundTotals.totalBets += betspos; fundTotals.totalActiveBets += totalPos;
fundTotals.totalEquity += book[0].equity; fundTotals.totalEquity += book[0].equity;
if (book[0].vecparsed.size() <= 3) { // only short expr check for match: "BTC_USD,1" or "BTC_USD,!,1" if (book[0].vecparsed.size() <= 3) { // only short expr check for match: "BTC_USD,1" or "BTC_USD,!,1"
@@ -2255,7 +2256,11 @@ void prices_getorderbook(std::map<std::string, std::vector<BetInfo> > & bookmatc
} }
} }
else { else {
fundTotals.totalRekt += (betspos - book[0].exitfee); if( book[0].isRekt )
fundTotals.totalRekt += (totalPos - book[0].exitfee);
else
fundTotals.totalCashout += (totalPos - book[0].exitfee);
//TODO: store rekt //TODO: store rekt
} }
book.erase(book.begin()); book.erase(book.begin());
@@ -2368,10 +2373,10 @@ UniValue PricesGetOrderbook()
} */ } */
result.push_back(Pair("TotalFund", ValueFromAmount(fundTotals.totalFund))); result.push_back(Pair("TotalFund", ValueFromAmount(fundTotals.totalFund)));
result.push_back(Pair("TotalRekt", ValueFromAmount(fundTotals.totalRekt)));
result.push_back(Pair("TotalBets", ValueFromAmount(fundTotals.totalBets)));
result.push_back(Pair("TotalEquity", ValueFromAmount(fundTotals.totalEquity))); result.push_back(Pair("TotalEquity", ValueFromAmount(fundTotals.totalEquity)));
result.push_back(Pair("TotalRekt", ValueFromAmount(fundTotals.totalRekt)));
result.push_back(Pair("TotalBets", ValueFromAmount(fundTotals.totalActiveBets)));
result.push_back(Pair("TotalCashoutBets", ValueFromAmount(fundTotals.totalCashout)));
// result.push_back(Pair("TotalLiabilities", ValueFromAmount(totalLiabilities))); // result.push_back(Pair("TotalLiabilities", ValueFromAmount(totalLiabilities)));
return result; return result;