okx量化 - python操作合约交易示例1-开源代码

本文介绍一下用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:期权
instTypeinstId同时传入的时候会校验instIdinstType是否一致。
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:托管交易子账户 - Copper
9:资管交易子账户 - Copper
12:托管交易子账户 - 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