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
:标记价格1597026383085
1597026383085
PM账户下,持仓的 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
:美元本位Lv1
Lv3
automatic
:开仓划转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