okex.liquidation_price formula update

This commit is contained in:
Sam Germain 2022-01-28 05:47:19 -06:00
parent fe037aa971
commit 7f4894d68e
4 changed files with 20 additions and 57 deletions

View File

@ -289,8 +289,6 @@ class Binance(Exchange):
maintenance_amt: Optional[float] = None, # (Binance) maintenance_amt: Optional[float] = None, # (Binance)
wallet_balance: Optional[float] = None, # (Binance and Gateio) wallet_balance: Optional[float] = None, # (Binance and Gateio)
taker_fee_rate: Optional[float] = None, # (Gateio & Okex) taker_fee_rate: Optional[float] = None, # (Gateio & Okex)
liability: Optional[float] = None, # (Okex)
interest: Optional[float] = None, # (Okex)
mm_ex_1: Optional[float] = 0.0, # (Binance) Cross only mm_ex_1: Optional[float] = 0.0, # (Binance) Cross only
upnl_ex_1: Optional[float] = 0.0, # (Binance) Cross only upnl_ex_1: Optional[float] = 0.0, # (Binance) Cross only
) -> Optional[float]: ) -> Optional[float]:
@ -314,8 +312,6 @@ class Binance(Exchange):
# * Not required by Binance # * Not required by Binance
:param taker_fee_rate: :param taker_fee_rate:
:param liability:
:param interest:
# * Only required for Cross # * Only required for Cross
:param mm_ex_1: (TMM) :param mm_ex_1: (TMM)

View File

@ -2026,8 +2026,6 @@ class Exchange:
maintenance_amt: Optional[float] = None, # (Binance) maintenance_amt: Optional[float] = None, # (Binance)
wallet_balance: Optional[float] = None, # (Binance and Gateio) wallet_balance: Optional[float] = None, # (Binance and Gateio)
taker_fee_rate: Optional[float] = None, # (Gateio & Okex) taker_fee_rate: Optional[float] = None, # (Gateio & Okex)
liability: Optional[float] = None, # (Okex)
interest: Optional[float] = None, # (Okex)
mm_ex_1: Optional[float] = 0.0, # (Binance) Cross only mm_ex_1: Optional[float] = 0.0, # (Binance) Cross only
upnl_ex_1: Optional[float] = 0.0, # (Binance) Cross only upnl_ex_1: Optional[float] = 0.0, # (Binance) Cross only
) -> Optional[float]: ) -> Optional[float]:
@ -2036,12 +2034,12 @@ class Exchange:
:param open_rate: (EP1) Entry price of position :param open_rate: (EP1) Entry price of position
:param is_short: True if the trade is a short, false otherwise :param is_short: True if the trade is a short, false otherwise
:param leverage: The amount of leverage on the trade :param leverage: The amount of leverage on the trade
:param trading_mode: SPOT, MARGIN, FUTURES, etc.
:param position: Absolute value of position size (in base currency)
:param mm_ratio: (MMR) :param mm_ratio: (MMR)
Okex: [assets in the position - (liability +interest) * mark price] / Okex: [assets in the position - (liability +interest) * mark price] /
(maintenance margin + liquidation fee) (maintenance margin + liquidation fee)
# * Note: Binance's formula specifies maintenance margin rate which is mm_ratio * 100% # * Note: Binance's formula specifies maintenance margin rate which is mm_ratio * 100%
:param position: Absolute value of position size (in base currency)
:param trading_mode: SPOT, MARGIN, FUTURES, etc.
:param collateral: Either ISOLATED or CROSS :param collateral: Either ISOLATED or CROSS
# * Binance # * Binance
@ -2051,21 +2049,10 @@ class Exchange:
:param wallet_balance: (WB) :param wallet_balance: (WB)
Cross-Margin Mode: crossWalletBalance Cross-Margin Mode: crossWalletBalance
Isolated-Margin Mode: isolatedWalletBalance Isolated-Margin Mode: isolatedWalletBalance
:param position: Absolute value of position size (in base currency)
# * Gateio & Okex # * Gateio & Okex
:param taker_fee_rate: :param taker_fee_rate:
# * Okex
:param liability:
Initial liabilities + deducted interest
Long positions: Liability is calculated in quote currency.
Short positions: Liability is calculated in trading currency.
:param interest:
Interest that has not been deducted yet.
:param position_assets:
Total position assets on-hold by pending order
# * Cross only (Binance) # * Cross only (Binance)
:param mm_ex_1: (TMM) :param mm_ex_1: (TMM)
Cross-Margin Mode: Maintenance Margin of all other contracts, excluding Contract 1 Cross-Margin Mode: Maintenance Margin of all other contracts, excluding Contract 1
@ -2084,20 +2071,18 @@ class Exchange:
) )
return self.liquidation_price_helper( return self.liquidation_price_helper(
open_rate, open_rate=open_rate,
is_short, is_short=is_short,
leverage, leverage=leverage,
trading_mode, mm_ratio=mm_ratio,
mm_ratio, position=position,
collateral, trading_mode=trading_mode,
maintenance_amt, collateral=collateral,
position, maintenance_amt=maintenance_amt,
wallet_balance, wallet_balance=wallet_balance,
taker_fee_rate, taker_fee_rate=taker_fee_rate,
liability, mm_ex_1=mm_ex_1,
interest, upnl_ex_1=upnl_ex_1,
mm_ex_1,
upnl_ex_1,
) )
def liquidation_price_helper( def liquidation_price_helper(
@ -2112,8 +2097,6 @@ class Exchange:
maintenance_amt: Optional[float] = None, # (Binance) maintenance_amt: Optional[float] = None, # (Binance)
wallet_balance: Optional[float] = None, # (Binance and Gateio) wallet_balance: Optional[float] = None, # (Binance and Gateio)
taker_fee_rate: Optional[float] = None, # (Gateio & Okex) taker_fee_rate: Optional[float] = None, # (Gateio & Okex)
liability: Optional[float] = None, # (Okex)
interest: Optional[float] = None, # (Okex)
mm_ex_1: Optional[float] = 0.0, # (Binance) Cross only mm_ex_1: Optional[float] = 0.0, # (Binance) Cross only
upnl_ex_1: Optional[float] = 0.0, # (Binance) Cross only upnl_ex_1: Optional[float] = 0.0, # (Binance) Cross only
) -> Optional[float]: ) -> Optional[float]:

