added lev position calc
This commit is contained in:
@@ -72,6 +72,7 @@ GetKomodoEarlytxidScriptPub is on line #2080 of komodo_bitcoind.h
|
|||||||
#include "CCassets.h"
|
#include "CCassets.h"
|
||||||
#include "CCPrices.h"
|
#include "CCPrices.h"
|
||||||
|
|
||||||
|
#include <cstdlib>
|
||||||
#include <gmp.h>
|
#include <gmp.h>
|
||||||
|
|
||||||
#define IS_CHARINSTR(c, str) (std::string(str).find((char)(c)) != std::string::npos)
|
#define IS_CHARINSTR(c, str) (std::string(str).find((char)(c)) != std::string::npos)
|
||||||
@@ -1142,8 +1143,13 @@ int64_t prices_syntheticprice(std::vector<uint16_t> vec, int32_t height, int32_t
|
|||||||
mpz_clear(mpzTotalPrice);
|
mpz_clear(mpzTotalPrice);
|
||||||
mpz_clear(mpzPriceValue);
|
mpz_clear(mpzPriceValue);
|
||||||
|
|
||||||
if (errcode != 0)
|
if (errcode != 0)
|
||||||
std::cerr << "prices_syntheticprice errcode in switch=" << errcode << std::endl;
|
std::cerr << "prices_syntheticprice errcode in switch=" << errcode << std::endl;
|
||||||
|
|
||||||
|
if( errcode = -1 ) {
|
||||||
|
std::cerr << "prices_syntheticprice error getting price (could be end of chain)" << std::endl;
|
||||||
|
return errcode;
|
||||||
|
}
|
||||||
|
|
||||||
if (errcode == -13) {
|
if (errcode == -13) {
|
||||||
std::cerr << "prices_syntheticprice overflow in price" << std::endl;
|
std::cerr << "prices_syntheticprice overflow in price" << std::endl;
|
||||||
@@ -2021,6 +2027,40 @@ static bool prices_addbookentry(uint256 txid, std::vector<BetInfo> &book)
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
static bool prices_ispositionup(BetInfo p) {
|
||||||
|
if (p.vecparsed.size() <= 3) {
|
||||||
|
uint16_t opcode = p.vecparsed[0];
|
||||||
|
|
||||||
|
int32_t value = (opcode & (KOMODO_MAXPRICES - 1)); // index or weight
|
||||||
|
|
||||||
|
if ((opcode & KOMODO_PRICEMASK)) {
|
||||||
|
char name[65];
|
||||||
|
if (komodo_pricename(name, value)) {
|
||||||
|
std::string upperquote, bottomquote;
|
||||||
|
prices_splitpair(std::string(name), upperquote, bottomquote);
|
||||||
|
|
||||||
|
if (upperquote == "BTC" || bottomquote == "BTC") { // it is relatively btc
|
||||||
|
if (upperquote == "BTC" && (p.leverage > 0 || (opcode & KOMODO_PRICEMASK) != PRICES_INV) ||
|
||||||
|
bottomquote == "BTC" && (p.leverage < 0 || (opcode & KOMODO_PRICEMASK) == PRICES_INV))
|
||||||
|
return true;
|
||||||
|
else
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (upperquote == "USD" || bottomquote == "USD") { // it is relatively usd
|
||||||
|
if (upperquote == "USD" && (p.leverage > 0 || (opcode & KOMODO_PRICEMASK) != PRICES_INV) ||
|
||||||
|
bottomquote == "USD" && (p.leverage < 0 || (opcode & KOMODO_PRICEMASK) == PRICES_INV))
|
||||||
|
return true;
|
||||||
|
else
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
static bool prices_isopposite(BetInfo p1, BetInfo p2) {
|
static bool prices_isopposite(BetInfo p1, BetInfo p2) {
|
||||||
if (p1.vecparsed.size() <= 3 && p2.vecparsed.size() <= 3) { // simple synthetic exp
|
if (p1.vecparsed.size() <= 3 && p2.vecparsed.size() <= 3) { // simple synthetic exp
|
||||||
|
|
||||||
@@ -2133,14 +2173,16 @@ UniValue PricesGetOrderbook()
|
|||||||
for (auto m : bookmatched) {
|
for (auto m : bookmatched) {
|
||||||
int64_t totalLeveragedPositionUp = 0;
|
int64_t totalLeveragedPositionUp = 0;
|
||||||
int64_t totalLeveragedPositionDown = 0;
|
int64_t totalLeveragedPositionDown = 0;
|
||||||
int64_t totalLeverageUp = 0;
|
|
||||||
int64_t totalLeverageDown = 0;
|
|
||||||
|
|
||||||
|
|
||||||
for (int i = 0; i < m.second.size(); i++) {
|
for (int i = 0; i < m.second.size(); i++) {
|
||||||
|
int64_t betspos = 0;
|
||||||
|
for (auto bet : m.second[i].bets) betspos += bet.positionsize;
|
||||||
|
if (prices_ispositionup(m.second[i]))
|
||||||
|
totalLeveragedPositionUp += betspos * abs(m.second[i].leverage);
|
||||||
|
else
|
||||||
|
totalLeveragedPositionDown += betspos * abs(m.second[i].leverage);
|
||||||
}
|
}
|
||||||
matchedTotals[m.first].diffLeveragedPosition = totalLeveragedPositionUp / totalLeverageUp - totalLeveragedPositionDown / totalLeverageDown;
|
matchedTotals[m.first].diffLeveragedPosition = totalLeveragedPositionUp - totalLeveragedPositionDown;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -2156,6 +2198,7 @@ UniValue PricesGetOrderbook()
|
|||||||
result.push_back(Pair("unmatched", resbook)); */
|
result.push_back(Pair("unmatched", resbook)); */
|
||||||
|
|
||||||
for (auto m : bookmatched) {
|
for (auto m : bookmatched) {
|
||||||
|
UniValue mathedBookHeader(UniValue::VOBJ);
|
||||||
UniValue resbook(UniValue::VARR);
|
UniValue resbook(UniValue::VARR);
|
||||||
for (int i = 0; i < m.second.size(); i++) {
|
for (int i = 0; i < m.second.size(); i++) {
|
||||||
UniValue entry(UniValue::VOBJ);
|
UniValue entry(UniValue::VOBJ);
|
||||||
@@ -2165,7 +2208,9 @@ UniValue PricesGetOrderbook()
|
|||||||
entry.push_back(Pair("equity", m.second[i].equity));
|
entry.push_back(Pair("equity", m.second[i].equity));
|
||||||
resbook.push_back(entry);
|
resbook.push_back(entry);
|
||||||
}
|
}
|
||||||
result.push_back(Pair(m.first, resbook));
|
mathedBookHeader.push_back(Pair("positions", resbook));
|
||||||
|
mathedBookHeader.push_back(Pair("DiffLeveragedPosition", matchedTotals[m.first].diffLeveragedPosition));
|
||||||
|
result.push_back(Pair(m.first, mathedBookHeader));
|
||||||
}
|
}
|
||||||
|
|
||||||
int64_t totalLiabilities = 0;
|
int64_t totalLiabilities = 0;
|
||||||
|
|||||||
Reference in New Issue
Block a user