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()


请求参数

参数名类型是否必须描述
instIdString产品ID,如 BTC-USD-SWAP

返回参数

参数名类型描述
instTypeString产品类型
instIdString产品ID
lastString最新成交价
lastSzString最新成交的数量,0 代表没有成交量
askPxString卖一价
askSzString卖一价对应的数量
bidPxString买一价
bidSzString买一价对应的数量
open24hString24小时开盘价
high24hString24小时最高价
low24hString24小时最低价
volCcy24hString24小时成交量,以为单位
如果是衍生品合约,数值为交易货币的数量。
如果是币币/币币杠杆,数值为计价货币的数量。
vol24hString24小时成交量,以为单位
如果是衍生品合约,数值为合约的张数。
如果是币币/币币杠杆,数值为交易货币的数量。
sodUtc0StringUTC+0 时开盘价
sodUtc8StringUTC+8 时开盘价
tsStringticker数据产生时间,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()

请求参数

参数名类型是否必须描述
ccyString币种,如 BTC
支持多币种查询(不超过20个),币种之间半角逗号分隔

返回参数

参数名类型描述
uTimeString账户信息的更新时间,Unix时间戳的毫秒数格式,如 1597026383085
totalEqString美金层面权益
isoEqString美金层面逐仓仓位权益
适用于现货和合约模式/跨币种保证金模式/组合保证金模式
adjEqString美金层面有效保证金
适用于现货模式/跨币种保证金模式/组合保证金模式
ordFrozString美金层面全仓挂单占用保证金
仅适用于现货模式/跨币种保证金模式/组合保证金模式
imrString美金层面占用保证金
适用于现货模式/跨币种保证金模式/组合保证金模式
mmrString美金层面维持保证金
适用于现货模式/跨币种保证金模式/组合保证金模式
borrowFrozString账户美金层面潜在借币占用保证金
仅适用于现货模式/跨币种保证金模式/组合保证金模式。在其他账户模式下为""。
mgnRatioString美金层面保证金率
适用于现货模式/跨币种保证金模式/组合保证金模式
notionalUsdString以美金价值为单位的持仓数量,即仓位美金价值
适用于现货模式/跨币种保证金模式/组合保证金模式
notionalUsdForBorrowString借币金额(美元价值)
适用于现货模式/跨币种保证金模式/组合保证金模式
notionalUsdForSwapString永续合约持仓美元价值
适用于跨币种保证金模式/组合保证金模式
notionalUsdForFuturesString交割合约持仓美元价值
适用于跨币种保证金模式/组合保证金模式
notionalUsdForOptionString期权持仓美元价值
适用于现货模式/跨币种保证金模式/组合保证金模式
uplString账户层面全仓未实现盈亏(美元单位)
适用于跨币种保证金模式/组合保证金模式
detailsArray of objects各币种资产详细信息
> ccyString币种
> eqString币种总权益
> cashBalString币种余额
> uTimeString币种余额信息的更新时间,Unix时间戳的毫秒数格式,如 1597026383085
> isoEqString币种逐仓仓位权益
适用于现货和合约模式/跨币种保证金模式/组合保证金模式
> availEqString可用保证金
适用于现货和合约模式/跨币种保证金模式/组合保证金模式
> disEqString美金层面币种折算权益
适用于现货模式(开通了借币功能)/跨币种保证金模式/组合保证金模式
> fixedBalString抄底宝、逃顶宝功能的币种冻结金额
> availBalString可用余额
> frozenBalString币种占用金额
> ordFrozenString挂单冻结数量
适用于现货模式/现货和合约模式/跨币种保证金模式
> liabString币种负债额
值为正数,如 "21625.64"
适用于现货模式/跨币种保证金模式/组合保证金模式
> uplString未实现盈亏
适用于现货和合约模式/跨币种保证金模式/组合保证金模式
> uplLiabString由于仓位未实现亏损导致的负债
适用于跨币种保证金模式/组合保证金模式
> crossLiabString币种全仓负债额
适用于现货模式/跨币种保证金模式/组合保证金模式
> isoLiabString币种逐仓负债额
适用于跨币种保证金模式/组合保证金模式
> rewardBalString体验金余额
> mgnRatioString币种全仓保证金率,衡量账户内某项资产风险的指标
适用于现货和合约模式且有全仓仓位时
> imrString币种维度全仓占用保证金
适用于现货和合约模式且有全仓仓位时
> mmrString币种维度全仓维持保证金
适用于现货和合约模式且有全仓仓位时
> interestString计息,应扣未扣利息
值为正数,如 9.01
适用于现货模式/跨币种保证金模式/组合保证金模式
> twapString当前负债币种触发系统自动换币的风险
0、1、2、3、4、5其中之一,数字越大代表您的负债币种触发自动换币概率越高
适用于现货模式/跨币种保证金模式/组合保证金模式
> maxLoanString币种最大可借
适用于现货模式/跨币种保证金模式/组合保证金模式 的全仓
> eqUsdString币种权益美金价值
> borrowFrozString币种美金层面潜在借币占用保证金
仅适用于现货模式/跨币种保证金模式/组合保证金模式。在其他账户模式下为""。
> notionalLeverString币种杠杆倍数
适用于现货和合约模式
> stgyEqString策略权益
> isoUplString逐仓未实现盈亏
适用于现货和合约模式/跨币种保证金模式/组合保证金模式
> spotInUseAmtString现货对冲占用数量
适用于组合保证金模式
> clSpotInUseAmtString用户自定义现货占用数量
适用于组合保证金模式
> maxSpotInUseString系统计算得到的最大可能现货占用数量
适用于组合保证金模式
> spotIsoBalString现货逐仓余额
仅适用于现货带单/跟单
适用于现货模式/现货和合约模式
> smtSyncEqString合约智能跟单权益
默认为0,仅适用于跟单人。
> spotCopyTradingEqString现货智能跟单权益
默认为0,仅适用于跟单人。
> spotBalString现货余额 ,单位为 币种,比如 BTC。详情
> openAvgPxString现货开仓成本价 单位 USD。 详情
> accAvgPxString现货累计成本价 单位 USD。 详情
> spotUplString现货未实现收益,单位 USD。 详情
> spotUplRatioString现货未实现收益率。详情
> totalPnlString现货累计收益,单位 USD。 详情
> totalPnlRatioString现货累计收益率。详情
> totalPnlRatioString现货累计收益率。详情
> collateralEnabledBooleantrue:质押币
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()

 请求参数

