本文介绍一下用python代码结合okx如何获取行情,并且操作合约交易,代码开源,点个赞哦~
1.获取合约行情
行情获取不需要登陆账号,但需要科学上网
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
# 查看账户余额
# 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数量
# 获取用于购买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.查看持仓信息
# 查看持仓信息
# 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.查看账户配置(交易模式)
# 查看账户配置(交易模式)
# 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 :托管交易子账户 - Copper9 :资管交易子账户 - Copper12 :托管交易子账户 - Komainu |
6.设置账户模式(交易模式)[手动实现]
由于官方没有接口,所以自己实现一个:
# 设置账户模式(交易模式) #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