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

请求参数
| 参数名 | 类型 | 是否必须 | 描述 |
|---|---|---|---|
| instId | String | 是 | 产品ID,如 BTC-USD-SWAP |
返回参数
| 参数名 | 类型 | 描述 |
|---|---|---|
| instType | String | 产品类型 |
| instId | String | 产品ID |
| last | String | 最新成交价 |
| lastSz | String | 最新成交的数量,0 代表没有成交量 |
| askPx | String | 卖一价 |
| askSz | String | 卖一价对应的数量 |
| bidPx | String | 买一价 |
| bidSz | String | 买一价对应的数量 |
| open24h | String | 24小时开盘价 |
| high24h | String | 24小时最高价 |
| low24h | String | 24小时最低价 |
| volCcy24h | String | 24小时成交量,以币为单位 如果是衍生品合约,数值为交易货币的数量。 如果是币币/币币杠杆,数值为计价货币的数量。 |
| vol24h | String | 24小时成交量,以张为单位 如果是衍生品合约,数值为合约的张数。 如果是币币/币币杠杆,数值为交易货币的数量。 |
| sodUtc0 | String | UTC+0 时开盘价 |
| sodUtc8 | String | UTC+8 时开盘价 |
| ts | String | ticker数据产生时间,Unix时间戳的毫秒数格式,如 1597026383085 |
我们比较关心的是当前价格,也就是last字段的值。
2.查看账户余额
要填写自己的apikey、secretkey、passphrase
python
# 查看账户余额
# View account balance
accountAPI = Account.AccountAPI(apikey, secretkey, passphrase, False, flag)
result = accountAPI.get_account_balance()
print('查看账户余额:')
print(result)
print()

