首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用ccxt python在期货和现货之间转换USDT

用ccxt python在期货和现货之间转换USDT
EN

Stack Overflow用户
提问于 2022-04-21 05:41:40
回答 1查看 809关注 0票数 0
代码语言:javascript
复制
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做algotrading。让我解释一下我的问题:

  1. 由于融资利率的变化,我在现货市场做多,在期货市场做空。
  2. 我的代码总是把免费的USDT转移到点平衡。如果没有位置,USDT将始终在现货钱包。
  3. 当我想做空时,代码将USDT转到期货钱包,并在ETH / USDT永久市场上做空。在关闭ETH/USDT期货市场的空头头寸后,代码将自由USDT转移到现货钱包。
  4. 因此,假设我处于空仓状态。然后,一半的空头头寸被触发收市。代码正在关闭一半的空头头寸,用上面的代码,它正在检查期货钱包中的自由USDT金额。假设在结束一半的头寸后,期货钱包中的自由USDT余额是100 USDT。
  5. 然后代码将100 USDT从期货钱包转移到现货钱包。但我在这里说的是“资产转移失败:余额不足”的错误。
  6. 我想这个错误的原因是,在那个时候我有100个USDT,但是我的另外一半的位置仍然很短。因此,如果价格上涨,我在那毫秒内赔钱,期货钱包中的自由USDT金额将小于100 USDT。

我的问题是:

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

非常感谢您提前给我时间。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-04-26 11:16:32

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

如果您使用孤立的marginMode,则当您的位置的值上升/下降时,您的余额不会改变。在隔离模式下,抵押品被放入一个子账户,但在交叉模式下,所有这些都来自同一个池,这就是为什么你的余额会随着头寸的大小而上升或下降。

您可以使用exchange.setMarginMode( symbol, 'isolated');为每个市场设置保证金模式。

您可以在这里阅读更多有关隔离边距模式的内容。

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

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

我还建议使用统一转移法,而不是sapi_post_futures_transfer下面是一个例子

代码语言:javascript
复制
# -*- 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()
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71949435

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档