mirror of
https://github.com/discountry/ritmex-bot.git
synced 2026-09-11 09:18:08 +00:00
commit
This commit is contained in:
@@ -0,0 +1,97 @@
|
||||
- [Margin Loan Borrow Buy Sell Repay](./examples/py/)
|
||||
|
||||
|
||||
```python
|
||||
import os
|
||||
import sys
|
||||
|
||||
# PLEASE DO NOT EDIT THIS FILE, IT IS GENERATED AND WILL BE OVERWRITTEN:
|
||||
# https://github.com/ccxt/ccxt/blob/master/CONTRIBUTING.md#how-to-contribute-code
|
||||
|
||||
# AUTO-TRANSPILE #
|
||||
# Note, this is just an example and might not yet work on other exchanges, which are being still unified.
|
||||
async def example():
|
||||
# ########## user inputs ##########
|
||||
exchange = getattr(ccxt, 'binance')({
|
||||
'apiKey': 'xxx',
|
||||
'secret': 'xxx',
|
||||
})
|
||||
symbol = 'BUSD/USDT' # set target symbol
|
||||
margin_mode = 'isolated' # margin mode (cross or isolated)
|
||||
collateral_coin = 'USDT' # which asset you want to use for margin-borrow collateral
|
||||
borrow_coin = 'BUSD' # which coin to borrow
|
||||
order_side = 'sell' # which side to trade
|
||||
amount_to_trade = 14 # how many coins to sell
|
||||
order_type = 'limit' # order type (can be market, limit or etc)
|
||||
limit_price = 0.99 # price to sell at (set undefined/null/None if market-order)
|
||||
margin_magnitude = 5 # target margin (aka 'leverage'). This might also be obtainable using other unified methods, but for example purposes, we set here manually
|
||||
# ########## end of user-inputs ##########
|
||||
#
|
||||
# for example purposes, let's also check available balance at first
|
||||
balance_margin = await exchange.fetch_balance({
|
||||
'defaultType': 'margin',
|
||||
'marginMode': margin_mode,
|
||||
}) # use `defaultType` because of temporary bug, otherwise, after several days, you can use `type` too.
|
||||
# if we don't have enought coins, then we have to borrow at first
|
||||
needed_amount_to_borrow = None # will be auto-set below
|
||||
if amount_to_trade > balance_margin[symbol][borrow_coin]['free']:
|
||||
needed_amount_to_borrow = amount_to_trade - balance_margin[symbol][borrow_coin]['free']
|
||||
print('hmm, I have only ', balance_margin[symbol][borrow_coin]['free'], ' ', borrow_coin, ' in margin balance, and still need additional ', needed_amount_to_borrow, ' to make an order. Lets borrow it.')
|
||||
# To initate a borrow, at first, check if we have enough collateral (for this example, as we make a sell-short, we need '-1' to keep for collateral currency)
|
||||
needed_collateral_amount = needed_amount_to_borrow / (margin_magnitude - 1)
|
||||
# Check if we have any collateral to get permission for borrow
|
||||
if balance_margin[symbol][collateral_coin]['free'] < needed_collateral_amount:
|
||||
# If we don't have enough collateral, then let's try to transfer collateral-asset from spot-balance to margin-balance
|
||||
print('hmm, I have only ', balance_margin[symbol][collateral_coin]['free'], ' in balance, but ', needed_collateral_amount, ' collateral is needed. I should transfer ', needed_collateral_amount, ' from spot')
|
||||
# let's check if we have spot balance at all
|
||||
balance_spot = await exchange.fetch_balance({
|
||||
'type': 'spot',
|
||||
})
|
||||
if exchange.parse_number(balance_spot[collateral_coin]['free']) < needed_collateral_amount:
|
||||
print('hmm, I neither do have enough balance on spot - only ', balance_spot[collateral_coin]['free'], '. Script can not continue...')
|
||||
return
|
||||
else:
|
||||
print('Transferring ', needed_collateral_amount, ' to margin account')
|
||||
await exchange.transfer(collateral_coin, needed_collateral_amount, 'spot', margin_mode, {
|
||||
'symbol': symbol,
|
||||
})
|
||||
# now, as we have enough margin collateral, initiate borrow
|
||||
print('Initiating margin borrow of ', needed_amount_to_borrow, ' ', borrow_coin)
|
||||
borrow_result = await exchange.borrow_margin(borrow_coin, needed_amount_to_borrow, symbol, {
|
||||
'marginMode': margin_mode,
|
||||
})
|
||||
print('Submitting order.')
|
||||
order = await exchange.create_order(symbol, order_type, order_side, amount_to_trade, limit_price, {
|
||||
'marginMode': margin_mode,
|
||||
})
|
||||
print('Order was submitted !', order['id'])
|
||||
#
|
||||
#
|
||||
# ...
|
||||
# ...
|
||||
# some time later, if you want to repay the loan back (like 'close the position')...
|
||||
# ...
|
||||
# ...
|
||||
#
|
||||
#
|
||||
# set the "repay-back" amount (for this example snippet, this will be same amount that we borrowed above)
|
||||
if needed_amount_to_borrow is not None:
|
||||
amount_to_repay_back = needed_amount_to_borrow
|
||||
# At first, you need to get back the borrowed coin, by making an opposide trade
|
||||
print('Making purchase back of ', amount_to_repay_back, ' ', borrow_coin, ' to repay it back.')
|
||||
purchase_back_price = 1.01
|
||||
order_back = await exchange.create_order(symbol, order_type, ('sell' if order_side == 'buy' else 'buy'), amount_to_repay_back, purchase_back_price, {
|
||||
'marginMode': margin_mode,
|
||||
})
|
||||
print('Now, repaying the loan.')
|
||||
repay_result = await exchange.repay_margin(borrow_coin, amount_to_repay_back, symbol, {
|
||||
'marginMode': margin_mode,
|
||||
})
|
||||
print('finished.')
|
||||
|
||||
await exchange.close()
|
||||
|
||||
|
||||
asyncio.run(example())
|
||||
|
||||
```
|
||||
Reference in New Issue
Block a user