请求参数
| 参数名 | 类型 | 是否必须 | 描述 |
|---|---|---|---|
| ccy | String | 否 | 币种,如 BTC 支持多币种查询(不超过20个),币种之间半角逗号分隔 |
返回参数
| 参数名 | 类型 | 描述 |
|---|---|---|
| uTime | String | 账户信息的更新时间,Unix时间戳的毫秒数格式,如 1597026383085 |
| totalEq | String | 美金层面权益 |
| isoEq | String | 美金层面逐仓仓位权益 适用于现货和合约模式/跨币种保证金模式/组合保证金模式 |
| adjEq | String | 美金层面有效保证金 适用于现货模式/跨币种保证金模式/组合保证金模式 |
| ordFroz | String | 美金层面全仓挂单占用保证金 仅适用于现货模式/跨币种保证金模式/组合保证金模式 |
| imr | String | 美金层面占用保证金 适用于现货模式/跨币种保证金模式/组合保证金模式 |
| mmr | String | 美金层面维持保证金 适用于现货模式/跨币种保证金模式/组合保证金模式 |
| borrowFroz | String | 账户美金层面潜在借币占用保证金 仅适用于现货模式/跨币种保证金模式/组合保证金模式。在其他账户模式下为""。 |
| mgnRatio | String | 美金层面保证金率 适用于现货模式/跨币种保证金模式/组合保证金模式 |
| notionalUsd | String | 以美金价值为单位的持仓数量,即仓位美金价值 适用于现货模式/跨币种保证金模式/组合保证金模式 |
| notionalUsdForBorrow | String | 借币金额(美元价值) 适用于现货模式/跨币种保证金模式/组合保证金模式 |
| notionalUsdForSwap | String | 永续合约持仓美元价值 适用于跨币种保证金模式/组合保证金模式 |
| notionalUsdForFutures | String | 交割合约持仓美元价值 适用于跨币种保证金模式/组合保证金模式 |
| notionalUsdForOption | String | 期权持仓美元价值 适用于现货模式/跨币种保证金模式/组合保证金模式 |
| upl | String | 账户层面全仓未实现盈亏(美元单位) 适用于跨币种保证金模式/组合保证金模式 |
| details | Array of objects | 各币种资产详细信息 |
| > ccy | String | 币种 |
| > eq | String | 币种总权益 |
| > cashBal | String | 币种余额 |
| > uTime | String | 币种余额信息的更新时间,Unix时间戳的毫秒数格式,如 1597026383085 |
| > isoEq | String | 币种逐仓仓位权益 适用于现货和合约模式/跨币种保证金模式/组合保证金模式 |
| > availEq | String | 可用保证金 适用于现货和合约模式/跨币种保证金模式/组合保证金模式 |
| > disEq | String | 美金层面币种折算权益 适用于现货模式(开通了借币功能)/跨币种保证金模式/组合保证金模式 |
| > fixedBal | String | 抄底宝、逃顶宝功能的币种冻结金额 |
| > availBal | String | 可用余额 |
| > frozenBal | String | 币种占用金额 |
| > ordFrozen | String | 挂单冻结数量 适用于现货模式/现货和合约模式/跨币种保证金模式 |
| > liab | String | 币种负债额 值为正数,如 "21625.64" 适用于现货模式/跨币种保证金模式/组合保证金模式 |
| > upl | String | 未实现盈亏 适用于现货和合约模式/跨币种保证金模式/组合保证金模式 |
| > uplLiab | String | 由于仓位未实现亏损导致的负债 适用于跨币种保证金模式/组合保证金模式 |
| > crossLiab | String | 币种全仓负债额 适用于现货模式/跨币种保证金模式/组合保证金模式 |
| > isoLiab | String | 币种逐仓负债额 适用于跨币种保证金模式/组合保证金模式 |
| > rewardBal | String | 体验金余额 |
| > mgnRatio | String | 币种全仓保证金率,衡量账户内某项资产风险的指标 适用于现货和合约模式且有全仓仓位时 |
| > imr | String | 币种维度全仓占用保证金 适用于现货和合约模式且有全仓仓位时 |
| > mmr | String | 币种维度全仓维持保证金 适用于现货和合约模式且有全仓仓位时 |
| > interest | String | 计息,应扣未扣利息 值为正数,如 9.01 适用于现货模式/跨币种保证金模式/组合保证金模式 |
| > twap | String | 当前负债币种触发系统自动换币的风险 0、1、2、3、4、5其中之一,数字越大代表您的负债币种触发自动换币概率越高 适用于现货模式/跨币种保证金模式/组合保证金模式 |
| > maxLoan | String | 币种最大可借 适用于现货模式/跨币种保证金模式/组合保证金模式 的全仓 |
| > eqUsd | String | 币种权益美金价值 |
| > borrowFroz | String | 币种美金层面潜在借币占用保证金 仅适用于现货模式/跨币种保证金模式/组合保证金模式。在其他账户模式下为""。 |
| > notionalLever | String | 币种杠杆倍数 适用于现货和合约模式 |
| > stgyEq | String | 策略权益 |
| > isoUpl | String | 逐仓未实现盈亏 适用于现货和合约模式/跨币种保证金模式/组合保证金模式 |
| > spotInUseAmt | String | 现货对冲占用数量 适用于组合保证金模式 |
| > clSpotInUseAmt | String | 用户自定义现货占用数量 适用于组合保证金模式 |
| > maxSpotInUse | String | 系统计算得到的最大可能现货占用数量 适用于组合保证金模式 |
| > spotIsoBal | String | 现货逐仓余额 仅适用于现货带单/跟单 适用于现货模式/现货和合约模式 |
| > smtSyncEq | String | 合约智能跟单权益 默认为0,仅适用于跟单人。 |
| > spotCopyTradingEq | String | 现货智能跟单权益 默认为0,仅适用于跟单人。 |
| > spotBal | String | 现货余额 ,单位为 币种,比如 BTC。详情 |
| > openAvgPx | String | 现货开仓成本价 单位 USD。 详情 |
| > accAvgPx | String | 现货累计成本价 单位 USD。 详情 |
| > spotUpl | String | 现货未实现收益,单位 USD。 详情 |
| > spotUplRatio | String | 现货未实现收益率。详情 |
| > totalPnl | String | 现货累计收益,单位 USD。 详情 |
| > totalPnlRatio | String | 现货累计收益率。详情 |
| > totalPnlRatio | String | 现货累计收益率。详情 |
| > collateralEnabled | Boolean | true:质押币 false:非质押币 适用于跨币种保证金模式 详情 |
3.最大可用USDT数量
python
# 获取用于购买BTC-USDT-SWAP最大可用USDT数量
# Obtain the maximum available USDT quantity for purchasing BTC-USDT-SWAP
result = accountAPI.get_max_avail_size(
instId="BTC-USDT-SWAP",
tdMode="isolated"
)
print('获取用于购买BTC-USDT-SWAP最大可用USDT数量:')
print(result)
print()
请求参数
| 参数名 | 类型 | 是否必须 | 描述 |
|---|---|---|---|
| instId | String | 是 | 产品ID,如 BTC-USDT 支持多产品ID查询(不超过5个),半角逗号分隔 |
| tdMode | String | 是 | 交易模式 cross:全仓 isolated:逐仓 cash:非保证金 spot_isolated:现货逐仓 |
| ccy | String | 可选 | 保证金币种,适用于逐仓杠杆及现货和合约模式下的全仓杠杆 |
| reduceOnly | Boolean | 否 | 是否为只减仓模式,仅适用于币币杠杆 |
| px | String | 否 | 平仓价格,默认为市价。 仅适用于杠杆只减仓 |
| quickMgnType | String | 否 | 一键借币类型,仅适用于杠杆逐仓的一键借币模式: manual:手动,auto_borrow:自动借币,auto_repay:自动还币 默认是manual:手动(已弃用) |
返回参数
| 参数名 | 类型 | 描述 |
|---|---|---|
| instId | String | 产品ID |
| availBuy | String | 最大买入可用余额/保证金 |
| availSell | String | 最大卖出可用余额/保证金 |
4.查看持仓信息
python
# 查看持仓信息
# View position information
result = accountAPI.get_positions()
print('查看持仓信息:')
print(result)
print()