参数名类型是否必须描述
instIdString产品ID,如 BTC-USDT
支持多产品ID查询(不超过5个),半角逗号分隔
tdModeString交易模式
cross:全仓
isolated:逐仓
cash:非保证金
spot_isolated:现货逐仓
ccyString可选保证金币种,适用于逐仓杠杆现货和合约模式下的全仓杠杆
reduceOnlyBoolean是否为只减仓模式,仅适用于币币杠杆
pxString平仓价格,默认为市价。
仅适用于杠杆只减仓
quickMgnTypeString一键借币类型,仅适用于杠杆逐仓的一键借币模式:
manual:手动,auto_borrow:自动借币,auto_repay:自动还币
默认是manual:手动(已弃用)

 返回参数

参数名类型描述
instIdString产品ID
availBuyString最大买入可用余额/保证金
availSellString最大卖出可用余额/保证金

4.查看持仓信息

# 查看持仓信息
# View position information
result = accountAPI.get_positions()
print('查看持仓信息:')
print(result)
print()

请求参数

参数名类型是否必须描述
instTypeString产品类型
MARGIN:币币杠杆
SWAP:永续合约
FUTURES:交割合约
OPTION:期权
instTypeinstId同时传入的时候会校验instIdinstType是否一致。
instIdString交易产品ID,如:BTC-USDT-SWAP
支持多个instId查询(不超过10个),半角逗号分隔
posIdString持仓ID
支持多个posId查询(不超过20个)。
存在有效期的属性,自最近一次完全平仓算起,满30天 posId 以及整个仓位会被清除。

 如果该 instId 拥有过仓位且当前持仓量为0,传 instId 时,如果当前存在有效的posId,会返回仓位信息,如果当前不存在有效的 posId 时,不会返回仓位信息;不传 instId 时,仓位信息不返回。

 逐仓交易设置中,如果设置为自主划转模式,逐仓转入保证金后,会生成一个持仓量为0的仓位。

返回参数

