corr total calc for cashout
This commit is contained in:
@@ -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;
|
||||||
|
|||||||
Reference in New Issue
Block a user