View File

@ -64,8 +64,6 @@ class Gateio(Exchange):
maintenance_amt: Optional[float] = None, # (Binance) maintenance_amt: Optional[float] = None, # (Binance)
wallet_balance: Optional[float] = None, # (Binance and Gateio) wallet_balance: Optional[float] = None, # (Binance and Gateio)
taker_fee_rate: Optional[float] = None, # (Gateio & Okex) taker_fee_rate: Optional[float] = None, # (Gateio & Okex)
liability: Optional[float] = None, # (Okex)
interest: Optional[float] = None, # (Okex)
mm_ex_1: Optional[float] = 0.0, # (Binance) Cross only mm_ex_1: Optional[float] = 0.0, # (Binance) Cross only
upnl_ex_1: Optional[float] = 0.0, # (Binance) Cross only upnl_ex_1: Optional[float] = 0.0, # (Binance) Cross only
) -> Optional[float]: ) -> Optional[float]:
@ -87,8 +85,6 @@ class Gateio(Exchange):
:param taker_fee_rate: :param taker_fee_rate:
# * Not required by Gateio # * Not required by Gateio
:param liability:
:param interest:
:param mm_ex_1: :param mm_ex_1:
:param upnl_ex_1: :param upnl_ex_1:
""" """

View File

@ -40,8 +40,6 @@ class Okex(Exchange):
maintenance_amt: Optional[float] = None, # (Binance) maintenance_amt: Optional[float] = None, # (Binance)
wallet_balance: Optional[float] = None, # (Binance and Gateio) wallet_balance: Optional[float] = None, # (Binance and Gateio)
taker_fee_rate: Optional[float] = None, # (Gateio & Okex) taker_fee_rate: Optional[float] = None, # (Gateio & Okex)
liability: Optional[float] = None, # (Okex)
interest: Optional[float] = None, # (Okex)
mm_ex_1: Optional[float] = 0.0, # (Binance) Cross only mm_ex_1: Optional[float] = 0.0, # (Binance) Cross only
upnl_ex_1: Optional[float] = 0.0, # (Binance) Cross only upnl_ex_1: Optional[float] = 0.0, # (Binance) Cross only
) -> Optional[float]: ) -> Optional[float]:
@ -57,36 +55,26 @@ class Okex(Exchange):
:param mm_ratio: :param mm_ratio:
Okex: [assets in the position - (liability +interest) * mark price] / Okex: [assets in the position - (liability +interest) * mark price] /
(maintenance margin + liquidation fee) (maintenance margin + liquidation fee)
:param position:
Total position assets on-hold by pending order
:param trading_mode: SPOT, MARGIN, FUTURES, etc. :param trading_mode: SPOT, MARGIN, FUTURES, etc.
:param collateral: Either ISOLATED or CROSS :param collateral: Either ISOLATED or CROSS
:param maintenance_amt: # * Not required by Okex :param maintenance_amt: # * Not required by Okex
:param wallet_balance: # * Not required by Okex :param wallet_balance: # * margin_balance?
:param taker_fee_rate: :param taker_fee_rate:
:param liability:
Initial liabilities + deducted interest
Long positions: Liability is calculated in quote currency.
Short positions: Liability is calculated in trading currency.
:param interest: Interest that has not been deducted yet.
:param mm_ex_1: # * Not required by Okex :param mm_ex_1: # * Not required by Okex
:param upnl_ex_1: # * Not required by Okex :param upnl_ex_1: # * Not required by Okex
""" """
if (not liability or not interest or not taker_fee_rate or not position_assets): if (not taker_fee_rate):
raise OperationalException( raise OperationalException(
"Parameters liability, interest, taker_fee_rate, position_assets" "Parameter taker_fee_rate is required by Okex.liquidation_price"
"are required by Okex.liquidation_price"
) )
if trading_mode == TradingMode.FUTURES and collateral == Collateral.ISOLATED: if trading_mode == TradingMode.FUTURES and collateral == Collateral.ISOLATED:
if is_short: if is_short:
return (liability + interest) * (1 + mm_ratio) * (1 + taker_fee_rate) return (margin_balance + (face_value * number_of_contracts * open_price)) / [face_value * number_of_contracts * (mm_ratio + taker_fee_rate + 1)]
else: else:
return ( return (margin_balance - (face_value * number_of_contracts * open_price)) / [face_value * number_of_contracts * (mm_ratio + taker_fee_rate - 1)]
(liability + interest) * (1 + mm_ratio) * (1 + taker_fee_rate) /
position_assets
)
else: else:
raise OperationalException( raise OperationalException(
f"Okex does not support {collateral.value} Mode {trading_mode.value} trading") f"Okex does not support {collateral.value} Mode {trading_mode.value} trading")