请求参数
| 参数名 | 类型 | 是否必须 | 描述 |
|---|---|---|---|
| instType | String | 否 | 产品类型 MARGIN:币币杠杆 SWAP:永续合约 FUTURES:交割合约 OPTION:期权 instType和instId同时传入的时候会校验instId与instType是否一致。 |
| instId | String | 否 | 交易产品ID,如:BTC-USDT-SWAP 支持多个instId查询(不超过10个),半角逗号分隔 |
| posId | String | 否 | 持仓ID 支持多个posId查询(不超过20个)。 存在有效期的属性,自最近一次完全平仓算起,满30天 posId 以及整个仓位会被清除。 |
如果该 instId 拥有过仓位且当前持仓量为0,传 instId 时,如果当前存在有效的posId,会返回仓位信息,如果当前不存在有效的 posId 时,不会返回仓位信息;不传 instId 时,仓位信息不返回。
逐仓交易设置中,如果设置为自主划转模式,逐仓转入保证金后,会生成一个持仓量为0的仓位。
返回参数
| 参数名 | 类型 | 描述 |
|---|---|---|
| instType | String | 产品类型 |
| mgnMode | String | 保证金模式 cross:全仓 isolated:逐仓 |
| posId | String | 持仓ID |
| posSide | String | 持仓方向 long:开平仓模式开多,pos为正 short:开平仓模式开空,pos为正 net:买卖模式(交割/永续/期权:pos为正代表开多,pos为负代表开空。币币杠杆时,pos均为正,posCcy为交易货币时,代表开多;posCcy为计价货币时,代表开空。) |
| pos | String | 持仓数量,逐仓自主划转模式下,转入保证金后会产生pos为0的仓位 |
| baseBal | String | 交易币余额,适用于 币币杠杆(逐仓一键借币模式)(已弃用) |
| quoteBal | String | 计价币余额 ,适用于 币币杠杆(逐仓一键借币模式)(已弃用) |
| baseBorrowed | String | 交易币已借,适用于 币币杠杆(逐仓一键借币模式)(已弃用) |
| baseInterest | String | 交易币计息,适用于 币币杠杆(逐仓一键借币模式)(已弃用) |
| quoteBorrowed | String | 计价币已借,适用于 币币杠杆(逐仓一键借币模式)(已弃用) |
| quoteInterest | String | 计价币计息,适用于 币币杠杆(逐仓一键借币模式)(已弃用) |
| posCcy | String | 仓位资产币种,仅适用于币币杠杆仓位 |
| availPos | String | 可平仓数量,适用于 币币杠杆,期权 对于杠杆仓位,平仓时,杠杆还清负债后,余下的部分会视为币币交易,如果想要减少币币交易的数量,可通过"获取最大可用数量"接口获取只减仓的可用数量。 |
| avgPx | String | 开仓均价 会随结算周期变化,特别是在交割合约全仓模式下,结算时开仓均价会更新为结算价格,同时新增头寸也会改变开仓均价。 |
| nonSettleAvgPx | String | 未结算均价 不受结算影响的加权开仓价格,仅在新增头寸时更新,和开仓均价的主要区别在于是否受到结算影响。 仅适用于全仓``交割 |
| upl | String | 未实现收益(以标记价格计算) |
| uplRatio | String | 未实现收益率(以标记价格计算 |
| uplLastPx | String | 以最新成交价格计算的未实现收益,主要做展示使用,实际值还是 upl |
| uplRatioLastPx | String | 以最新成交价格计算的未实现收益率 |
| instId | String | 产品ID,如 BTC-USDT-SWAP |
| lever | String | 杠杆倍数,不适用于期权以及组合保证金模式下的全仓仓位 |
| liqPx | String | 预估强平价 不适用于期权 |
| markPx | String | 最新标记价格 |
| imr | String | 初始保证金,仅适用于全仓 |
| margin | String | 保证金余额,可增减,仅适用于逐仓 |
| mgnRatio | String | 保证金率 |
| mmr | String | 维持保证金 |
| liab | String | 负债额,仅适用于币币杠杆 |
| liabCcy | String | 负债币种,仅适用于币币杠杆 |
| interest | String | 利息,已经生成的未扣利息 |
| tradeId | String | 最新成交ID |
| optVal | String | 期权市值,仅适用于期权 |
| pendingCloseOrdLiabVal | String | 逐仓杠杆负债对应平仓挂单的数量 |
| notionalUsd | String | 以美金价值为单位的持仓数量 |
| adl | String | 信号区 分为5档,从1到5,数字越小代表adl强度越弱 |
| ccy | String | 占用保证金的币种 |
| last | String | 最新成交价 |
| idxPx | String | 最新指数价格 |
| usdPx | String | 保证金币种的市场最新美金价格 仅适用于期权 |
| bePx | String | 盈亏平衡价 |
| deltaBS | String | 美金本位持仓仓位delta,仅适用于期权 |
| deltaPA | String | 币本位持仓仓位delta,仅适用于期权 |
| gammaBS | String | 美金本位持仓仓位gamma,仅适用于期权 |
| gammaPA | String | 币本位持仓仓位gamma,仅适用于期权 |
| thetaBS | String | 美金本位持仓仓位theta,仅适用于期权 |
| thetaPA | String | 币本位持仓仓位theta,仅适用于期权 |
| vegaBS | String | 美金本位持仓仓位vega,仅适用于期权 |
| vegaPA | String | 币本位持仓仓位vega,仅适用于期权 |
| spotInUseAmt | String | 现货对冲占用数量 适用于组合保证金模式 |
| spotInUseCcy | String | 现货对冲占用币种,如 BTC 适用于组合保证金模式 |
| clSpotInUseAmt | String | 用户自定义现货占用数量 适用于组合保证金模式 |
| maxSpotInUseAmt | String | 系统计算得到的最大可能现货占用数量 适用于组合保证金模式 |
| realizedPnl | String | 已实现收益 仅适用于交割/永续/期权 realizedPnl=pnl+fee+fundingFee+liqPenalty+settledPnl |
| settledPnl | String | 已结算收益 仅适用于全仓``交割 |
| pnl | String | 平仓订单累计收益额 |
| fee | String | 累计手续费金额,正数代表平台返佣 ,负数代表平台扣除 |
| fundingFee | String | 累计资金费用 |
| liqPenalty | String | 累计爆仓罚金,有值时为负数。 |
| closeOrderAlgo | Array of object | 平仓策略委托订单。调用策略委托下单,且closeFraction=1 时,该数组才会有值。 |
| > algoId | String | 策略委托单ID |
| > slTriggerPx | String | 止损触发价 |
| > slTriggerPxType | String | 止损触发价类型 last:最新价格 index:指数价格 mark:标记价格 |
| > tpTriggerPx | String | 止盈委托价 |
| > tpTriggerPxType | String | 止盈触发价类型 last:最新价格 index:指数价格 mark:标记价格 |
| > closeFraction | String | 策略委托触发时,平仓的百分比。1 代表100% |
| cTime | String | 持仓创建时间,Unix时间戳的毫秒数格式,如 1597026383085 |
| uTime | String | 最近一次持仓更新时间,Unix时间戳的毫秒数格式,如 1597026383085 |
| bizRefId | String | 外部业务id,如 体验券id |
| bizRefType | String | 外部业务类型 |
PM账户下,持仓的 IMR MMR的数据是后端服务以ristUnit为最小粒度重新计算,相同riskUnit全仓仓位的imr和mmr返回值相同。
5.查看账户配置(交易模式)
python
# 查看账户配置(交易模式)
# GET /api/v5/account/config
result = 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 | String | 当前请求的账户ID,账户uid和app上的一致 |
| mainUid | String | 当前请求的母账户ID 如果 uid = mainUid,代表当前账号为母账户;如果 uid != mainUid,代表当前账户为子账户。 |
| acctLv | String | 账户模式 1:现货模式 2:现货和合约模式 3:跨币种保证金模式 4:组合保证金模式 |
| acctStpMode | String | 账户自成交保护模式 cancel_maker:撤销挂单 cancel_taker:撤销吃单 cancel_both:撤销挂单和吃单 用户可通过母账户登录网页修改该配置 |
| posMode | String | 持仓方式 long_short_mode:开平仓模式 net_mode:买卖模式 仅适用交割/永续 |
| autoLoan | Boolean | 是否自动借币 true:自动借币 false:非自动借币 |
| greeksType | String | 当前希腊字母展示方式 PA:币本位 BS:美元本位 |
| level | String | 当前在平台上真实交易量的用户等级,例如 Lv1 |
| levelTmp | String | 特约用户的临时体验用户等级,例如 Lv3 |
| ctIsoMode | String | 衍生品的逐仓保证金划转模式 automatic:开仓划转 autonomy:自主划转 |
| mgnIsoMode | String | 币币杠杆的逐仓保证金划转模式 auto_transfers_ccy:新版开仓自动划转,支持交易货币及计价货币作为保证金 automatic:开仓划转 quick_margin:一键借币(对于新的账户,包括新的子账户,有些默认是开仓划转,另外的默认是一键借币) |
| spotOffsetType | String | 现货对冲类型 1:现货对冲模式U模式 2:现货对冲模式币模式 3:非现货对冲模式 适用于组合保证金模式 已废弃 |
| roleType | String | 用户角色 0:普通用户 1:带单者 2:跟单者 |
| traderInsts | Array of strings | 当前账号已经设置的带单合约,仅适用于带单者 |
| spotRoleType | String | 现货跟单角色。 0:普通用户;1:带单者;2:跟单者 |
| spotTraderInsts | Array of strings | 当前账号已经设置的带单币对,仅适用于带单者 |
| opAuth | String | 是否开通期权交易 0:未开通 1:已经开通 |
| kycLv | String | 母账户KYC等级 0: 未认证 1: 已完成 level 1 认证 2: 已完成 level 2 认证 3: 已完成 level 3认证 如果请求来自子账户, kycLv 为其母账户的等级 如果请求来自母账户, kycLv 为当前请求的母账户等级 |
| label | String | 当前请求API key的备注名,不超过50位字母(区分大小写)或数字,可以是纯字母或纯数字。 |
| ip | String | 当前请求API key绑定的ip地址,多个ip用半角逗号隔开,如:117.37.203.58,117.37.203.57。 如果没有绑定ip,会返回空字符串"" |
| perm | String | 当前请求的 API key 或 Access token 的权限 read_only:读取 trade:交易 withdraw:提币 |
| liquidationGear | String | 强平提醒的保证金率水平 3 和 -1 代表保证金率达到 300% 时,每隔 1 小时 app 和 "爆仓风险预警推送频道"会推送通知。-1 是初始值,与-3有着同样效果 0 代表不提醒 |
| enableSpotBorrow | Boolean | 现货模式下是否支持借币 true:支持 false:不支持 |
| spotBorrowAutoRepay | Boolean | 现货模式下是否支持自动还币 true:支持 false:不支持 |
| type | String | 账户类型 0:母账户 1:普通子账户 2:资管子账户 5:托管交易子账户 - Copper 9:资管交易子账户 - Copper 12:托管交易子账户 - Komainu |
6.设置账户模式(交易模式)[手动实现]
由于官方没有接口,所以自己实现一个:
python
# 设置账户模式(交易模式) #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()
可以发现成功了,改成了 现货和合约模式 !!!

请求参数
| 参数名 | 类型 | 是否必须 | 描述 |
|---|---|---|---|
| acctLv | String | 是 | 账户模式 1: 现货模式 2: 现货和合约模式 3: 跨币种保证金模式 4: 组合保证金模式 |
返回参数
| 参数名 | 类型 | 描述 |
|---|---|---|
| acctLv | String | 账户模式 |
(未完待续)
参考文档:click