use of com.github.jnidzwetzki.bitfinex.v2.entity.Wallet in project crypto-bot by jnidzwetzki.
the class PortfolioManager method calculatePositionSizes.
/**
* Calculate the position sizes
* @param entries
* @throws APIException
*/
@VisibleForTesting
public void calculatePositionSizes(final Map<BitfinexCurrencyPair, CurrencyEntry> entries) throws APIException {
final Wallet wallet = getWalletForCurrency("USD");
// Wallet could be empty
if (wallet == null) {
throw new APIException("Unable to find USD wallet");
}
final double capitalAvailable = getAvailablePortfolioValueInUSD() * getInvestmentRate();
double capitalNeeded = 0;
for (final BitfinexCurrencyPair currency : entries.keySet()) {
final CurrencyEntry entry = entries.get(currency);
final double positionSize = calculatePositionSize(entry);
entry.setPositionSize(positionSize);
capitalNeeded = capitalNeeded + (positionSize * entry.getEntryPrice());
}
// Need the n% risk per position more than the available capital
if (capitalNeeded > capitalAvailable) {
final double investmentCorrectionFactor = capitalAvailable / capitalNeeded;
logger.info("Needed capital {}, available capital {} ({})", capitalNeeded, capitalAvailable, investmentCorrectionFactor);
capitalNeeded = 0;
for (final BitfinexCurrencyPair currency : entries.keySet()) {
final CurrencyEntry entry = entries.get(currency);
final double newPositionSize = roundPositionSize(entry.getPositionSize() * investmentCorrectionFactor);
entry.setPositionSize(newPositionSize);
capitalNeeded = capitalNeeded + (entry.getPositionSize() * entry.getEntryPrice());
}
}
}
use of com.github.jnidzwetzki.bitfinex.v2.entity.Wallet in project crypto-bot by jnidzwetzki.
the class TestCapitalAllocation method buildPortfolioManager.
/**
* Build the portfolio manager
* @return
* @throws APIException
*/
private PortfolioManager buildPortfolioManager() throws APIException {
final Collection<Wallet> wallets = new ArrayList<>();
wallets.add(new Wallet(Wallet.WALLET_TYPE_EXCHANGE, "USD", 1000, 0, 1000));
final BitfinexApiBroker apiBroker = Mockito.mock(BitfinexApiBroker.class);
final WalletManager walletManager = Mockito.mock(WalletManager.class);
Mockito.when(walletManager.getWallets()).thenReturn(wallets);
Mockito.when(apiBroker.getWalletManager()).thenReturn(walletManager);
return new BasePortfolioManager(apiBroker, 0.05);
}
use of com.github.jnidzwetzki.bitfinex.v2.entity.Wallet in project bitfinex-v2-wss-api-java by jnidzwetzki.
the class WalletHandlerTest method testWalletSnapshot.
/**
* Test the wallet parsing
* @throws APIException
* @throws InterruptedException
*/
@Test(timeout = 20000)
public void testWalletSnapshot() throws APIException, InterruptedException {
final String callbackValue = "[0,\"ws\",[[\"exchange\",\"ETH\",9,0,null],[\"exchange\",\"USD\",1826.56468323,0,null],[\"margin\",\"USD\",0,0,null],[\"exchange\",\"XRP\",0,0,null],[\"exchange\",\"EOS\",0,0,null],[\"exchange\",\"NEO\",0,0,null],[\"exchange\",\"LTC\",0,0,null],[\"exchange\",\"IOT\",0,0,null],[\"exchange\",\"BTC\",0,0,null]]]";
final JSONArray jsonArray = new JSONArray(callbackValue);
final CountDownLatch walletLatch = new CountDownLatch(1);
final Table<String, String, Wallet> walletTable = HashBasedTable.create();
final BitfinexApiBroker bitfinexApiBroker = Mockito.mock(BitfinexApiBroker.class);
final WalletManager walletManager = Mockito.mock(WalletManager.class);
Mockito.when(bitfinexApiBroker.getWalletManager()).thenReturn(walletManager);
Mockito.when(walletManager.getWalletTable()).thenReturn(walletTable);
Mockito.when(bitfinexApiBroker.getConnectionReadyLatch()).thenReturn(walletLatch);
Assert.assertTrue(walletTable.isEmpty());
final WalletHandler walletHandler = new WalletHandler();
walletHandler.handleChannelData(bitfinexApiBroker, jsonArray);
walletLatch.await();
Assert.assertEquals(9, walletTable.size());
Assert.assertEquals(9, walletTable.get("exchange", "ETH").getBalance().doubleValue(), DELTA);
Assert.assertEquals(-1, walletTable.get("exchange", "ETH").getBalanceAvailable().doubleValue(), DELTA);
Assert.assertEquals(0, walletTable.get("exchange", "ETH").getUnsettledInterest().doubleValue(), DELTA);
Assert.assertEquals(1826.56468323, walletTable.get("exchange", "USD").getBalance().doubleValue(), DELTA);
Assert.assertEquals(-1, walletTable.get("exchange", "ETH").getBalanceAvailable().doubleValue(), DELTA);
Assert.assertEquals(0, walletTable.get("exchange", "ETH").getUnsettledInterest().doubleValue(), DELTA);
Assert.assertEquals(0, walletTable.get("margin", "USD").getBalance().doubleValue(), DELTA);
Assert.assertEquals(-1, walletTable.get("margin", "USD").getBalanceAvailable().doubleValue(), DELTA);
Assert.assertEquals(0, walletTable.get("margin", "USD").getUnsettledInterest().doubleValue(), DELTA);
Assert.assertTrue(walletTable.get("margin", "USD").toString().length() > 0);
}
use of com.github.jnidzwetzki.bitfinex.v2.entity.Wallet in project bitfinex-v2-wss-api-java by jnidzwetzki.
the class WalletHandlerTest method testWalletUpdate.
/**
* Test the wallet parsing
* @throws APIException
* @throws InterruptedException
*/
@Test(timeout = 20000)
public void testWalletUpdate() throws APIException, InterruptedException {
final String callbackValue = "[0,\"ws\",[\"exchange\",\"ETH\",9,0,null]]";
final JSONArray jsonArray = new JSONArray(callbackValue);
final CountDownLatch walletLatch = new CountDownLatch(1);
final Table<String, String, Wallet> walletTable = HashBasedTable.create();
final BitfinexApiBroker bitfinexApiBroker = Mockito.mock(BitfinexApiBroker.class);
final WalletManager walletManager = Mockito.mock(WalletManager.class);
Mockito.when(bitfinexApiBroker.getWalletManager()).thenReturn(walletManager);
Mockito.when(walletManager.getWalletTable()).thenReturn(walletTable);
Mockito.when(bitfinexApiBroker.getConnectionReadyLatch()).thenReturn(walletLatch);
Assert.assertTrue(walletTable.isEmpty());
final WalletHandler walletHandler = new WalletHandler();
walletHandler.handleChannelData(bitfinexApiBroker, jsonArray);
walletLatch.await();
Assert.assertEquals(1, walletTable.size());
Assert.assertEquals(9, walletTable.get("exchange", "ETH").getBalance().doubleValue(), DELTA);
Assert.assertEquals(-1, walletTable.get("exchange", "ETH").getBalanceAvailable().doubleValue(), DELTA);
Assert.assertEquals(0, walletTable.get("exchange", "ETH").getUnsettledInterest().doubleValue(), DELTA);
}
use of com.github.jnidzwetzki.bitfinex.v2.entity.Wallet in project bitfinex-v2-wss-api-java by jnidzwetzki.
the class WalletManager method calculateWalletMarginBalance.
/**
* Calculate the wallet margin balance for the given currency (e.g., BTC)
*
* @param symbol
* @throws APIException
*/
public void calculateWalletMarginBalance(final String symbol) throws APIException {
throwExceptionIfUnauthenticated();
bitfinexApiBroker.sendCommand(new CalculateCommand("wallet_margin_" + symbol));
}
Aggregations