Dust management USDT fix and some code cleanup
This commit is contained in:
parent
bd1b3c0fbc
commit
07a997b7a4
|
@ -2,7 +2,6 @@ package nl.komtek.gpi.controllers;
|
|||
|
||||
import com.cf.data.map.poloniex.PoloniexDataMapper;
|
||||
import com.cf.data.model.poloniex.PoloniexChartData;
|
||||
import com.cf.data.model.poloniex.PoloniexCompleteBalance;
|
||||
import com.cf.data.model.poloniex.PoloniexTradeHistory;
|
||||
import com.google.gson.JsonArray;
|
||||
import com.google.gson.JsonElement;
|
||||
|
@ -136,10 +135,8 @@ public class GunbotProxyController {
|
|||
String key = request.getHeader("key");
|
||||
market = gunbotProxyService.getMarket(key);
|
||||
}
|
||||
String result = gunbotProxyService.getCompleteBalances(market);
|
||||
result = hideDust(result);
|
||||
|
||||
return result;
|
||||
return gunbotProxyService.getCompleteBalances(market);
|
||||
}
|
||||
|
||||
@RequestMapping(value = "/tradingApi/**", params = "command=returnOpenOrders")
|
||||
|
@ -202,16 +199,6 @@ public class GunbotProxyController {
|
|||
@RequestParam BigDecimal rate,
|
||||
@RequestParam BigDecimal amount) throws IOException {
|
||||
|
||||
boolean globalSellOnlyMode = Boolean.parseBoolean(util.getConfigurationProperty("sellOnlyMode"));
|
||||
boolean pairSellOnlyMode = Boolean.parseBoolean(util.getConfigurationProperty(String.format("%s_sellOnlyMode", currencyPair)));
|
||||
if (globalSellOnlyMode || pairSellOnlyMode) {
|
||||
JsonObject jsonObject = new JsonObject();
|
||||
String message = String.format("You are not allowed to buy. Sell Only mode is active for %s", currencyPair);
|
||||
jsonObject.addProperty("error", message);
|
||||
logger.info(jsonObject.toString());
|
||||
return jsonObject.toString();
|
||||
}
|
||||
|
||||
String key = request.getHeader("key");
|
||||
if (doubleBuyProtection || doubleBuyProtectionSeconds > 0) {
|
||||
return gunbotProxyService.buyOrderWithProtection(key, currencyPair, rate, amount);
|
||||
|
@ -299,34 +286,4 @@ public class GunbotProxyController {
|
|||
}
|
||||
return jsonArray;
|
||||
}
|
||||
|
||||
private String hideDust(String result) {
|
||||
boolean hidedust = Boolean.parseBoolean(util.getConfigurationProperty("hideDust"));
|
||||
if (!hidedust) {
|
||||
return result;
|
||||
}
|
||||
JsonParser jsonParser = new JsonParser();
|
||||
JsonElement jElement = jsonParser.parse(result);
|
||||
JsonObject jObject = jElement.getAsJsonObject();
|
||||
JsonObject filteredObject = new JsonObject();
|
||||
for (Map.Entry entry : jObject.entrySet()) {
|
||||
JsonElement element = (JsonElement) entry.getValue();
|
||||
BigDecimal available = BigDecimal.valueOf(element.getAsJsonObject().get("available").getAsDouble());
|
||||
BigDecimal onOrders = BigDecimal.valueOf(element.getAsJsonObject().get("onOrders").getAsDouble());
|
||||
BigDecimal btcValue = BigDecimal.valueOf(element.getAsJsonObject().get("btcValue").getAsDouble());
|
||||
|
||||
if (available.doubleValue() == 0) {
|
||||
filteredObject.add(entry.getKey().toString(), element);
|
||||
}
|
||||
|
||||
double approximatePrice = btcValue.doubleValue() / available.add(onOrders).doubleValue();
|
||||
double availableValue = available.doubleValue() * approximatePrice;
|
||||
if (availableValue < 0.00015) {
|
||||
available = BigDecimal.ZERO;
|
||||
}
|
||||
PoloniexCompleteBalance balance = new PoloniexCompleteBalance(available, onOrders, btcValue);
|
||||
filteredObject.add(entry.getKey().toString(), jsonParser.parse(balance.toString()));
|
||||
}
|
||||
return filteredObject.toString();
|
||||
}
|
||||
}
|
||||
|
|
|
@ -3,6 +3,7 @@ package nl.komtek.gpi.services;
|
|||
import com.cf.PriceDataAPIClient;
|
||||
import com.cf.client.poloniex.PoloniexPublicAPIClient;
|
||||
import com.cf.client.poloniex.PoloniexTradingAPIClient;
|
||||
import com.cf.data.model.poloniex.PoloniexCompleteBalance;
|
||||
import com.google.gson.JsonElement;
|
||||
import com.google.gson.JsonObject;
|
||||
import com.google.gson.JsonParser;
|
||||
|
@ -245,7 +246,8 @@ public class GunbotProxyService {
|
|||
|
||||
@Cacheable(value = "completeBalances", key = "#market", sync = true)
|
||||
public String getCompleteBalances(String market) {
|
||||
return getCompleteBalancesScheduled(market);
|
||||
String result = getCompleteBalancesScheduled(market);
|
||||
return hideDust(result);
|
||||
}
|
||||
|
||||
@CachePut(value = "completeBalances", key = "#market")
|
||||
|
@ -320,11 +322,22 @@ public class GunbotProxyService {
|
|||
@CacheEvict(value = "completeBalances", allEntries = true)})
|
||||
public synchronized String buyOrderWithProtection(String key, String currencyPair, BigDecimal buyPrice, BigDecimal amount) {
|
||||
boolean testMode = Boolean.parseBoolean(util.getConfigurationProperty("testMode"));
|
||||
boolean globalSellOnlyMode = Boolean.parseBoolean(util.getConfigurationProperty("sellOnlyMode"));
|
||||
boolean pairSellOnlyMode = Boolean.parseBoolean(util.getConfigurationProperty(String.format("%s_sellOnlyMode", currencyPair)));
|
||||
|
||||
if (testMode) {
|
||||
logger.info("Test mode: We bought {}", currencyPair);
|
||||
return "";
|
||||
}
|
||||
|
||||
if (globalSellOnlyMode || pairSellOnlyMode) {
|
||||
JsonObject jsonObject = new JsonObject();
|
||||
String message = String.format("You are not allowed to buy. Sell Only mode is active for %s", currencyPair);
|
||||
jsonObject.addProperty("error", message);
|
||||
logger.info(jsonObject.toString());
|
||||
return jsonObject.toString();
|
||||
}
|
||||
|
||||
PoloniexTradingAPIClient tmpTradingAPIClient;
|
||||
if (isUsingMultipleMarkets()) {
|
||||
tmpTradingAPIClient = getMultiMarketTradingClient(key);
|
||||
|
@ -457,4 +470,36 @@ public class GunbotProxyService {
|
|||
.onFailedAttempt(this::handleException)
|
||||
.get(() -> analyzeResult(tradingAPIClient.returnOpenOrders("ALL")));
|
||||
}
|
||||
|
||||
private String hideDust(String result) {
|
||||
boolean hidedust = Boolean.parseBoolean(util.getConfigurationProperty("hideDust"));
|
||||
if (!hidedust) {
|
||||
return result;
|
||||
}
|
||||
JsonParser jsonParser = new JsonParser();
|
||||
JsonElement jElement = jsonParser.parse(result);
|
||||
JsonObject jObject = jElement.getAsJsonObject();
|
||||
JsonObject filteredObject = new JsonObject();
|
||||
for (Map.Entry entry : jObject.entrySet()) {
|
||||
JsonElement element = (JsonElement) entry.getValue();
|
||||
BigDecimal available = BigDecimal.valueOf(element.getAsJsonObject().get("available").getAsDouble());
|
||||
BigDecimal onOrders = BigDecimal.valueOf(element.getAsJsonObject().get("onOrders").getAsDouble());
|
||||
BigDecimal btcValue = BigDecimal.valueOf(element.getAsJsonObject().get("btcValue").getAsDouble());
|
||||
|
||||
if (available.doubleValue() == 0) {
|
||||
filteredObject.add(entry.getKey().toString(), element);
|
||||
}
|
||||
|
||||
double approximatePrice = btcValue.doubleValue() / available.add(onOrders).doubleValue();
|
||||
double availableValue = available.doubleValue() * approximatePrice;
|
||||
if (!entry.getKey().equals("USDT") && availableValue < 0.00015) {
|
||||
available = BigDecimal.ZERO;
|
||||
} else if (entry.getKey().equals("USDT") && available.doubleValue() < 1) {
|
||||
available = BigDecimal.ZERO;
|
||||
}
|
||||
PoloniexCompleteBalance balance = new PoloniexCompleteBalance(available, onOrders, btcValue);
|
||||
filteredObject.add(entry.getKey().toString(), jsonParser.parse(balance.toString()));
|
||||
}
|
||||
return filteredObject.toString();
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue