okx量化 - python操作合约交易示例1-开源代码_python-okx
本文介绍一下用python代码结合okx如何获取行情,并且操作合约交易,代码开源,点个赞哦~
1.获取合约行情
行情获取不需要登陆账号,但需要科学上网
import timeimport okx.Trade as Tradeimport okx.Account as Accountimport okx.MarketData as MarketData# okx合约开仓平仓操作# OKX contract opening and closing operations# 注意主账号和子账号是分开的,模拟交易也是分开的# API 初始化 #API initializationapikey = \"YOUR_API_KEY\"secretkey = \"YOUR_SECRET_KEY\"passphrase = \"YOUR_PASSPHRASE\"### ---------------------------------------------------------# 获取合约行情# Obtain contract market information# 实盘:0 , 模拟盘:1#Real: 0, simulation: 1flag = \'1\' marketDataAPI = MarketData.MarketAPI(flag=flag)result = marketDataAPI.get_ticker(instId=\'BTC-USDT-SWAP\')print(\'获取合约行情(BTC-USDT-SWAP):\')print(result)print()

请求参数
BTC-USD-SWAP返回参数
币为单位如果是
衍生品合约,数值为交易货币的数量。如果是
币币/币币杠杆,数值为计价货币的数量。张为单位如果是
衍生品合约,数值为合约的张数。如果是
币币/币币杠杆,数值为交易货币的数量。1597026383085我们比较关心的是当前价格,也就是last字段的值。
2.查看账户余额
要填写自己的apikey、secretkey、passphrase
# 查看账户余额# View account balanceaccountAPI = Account.AccountAPI(apikey, secretkey, passphrase, False, flag)result = accountAPI.get_account_balance()print(\'查看账户余额:\')print(result)print()

请求参数
BTC支持多币种查询(不超过20个),币种之间半角逗号分隔
返回参数
1597026383085适用于
现货和合约模式/跨币种保证金模式/组合保证金模式适用于
现货模式/跨币种保证金模式/组合保证金模式仅适用于
现货模式/跨币种保证金模式/组合保证金模式适用于
现货模式/跨币种保证金模式/组合保证金模式适用于
现货模式/跨币种保证金模式/组合保证金模式仅适用于
现货模式/跨币种保证金模式/组合保证金模式。在其他账户模式下为\"\"。适用于
现货模式/跨币种保证金模式/组合保证金模式适用于
现货模式/跨币种保证金模式/组合保证金模式适用于
现货模式/跨币种保证金模式/组合保证金模式适用于
跨币种保证金模式/组合保证金模式适用于
跨币种保证金模式/组合保证金模式适用于
现货模式/跨币种保证金模式/组合保证金模式适用于
跨币种保证金模式/组合保证金模式1597026383085适用于
现货和合约模式/跨币种保证金模式/组合保证金模式适用于
现货和合约模式/跨币种保证金模式/组合保证金模式适用于
现货模式(开通了借币功能)/跨币种保证金模式/组合保证金模式适用于
现货模式/现货和合约模式/跨币种保证金模式值为正数,如 \"21625.64\"
适用于
现货模式/跨币种保证金模式/组合保证金模式适用于
现货和合约模式/跨币种保证金模式/组合保证金模式适用于
跨币种保证金模式/组合保证金模式适用于
现货模式/跨币种保证金模式/组合保证金模式适用于
跨币种保证金模式/组合保证金模式适用于
现货和合约模式且有全仓仓位时适用于
现货和合约模式且有全仓仓位时适用于
现货和合约模式且有全仓仓位时值为正数,如
9.01适用于
现货模式/跨币种保证金模式/组合保证金模式0、1、2、3、4、5其中之一,数字越大代表您的负债币种触发自动换币概率越高
适用于
现货模式/跨币种保证金模式/组合保证金模式适用于
现货模式/跨币种保证金模式/组合保证金模式 的全仓仅适用于
现货模式/跨币种保证金模式/组合保证金模式。在其他账户模式下为\"\"。适用于
现货和合约模式适用于
现货和合约模式/跨币种保证金模式/组合保证金模式适用于
组合保证金模式适用于
组合保证金模式适用于
组合保证金模式仅适用于现货带单/跟单
适用于
现货模式/现货和合约模式默认为0,仅适用于跟单人。
默认为0,仅适用于跟单人。
true:质押币false:非质押币适用于
跨币种保证金模式详情
3.最大可用USDT数量
# 获取用于购买BTC-USDT-SWAP最大可用USDT数量# Obtain the maximum available USDT quantity for purchasing BTC-USDT-SWAPresult = accountAPI.get_max_avail_size( instId=\"BTC-USDT-SWAP\", tdMode=\"isolated\")print(\'获取用于购买BTC-USDT-SWAP最大可用USDT数量:\')print(result)print()
请求参数
BTC-USDT支持多产品ID查询(不超过5个),半角逗号分隔
cross:全仓isolated:逐仓cash:非保证金spot_isolated:现货逐仓逐仓杠杆及现货和合约模式下的全仓杠杆币币杠杆仅适用于杠杆只减仓
manual:手动,auto_borrow:自动借币,auto_repay:自动还币默认是
manual:手动(已弃用)返回参数
4.查看持仓信息
# 查看持仓信息# View position informationresult = accountAPI.get_positions()print(\'查看持仓信息:\')print(result)print()

请求参数
MARGIN:币币杠杆SWAP:永续合约FUTURES:交割合约OPTION:期权instType和instId同时传入的时候会校验instId与instType是否一致。BTC-USDT-SWAP支持多个
instId查询(不超过10个),半角逗号分隔支持多个
posId查询(不超过20个)。存在有效期的属性,自最近一次完全平仓算起,满30天 posId 以及整个仓位会被清除。
如果该 instId 拥有过仓位且当前持仓量为0,传 instId 时,如果当前存在有效的posId,会返回仓位信息,如果当前不存在有效的 posId 时,不会返回仓位信息;不传 instId 时,仓位信息不返回。
逐仓交易设置中,如果设置为自主划转模式,逐仓转入保证金后,会生成一个持仓量为0的仓位。
返回参数
cross:全仓isolated:逐仓long:开平仓模式开多,pos为正short:开平仓模式开空,pos为正net:买卖模式(交割/永续/期权:pos为正代表开多,pos为负代表开空。币币杠杆时,pos均为正,posCcy为交易货币时,代表开多;posCcy为计价货币时,代表开空。)0的仓位币币杠杆(逐仓一键借币模式)(已弃用)币币杠杆(逐仓一键借币模式)(已弃用)币币杠杆(逐仓一键借币模式)(已弃用)币币杠杆(逐仓一键借币模式)(已弃用)币币杠杆(逐仓一键借币模式)(已弃用)币币杠杆(逐仓一键借币模式)(已弃用)币币杠杆仓位币币杠杆,期权对于杠杆仓位,平仓时,杠杆还清负债后,余下的部分会视为币币交易,如果想要减少币币交易的数量,可通过\"获取最大可用数量\"接口获取只减仓的可用数量。
会随结算周期变化,特别是在交割合约全仓模式下,结算时开仓均价会更新为结算价格,同时新增头寸也会改变开仓均价。
不受结算影响的加权开仓价格,仅在新增头寸时更新,和开仓均价的主要区别在于是否受到结算影响。
仅适用于
全仓交割BTC-USDT-SWAP期权以及组合保证金模式下的全仓仓位不适用于
期权全仓逐仓币币杠杆币币杠杆期权分为5档,从1到5,数字越小代表adl强度越弱
期权期权期权期权期权期权期权期权期权适用于
组合保证金模式BTC适用于
组合保证金模式适用于
组合保证金模式适用于
组合保证金模式仅适用于
交割/永续/期权realizedPnl=pnl+fee+fundingFee+liqPenalty+settledPnl仅适用于
全仓交割closeFraction=1 时,该数组才会有值。last:最新价格index:指数价格mark:标记价格last:最新价格index:指数价格mark:标记价格15970263830851597026383085PM账户下,持仓的 IMR MMR的数据是后端服务以ristUnit为最小粒度重新计算,相同riskUnit全仓仓位的imr和mmr返回值相同。
5.查看账户配置(交易模式)
# 查看账户配置(交易模式)# GET /api/v5/account/configresult = accountAPI.get_account_config()print(\'查看账户配置:\')print(result)print()# 账户模式 acctLv (Account mode)# 1:现货模式 Spot mode# 2:现货和合约模式 Spot and contract models# 持仓方式 posMode (Position holding method)# long_short_mode:开平仓模式 可以同时持有多头(买入)和空头(卖出)头寸; The opening and closing mode allows for holding both long (buy) and short (sell) positions simultaneously# net_mode:买卖模式 基于净头寸; Buy and sell mode based on net position
结果如下(默认acctLv为1:现货模式):

请求参数
无
返回参数
如果 uid = mainUid,代表当前账号为母账户;如果 uid != mainUid,代表当前账户为子账户。
1:现货模式2:现货和合约模式3:跨币种保证金模式4:组合保证金模式cancel_maker:撤销挂单cancel_taker:撤销吃单cancel_both:撤销挂单和吃单用户可通过母账户登录网页修改该配置
long_short_mode:开平仓模式net_mode:买卖模式仅适用
交割/永续true:自动借币 false:非自动借币PA:币本位 BS:美元本位Lv1Lv3automatic:开仓划转autonomy:自主划转auto_transfers_ccy:新版开仓自动划转,支持交易货币及计价货币作为保证金automatic:开仓划转quick_margin:一键借币(对于新的账户,包括新的子账户,有些默认是开仓划转,另外的默认是一键借币)1:现货对冲模式U模式2:现货对冲模式币模式3:非现货对冲模式适用于
组合保证金模式已废弃
0:普通用户1:带单者2:跟单者0:普通用户;1:带单者;2:跟单者0:未开通1:已经开通0: 未认证1: 已完成 level 1 认证2: 已完成 level 2 认证3: 已完成 level 3认证如果请求来自子账户, kycLv 为其母账户的等级
如果请求来自母账户, kycLv 为当前请求的母账户等级
117.37.203.58,117.37.203.57。如果没有绑定ip,会返回空字符串\"\"
read_only:读取trade:交易withdraw:提币3 和 -1 代表保证金率达到 300% 时,每隔 1 小时 app 和 ”爆仓风险预警推送频道“会推送通知。-1 是初始值,与-3有着同样效果0 代表不提醒现货模式下是否支持借币true:支持false:不支持现货模式下是否支持自动还币true:支持false:不支持0:母账户1:普通子账户2:资管子账户5:托管交易子账户 - Copper9:资管交易子账户 - Copper12:托管交易子账户 - Komainu6.设置账户模式(交易模式)[手动实现]
由于官方没有接口,所以自己实现一个:
# 设置账户模式(交易模式) #Set account mode (trading mode)# POST /api/v5/account/set-account-level# 这个比较麻烦,官方代码没有实现,我自己(yiyou888wx)实现如下:#This is quite troublesome as the official code has not been implemented. So I implement it as follows:Set_Account_Level = \"/api/v5/account/set-account-level\"class YiyouAPI(Account.AccountAPI): def __init__(self, api_key=\'-1\', api_secret_key=\'-1\', passphrase=\'-1\', use_server_time=None, flag=\'1\', domain=\'https://www.okx.com\', debug=False, proxy=None): super().__init__(api_key, api_secret_key, passphrase, use_server_time, flag, domain, debug, proxy) def set_account_level(self, acctLv=\"1\"): params = {\"acctLv\": str(acctLv)} return self._request_with_params(\"POST\", Set_Account_Level, params)yiyouAPI = YiyouAPI(apikey, secretkey, passphrase, False, flag)result = yiyouAPI.set_account_level(acctLv=\"2\")print(\'设置账户模式,为现货和合约模式:\')print(result)print()result = accountAPI.get_account_config()print(\'查看账户配置:\')print(result)print()
可以发现成功了,改成了 现货和合约模式 !!!

请求参数
1: 现货模式2: 现货和合约模式3: 跨币种保证金模式4: 组合保证金模式返回参数
(未完待续)
参考文档:click