参数名类型描述
instTypeString产品类型
mgnModeString保证金模式
cross:全仓
isolated:逐仓
posIdString持仓ID
posSideString持仓方向
long:开平仓模式开多,pos为正
short:开平仓模式开空,pos为正
net:买卖模式(交割/永续/期权pos为正代表开多,pos为负代表开空。币币杠杆时,pos均为正,posCcy为交易货币时,代表开多;posCcy为计价货币时,代表开空。)
posString持仓数量,逐仓自主划转模式下,转入保证金后会产生pos为0的仓位
baseBalString交易币余额,适用于 币币杠杆(逐仓一键借币模式)(已弃用)
quoteBalString计价币余额 ,适用于 币币杠杆(逐仓一键借币模式)(已弃用)
baseBorrowedString交易币已借,适用于 币币杠杆(逐仓一键借币模式)(已弃用)
baseInterestString交易币计息,适用于 币币杠杆(逐仓一键借币模式)(已弃用)
quoteBorrowedString计价币已借,适用于 币币杠杆(逐仓一键借币模式)(已弃用)
quoteInterestString计价币计息,适用于 币币杠杆(逐仓一键借币模式)(已弃用)
posCcyString仓位资产币种,仅适用于币币杠杆仓位
availPosString可平仓数量,适用于 币币杠杆期权
对于杠杆仓位,平仓时,杠杆还清负债后,余下的部分会视为币币交易,如果想要减少币币交易的数量,可通过"获取最大可用数量"接口获取只减仓的可用数量。
avgPxString开仓均价
会随结算周期变化,特别是在交割合约全仓模式下,结算时开仓均价会更新为结算价格,同时新增头寸也会改变开仓均价。
nonSettleAvgPxString未结算均价
不受结算影响的加权开仓价格,仅在新增头寸时更新,和开仓均价的主要区别在于是否受到结算影响。
仅适用于全仓交割
uplString未实现收益(以标记价格计算)
uplRatioString未实现收益率(以标记价格计算
uplLastPxString以最新成交价格计算的未实现收益,主要做展示使用,实际值还是 upl
uplRatioLastPxString以最新成交价格计算的未实现收益率
instIdString产品ID,如 BTC-USDT-SWAP
leverString杠杆倍数,不适用于期权以及组合保证金模式下的全仓仓位
liqPxString预估强平价
不适用于期权
markPxString最新标记价格
imrString初始保证金,仅适用于全仓
marginString保证金余额,可增减,仅适用于逐仓
mgnRatioString保证金率
mmrString维持保证金
liabString负债额,仅适用于币币杠杆
liabCcyString负债币种,仅适用于币币杠杆
interestString利息,已经生成的未扣利息
tradeIdString最新成交ID
optValString期权市值,仅适用于期权
pendingCloseOrdLiabValString逐仓杠杆负债对应平仓挂单的数量
notionalUsdString以美金价值为单位的持仓数量
adlString信号区
分为5档,从1到5,数字越小代表adl强度越弱
ccyString占用保证金的币种
lastString最新成交价
idxPxString最新指数价格
usdPxString保证金币种的市场最新美金价格 仅适用于期权
bePxString盈亏平衡价
deltaBSString美金本位持仓仓位delta,仅适用于期权
deltaPAString币本位持仓仓位delta,仅适用于期权
gammaBSString美金本位持仓仓位gamma,仅适用于期权
gammaPAString币本位持仓仓位gamma,仅适用于期权
thetaBSString美金本位持仓仓位theta,仅适用于期权
thetaPAString币本位持仓仓位theta,仅适用于期权
vegaBSString美金本位持仓仓位vega,仅适用于期权
vegaPAString币本位持仓仓位vega,仅适用于期权
spotInUseAmtString现货对冲占用数量
适用于组合保证金模式
spotInUseCcyString现货对冲占用币种,如 BTC
适用于组合保证金模式
clSpotInUseAmtString用户自定义现货占用数量
适用于组合保证金模式
maxSpotInUseAmtString系统计算得到的最大可能现货占用数量
适用于组合保证金模式
realizedPnlString已实现收益
仅适用于交割/永续/期权
realizedPnl=pnl+fee+fundingFee+liqPenalty+settledPnl
settledPnlString已结算收益
仅适用于全仓交割
pnlString平仓订单累计收益额
feeString累计手续费金额,正数代表平台返佣 ,负数代表平台扣除
fundingFeeString累计资金费用
liqPenaltyString累计爆仓罚金,有值时为负数。
closeOrderAlgoArray of object平仓策略委托订单。调用策略委托下单,且closeFraction=1 时,该数组才会有值。
> algoIdString策略委托单ID
> slTriggerPxString止损触发价
> slTriggerPxTypeString止损触发价类型
last:最新价格
index:指数价格
mark:标记价格
> tpTriggerPxString止盈委托价
> tpTriggerPxTypeString止盈触发价类型
last:最新价格
index:指数价格
mark:标记价格
> closeFractionString策略委托触发时,平仓的百分比。1 代表100%
cTimeString持仓创建时间,Unix时间戳的毫秒数格式,如 1597026383085
uTimeString最近一次持仓更新时间,Unix时间戳的毫秒数格式,如 1597026383085
bizRefIdString外部业务id,如 体验券id
bizRefTypeString外部业务类型

 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:现货模式):

