繁体   English   中英

使用ccxt python在Binance的现货和期货之间转移USDT

[英]Transfer USDT between spot and futures in Binance using ccxt python

exchange =   ccxt.binance({
--
"apiKey": 'xxx',
"secret": 'xxx',
'options': {
'adjustForTimeDifference': True
},
'enableRateLimit': True
})
 
exchange_f = ccxt.binance({
"apiKey": 'yyy',
"secret": 'yyy',
'options': {
'defaultType': 'future',
'adjustForTimeDifference': True
},
'enableRateLimit': True
})

exchange.load_markets()
exchange_f.load_markets()

#some calculations here

 if np.sum(sell_long_1) > 0:
            exchange.create_market_sell_order("ETH/USDT", np.sum(sell_long_1))
        elif np.sum(sell_short_1) < 0:
            exchange_f.create_market_buy_order("ETH/USDT", -np.sum(sell_short_1))
            account_balance_f = exchange_f.fetch_balance()['free']['USDT']
            exchange.sapi_post_futures_transfer({
                'asset': 'USDT',
                'amount': account_balance_f,
                'type': 2
            })

您好,我正在使用 Python 进行算法交易。让我试着解释一下我的问题:

  1. 由于币安的资金费率,我在现货市场做多,在期货市场做空。
  2. 我的代码总是将免费的 USDT 转移到现货余额。 如果没有position,USDT会一直在现货钱包里。
  3. 当我想做空时,代码将 USDT 转移到期货钱包并在 ETH / USDT 永续市场开空 position。 在关闭 ETH/USDT 期货市场的空头头寸后,代码将免费的 USDT 转移到现货钱包。
  4. 所以假设我全空头 position。然后一半的空头头寸被触发平仓。 该代码正在关闭一半的空头头寸,并使用上面的代码检查期货钱包中的免费 USDT 金额。 假设平掉一半仓位后,期货钱包中的可用USDT余额为100 USDT。
  5. 然后代码将免费的 100 USDT 从期货钱包转移到现货钱包。 但是我这里出现了“资产转移失败:余额不足”的错误。
  6. 我猜错误的原因是,当时我有100 USDT,但我的另一半头寸仍然是空头。 因此,如果价格上涨并且我在那几毫秒内亏损,期货钱包中的免费 USDT 数量将少于 100 USDT。

我的问题是:

  1. 这个问题有什么有效的解决办法吗? 你有什么建议?
  2. 如果代码中有错误,它将停止运行。 我如何更新转账部分的代码,如果由于转账余额不足而出现错误,请再次尝试将未来钱包余额的99%(account_balance_f * 99%)转入现货钱包。

非常感谢您提前抽出时间。

这个问题有什么有效的解决办法吗? 你有什么建议?

如果您使用隔离保证金模式,当您的 position 的价值上升/下降时,您的余额不会改变。 在隔离模式下,你的抵押品被放入一个子账户,但在交叉模式下,它全部取自同一个池,这就是为什么你的余额会随着你的头寸大小而增加或减少 go

您可以使用exchange.setMarginMode( symbol, 'isolated'); 对于每个市场。

您可以在此处阅读有关逐仓保证金模式的更多信息

如果代码中有错误,它将停止运行。 我如何更新转账部分的代码,如果由于转账余额不足而出现错误,请再次尝试将未来钱包余额的99%(account_balance_f * 99%)转入现货钱包。

你知道 Python 中的错误处理/异常吗?


我还建议使用统一的传输方法,而不是sapi_post_futures_transfer这是一个例子

# -*- coding: utf-8 -*-

import os
import sys
from pprint import pprint

root = os.path.dirname(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
sys.path.append(root + '/python')

import ccxt  # noqa: E402


def main():

    # apiKey must have universal transfer permissions
    binance = ccxt.binance({
        "apiKey": "...",
        "secret": "...",
    })
    binance.load_markets()

    pprint(binance.transfer('USDT', 0.1, 'spot', 'future'))
    transfers = binance.fetchTransfers()
    pprint('got ' + str(len(transfers)) + ' transfers')
    pprint(binance.transfer('USDT', 0.1, 'spot', 'margin'))

    # binance requires from and to in the params
    pprint(binance.fetchTransfers(None, None, None, {'from': 'spot', 'to': 'margin'}))

    # alternatively the same effect as above
    pprint(binance.fetchTransfers(None, None, None, {'type': 'MAIN_MARGIN'}))  # defaults to MAIN_UMFUTURE


main()

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM