bybit-api icon indicating copy to clipboard operation
bybit-api copied to clipboard

How do I calculate qty in USDT Perpetual with leverage

Open rohitbhirud opened this issue 3 years ago • 3 comments

First of all, amazing library.

I'm creating a conditional order but don't know how do I calculate quantity. Is it based on leveraged amount or original?

for example

I have balance of 50 USDT and want to use 100% per trade with following conditions.

BTC at price 44,089.50 with 50x leverage. SHIB at price 0.030810 with 50x leverage.

How do I calculate the qty parameter?

rohitbhirud avatar Feb 15 '22 17:02 rohitbhirud

First of all, amazing library.

I'm creating a conditional order but don't know how do I calculate quantity. Is it based on leveraged amount or original?

for example

I have balance of 50 USDT and want to use 100% per trade with following conditions.

BTC at price 44,089.50 with 50x leverage. SHIB at price 0.030810 with 50x leverage.

How do I calculate the qty parameter?

I have the same problem here, did you figure it out?

noobSam1122 avatar Mar 05 '22 11:03 noobSam1122

I did some maths and wrote a function a long time ago. It supports both inverse and usdt perpetual.

/**
 * Calculate order quantity
 * @param inverse true = Inverse Perpetual, false = USDT Perpetual
 * @param balance Free balance (Margin asset)
 * @param side true = long, false = short
 * @param price Entry price
 * @param leverage Leverage
 * @param takerFee Taker fee
 * @returns 
 */
const orderQty = (inverse: boolean, balance: number, side: boolean, price: number, leverage: number, takerFee: number) => {
  return inverse ? 
    balance * price * leverage / (1 + takerFee * (2 * leverage + (side ? 1 : -1))) :
    balance / (price * ((1 - takerFee * (side ? 1 : -1)) / leverage + 2 * takerFee));
}

In your case

// BTC at price 44,089.50 with 50x leverage, 50 USDT free balance, 0.06% taker fee
console.log(orderQty(false, 50, true, 44089.5, 50, 0.0006)); // LONG qty 0.05352354453516336
console.log(orderQty(false, 50, false, 44089.5, 50, 0.0006)); // SHORT qty 0.053462986121584066

// SHIB at price 0.030810 with 50x leverage, 50 USDT free balance, 0.06% taker fee
console.log(orderQty(false, 50, true, 0.03081, 50, 0.0006)); // LONG qty 76592.86974304073
console.log(orderQty(false, 50, false, 0.03081, 50, 0.0006)); // SHORT qty 76506.20988664657

You should round down the qty before calling the api. Good Luck.

BattlefieldDuck avatar May 12 '22 15:05 BattlefieldDuck

I'm struggling to understand the API.

Why do you need to know the qty?

shouldn't you be able to put the amount you want to trade, the leverage, and the market order? Boom... done? or am I simplifying things?

rafaelfaria avatar Aug 14 '22 10:08 rafaelfaria