请求参数

返回参数

参数名类型描述
uidString当前请求的账户ID,账户uid和app上的一致
mainUidString当前请求的母账户ID
如果 uid = mainUid,代表当前账号为母账户;如果 uid != mainUid,代表当前账户为子账户。
acctLvString账户模式
1:现货模式
2:现货和合约模式
3:跨币种保证金模式
4:组合保证金模式
acctStpModeString账户自成交保护模式
cancel_maker:撤销挂单
cancel_taker:撤销吃单
cancel_both:撤销挂单和吃单
用户可通过母账户登录网页修改该配置
posModeString持仓方式
long_short_mode:开平仓模式
net_mode:买卖模式
仅适用交割/永续
autoLoanBoolean是否自动借币
true:自动借币 false:非自动借币
greeksTypeString当前希腊字母展示方式
PA:币本位 BS:美元本位
levelString当前在平台上真实交易量的用户等级,例如 Lv1
levelTmpString特约用户的临时体验用户等级,例如 Lv3
ctIsoModeString衍生品的逐仓保证金划转模式
automatic:开仓划转
autonomy:自主划转
mgnIsoModeString币币杠杆的逐仓保证金划转模式
auto_transfers_ccy:新版开仓自动划转,支持交易货币及计价货币作为保证金
automatic:开仓划转
quick_margin:一键借币(对于新的账户,包括新的子账户,有些默认是开仓划转,另外的默认是一键借币)
spotOffsetTypeString现货对冲类型
1:现货对冲模式U模式
2:现货对冲模式币模式
3:非现货对冲模式
适用于组合保证金模式
已废弃
roleTypeString用户角色
0:普通用户
1:带单者
2:跟单者
traderInstsArray of strings当前账号已经设置的带单合约,仅适用于带单者
spotRoleTypeString现货跟单角色。
0:普通用户;1:带单者;2:跟单者
spotTraderInstsArray of strings当前账号已经设置的带单币对,仅适用于带单者
opAuthString是否开通期权交易
0:未开通
1:已经开通
kycLvString母账户KYC等级
0: 未认证
1: 已完成 level 1 认证
2: 已完成 level 2 认证
3: 已完成 level 3认证
如果请求来自子账户, kycLv 为其母账户的等级
如果请求来自母账户, kycLv 为当前请求的母账户等级
labelString当前请求API key的备注名,不超过50位字母(区分大小写)或数字,可以是纯字母或纯数字。
ipString当前请求API key绑定的ip地址,多个ip用半角逗号隔开,如:117.37.203.58,117.37.203.57
如果没有绑定ip,会返回空字符串""
permString当前请求的 API key 或 Access token 的权限
read_only:读取
trade:交易
withdraw:提币
liquidationGearString强平提醒的保证金率水平
3 和 -1 代表保证金率达到 300% 时,每隔 1 小时 app 和 ”爆仓风险预警推送频道“会推送通知。-1 是初始值,与-3有着同样效果
0 代表不提醒
enableSpotBorrowBoolean现货模式下是否支持借币
true:支持
false:不支持
spotBorrowAutoRepayBoolean现货模式下是否支持自动还币
true:支持
false:不支持
typeString账户类型
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()

可以发现成功了,改成了 现货和合约模式  !!!

请求参数

参数名类型是否必须描述
acctLvString账户模式
1: 现货模式
2: 现货和合约模式
3: 跨币种保证金模式
4: 组合保证金模式

返回参数

参数名类型描述
acctLvString账户模式

(未完待续)

参考文档:click

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值