corr liq price calc

This commit is contained in:
dimxy
2019-05-18 01:36:02 +05:00
parent b932d0fab5
commit 8914898d43

View File

@@ -424,6 +424,9 @@ static bool ValidateFinalTx(struct CCcontract_info *cp, Eval *eval, const CTrans
if( finaltx.vout.size() == 3 && MakeCC1vout(cp->evalcode, finaltx.vout[1].nValue, pricespk) != finaltx.vout[1] ) if( finaltx.vout.size() == 3 && MakeCC1vout(cp->evalcode, finaltx.vout[1].nValue, pricespk) != finaltx.vout[1] )
return eval->Invalid("cannot validate vout1 in final tx with global pk"); return eval->Invalid("cannot validate vout1 in final tx with global pk");
// TODO: validate exitfee for 'R'
// TODO: validate amount for 'F'
return true; return true;
} }
@@ -1262,13 +1265,13 @@ int32_t prices_syntheticprofits(int64_t &costbasis, int32_t firstheight, int32_t
//} //}
} }
else { else {
if (height == firstheight + COSTBASIS_PERIOD) { //if (height == firstheight + COSTBASIS_PERIOD) {
// if costbasis not set, just set it // if costbasis not set, just set it
//costbasis = price; //costbasis = price;
// use calculated minmax costbasis // use calculated minmax costbasis
//std::cerr << "prices_syntheticprofits() use permanent costbasis=" << costbasis << " at height=" << height << std::endl; //std::cerr << "prices_syntheticprofits() use permanent costbasis=" << costbasis << " at height=" << height << std::endl;
} //}
} }
// normalize to 10,000,000 to prevent underflow // normalize to 10,000,000 to prevent underflow
@@ -1619,7 +1622,7 @@ int32_t prices_scanchain(std::vector<OneBetData> &bets, int16_t leverage, std::v
endheight = height; endheight = height;
int64_t equity = totalposition + totalprofits; int64_t equity = totalposition + totalprofits;
if (equity < (double)totalposition * prices_minmarginpercent(leverage)) if (equity <= (int64_t)((double)totalposition * prices_minmarginpercent(leverage)))
{ // we are in loss { // we are in loss
break; break;
} }
@@ -1843,15 +1846,15 @@ int32_t prices_getbetinfo(uint256 bettxid, BetInfo &betinfo)
betinfo.liquidationprice = 0; betinfo.liquidationprice = 0;
if (betinfo.leverage != 0) {// prevent zero div if (betinfo.leverage != 0) {// prevent zero div
betinfo.liquidationprice = betinfo.averageCostbasis - betinfo.averageCostbasis / betinfo.leverage; betinfo.liquidationprice = betinfo.averageCostbasis - (betinfo.averageCostbasis * (1 - prices_minmarginpercent(betinfo.leverage)))/ betinfo.leverage;
} }
if (betinfo.equity >= (double)totalposition * prices_minmarginpercent(betinfo.leverage)) if (betinfo.equity > (int64_t)((double)totalposition * prices_minmarginpercent(betinfo.leverage)))
betinfo.isRekt = false; betinfo.isRekt = false;
else else
{ {
betinfo.isRekt = true; betinfo.isRekt = true;
betinfo.exitfee = totalposition / 500; betinfo.exitfee = (totalposition - betinfo.equity) / 10; // was: totalposition / 500
} }
mpz_clear(mpzTotalPosition); mpz_clear(mpzTotalPosition);