本文介绍一下用python代码结合okx如何获取行情,并且操作合约交易,代码开源,点个赞哦~
书接上文,查看上文。
目录
7.获取杠杆倍数
# 获取杠杆倍数
# Obtain leverage ratio
result = accountAPI.get_leverage(
instId="BTC-USDT-SWAP",
# 保证金模式: 逐仓 #Margin mode: position by position
mgnMode="isolated"
)
print('获取杠杆倍数:')
print(result)
print()
输出结果:
请求参数
参数名 | 类型 | 是否必须 | 描述 |
---|---|---|---|
instId | String | 可选 | 产品ID 支持多个instId查询,半角逗号分隔。instId个数不超过20个。 |
ccy | String | 可选 | 币种,用于币种维度的杠杆。 仅适用于 现货模式 /跨币种保证金模式 /组合保证金模式 的全仓币币杠杆。支持多ccy查询,半角逗号分隔。ccy个数不超过20个。 |
mgnMode | String | 是 | 保证金模式isolated :逐仓cross :全仓 |
返回参数
参数名 | 类型 | 描述 |
---|---|---|
instId | String | 产品ID |
ccy | String | 币种,用于币种维度的杠杆。 仅适用于 现货模式 /跨币种保证金模式 /组合保证金模式 的全仓币币杠杆。 |
mgnMode | String | 保证金模式 |
posSide | String | 持仓方向long :开平仓模式开多short :开平仓模式开空net :买卖模式开平仓模式下会返回两个方向的杠杆倍数 |
lever | String | 杠杆倍数 |
组合保证金账户下交割和永续的全仓不能获取杠杆倍数。
8.设置杠杆倍数
注意:设置杠杆倍数,同时mgnMode也很重要,后面下单合约时,更需要注意,必须和tdMode一样才行,否则失效。
# 设置杠杆倍数
# Set leverage ratio
result = accountAPI.set_leverage(
instId="BTC-USDT-SWAP",
lever="3",
mgnMode="isolated",
posSide="short"
)
print('设置做空杠杆倍数为3:')
print(result)
print()
result = accountAPI.set_leverage(
instId="BTC-USDT-SWAP",
lever="4",
mgnMode="isolated",
posSide="long"
)
print('设置做多杠杆倍数为4:')
print(result)
print()
# 获取杠杆倍数
# Obtain leverage ratio
result = accountAPI.get_leverage(
instId="BTC-USDT-SWAP",
mgnMode="isolated"
)
print('修改后,获取杠杆倍数:')
print(result)
print()
返回结果:
请求参数
参数名 | 类型 | 是否必须 | 描述 |
---|---|---|---|
instId | String | 可选 | 产品ID:币对、合约 全仓下, instId 和ccy 至少要传一个;如果两个都传,默认使用instId |
ccy | String | 可选 | 保证金币种,用于设置开启自动借币模式下币种维度的杠杆。 仅适用于 现货模式 /跨币种保证金模式 /组合保证金模式 的全仓 币币杠杆 。设置自动借币的杠杆倍数时必填 |
lever | String | 是 | 杠杆倍数 |
mgnMode | String | 是 | 保证金模式isolated :逐仓cross :全仓如果 ccy 有效传值,该参数值只能为cross 。 |
posSide | String | 可选 | 持仓方向long :开平仓模式开多short :开平仓模式开空仅适用于逐仓 交割 /永续 在开平仓模式且保证金模式为逐仓条件下必填 |
返回参数
参数名 | 类型 | 描述 |
---|---|---|
lever | String | 杠杆倍数 |
mgnMode | String | 保证金模式isolated :逐仓cross :全仓 |
instId | String | 产品ID |
posSide | String | 持仓方向 |
当希望在指数层面设置交割/永续的全仓杠杆倍数时,传入任意产品ID 和保证金模式(全仓)即可。
组合保证金账户下交割和永续的全仓不能调整杠杆倍数。
9. 4倍杠杆做多
先开多4倍杠杆,10张(这里0.01 BTC为一张)
# 作者威xin(可代写): yiyou888wx
# X / telegram: TraderMaga59800
tradeAPI = Trade.TradeAPI(apikey, secretkey, passphrase, False, flag)
# 4倍杠杆做多 (前面设置过)
# Long with 4x leverage (previously set)
result = tradeAPI.place_order(
instId='BTC-USDT-SWAP',
tdMode='isolated', # 逐仓模式 #Warehouse by warehouse mode
# 注意clOrdId不能用下划线 #Note that clOrdId cannot be underlined
clOrdId='mylong01',
side='buy',
posSide="long",
ordType='market',
sz="10" #单位是一张, 即0.01 BTC #The unit is 0.01 BTC
)
print('4倍杠杆做多:')
print(result)
print()
# 碰到的报错:
# 51000 Parameter clOrdId error 参数错误
# 51010 当前账户模式不支持此操作
# 51169 下单失败,当前合约无持仓,请先取消只减仓设置,再尝试下单
# Order failed. You don't have any positions in this contract that can be closed.
# 51008 可用余额不足 Order failed. Insufficient USDT balance in account.
okx后台交易记录(包括了后面的一些操作):
需要从下往上看! 与我们预期一致~
请求参数
参数名 | 类型 | 是否必须 | 描述 |
---|---|---|---|
instId | String | 是 | 产品ID,如 BTC-USDT |
tdMode | String | 是 | 交易模式 保证金模式: isolated :逐仓 ;cross :全仓非保证金模式: cash :非保证金spot_isolated :现货逐仓(仅适用于现货带单) ,现货带单时,tdMode 的值需要指定为spot_isolated |
ccy | String | 否 | 保证金币种,适用于逐仓杠杆 及现货和合约模式 下的全仓杠杆 订单 |
clOrdId | String | 否 | 客户自定义订单ID 字母(区分大小写)与数字的组合,可以是纯字母、纯数字且长度要在1-32位之间。 |
tag | String | 否 | 订单标签 字母(区分大小写)与数字的组合,可以是纯字母、纯数字,且长度在1-16位之间。 |
side | String | 是 | 订单方向buy :买, sell :卖 |
posSide | String | 可选 | 持仓方向 在开平仓模式下必填,且仅可选择 long 或 short 。 仅适用交割、永续。 |
ordType | String | 是 | 订单类型market :市价单limit :限价单post_only :只做maker单fok :全部成交或立即取消ioc :立即成交并取消剩余optimal_limit_ioc :市价委托立即成交并取消剩余(仅适用交割、永续)mmp :做市商保护(仅适用于组合保证金账户模式下的期权订单)mmp_and_post_only :做市商保护且只做maker单(仅适用于组合保证金账户模式下的期权订单) |
sz | String | 是 | 委托数量 |
px | String | 可选 | 委托价格,仅适用于limit 、post_only 、fok 、ioc 、mmp 、mmp_and_post_only 类型的订单期权下单时,px/pxUsd/pxVol 只能填一个 |
pxUsd | String | 可选 | 以USD价格进行期权下单 仅适用于期权 期权下单时 px/pxUsd/pxVol 必填一个,且只能填一个 |
pxVol | String | 可选 | 以隐含波动率进行期权下单,例如 1 代表 100% 仅适用于期权 期权下单时 px/pxUsd/pxVol 必填一个,且只能填一个 |
reduceOnly | Boolean | 否 | 是否只减仓,true 或 false ,默认false 仅适用于 币币杠杆 ,以及买卖模式下的交割/永续 仅适用于 现货和合约模式 和跨币种保证金模式 |
tgtCcy | String | 否 | 市价单委托数量sz 的单位,仅适用于币币 市价订单base_ccy : 交易货币 ;quote_ccy :计价货币买单默认 quote_ccy , 卖单默认base_ccy |
banAmend | Boolean | 否 | 是否禁止币币市价改单,true 或 false,默认false 为true时,余额不足时,系统不会改单,下单会失败,仅适用于币币市价单 |
quickMgnType | String | 否 | 一键借币类型,仅适用于杠杆逐仓的一键借币模式:manual :手动,auto_borrow :自动借币,auto_repay :自动还币默认是 manual :手动(已弃用) |
stpId | String | 否 | 自成交保护ID。来自同一个母账户配着同一个ID的订单不能自成交 用户自定义1<=x<=999999999的整数(已弃用) |
stpMode | String | 否 | 自成交保护模式 默认为 cancel maker cancel_maker ,cancel_taker , cancel_both Cancel both不支持FOK |
attachAlgoOrds | Array of object | 否 | 下单附带止盈止损信息 |
> attachAlgoClOrdId | String | 否 | 下单附带止盈止损时,客户自定义的策略订单ID 字母(区分大小写)与数字的组合,可以是纯字母、纯数字且长度要在1-32位之间。 订单完全成交,下止盈止损委托单时,该值会传给 algoClOrdId |
> tpTriggerPx | String | 可选 | 止盈触发价 对于条件止盈单,如果填写此参数,必须填写 止盈委托价 |
> tpOrdPx | String | 可选 | 止盈委托价 对于条件止盈单,如果填写此参数,必须填写 止盈触发价 对于限价止盈单,需填写此参数,不需要填写止盈触发价 委托价格为-1时,执行市价止盈 |
> tpOrdKind | String | 否 | 止盈订单类型condition : 条件单limit : 限价单默认为 condition |
> slTriggerPx | String | 可选 | 止损触发价,如果填写此参数,必须填写 止损委托价 |
> slOrdPx | String | 可选 | 止损委托价,如果填写此参数,必须填写 止损触发价 委托价格为-1时,执行市价止损 |
> tpTriggerPxType | String | 否 | 止盈触发价类型last :最新价格index :指数价格mark :标记价格默认为 last |
> slTriggerPxType | String | 否 | 止损触发价类型last :最新价格index :指数价格mark :标记价格默认为 last |
> sz | String | 可选 | 数量。仅适用于“多笔止盈”的止盈订单,且对于“多笔止盈”的止盈订单必填 |
> amendPxOnTriggerType | String | 否 | 是否启用开仓价止损,仅适用于分批止盈的止损订单,第一笔止盈触发时,止损触发价格是否移动到开仓均价止损0 :不开启,默认值1 :开启,且止损触发价不能为空 |
返回参数
参数名 | 类型 | 描述 |
---|---|---|
code | String | 结果代码,0 表示成功 |
msg | String | 错误信息,代码为0时,该字段为空 |
data | Array of objects | 包含结果的对象数组 |
> ordId | String | 订单ID |
> clOrdId | String | 客户自定义订单ID |
> tag | String | 订单标签 |
> ts | String | 系统完成订单请求处理的时间戳,Unix时间戳的毫秒数格式,如 1597026383085 |
> sCode | String | 事件执行结果的code,0代表成功 |
> sMsg | String | 事件执行失败或成功时的msg |
inTime | String | REST网关接收请求时的时间戳,Unix时间戳的微秒数格式,如 1597026383085123 返回的时间是请求验证后的时间。 |
outTime | String | REST网关发送响应时的时间戳,Unix时间戳的微秒数格式,如 1597026383085123 |
tdMode
交易模式,下单时需要指定
现货模式:
- 币币和期权买方:cash
现货和合约模式:
- 逐仓杠杆:isolated
- 全仓杠杆:cross
- 币币:cash
- 全仓交割/永续/期权:cross
- 逐仓交割/永续/期权:isolated
跨币种保证金模式:
- 逐仓杠杆:isolated
- 全仓币币:cross
- 全仓交割/永续/期权:cross
- 逐仓交割/永续/期权:isolated
组合保证金模式:
- 逐仓杠杆:isolated
- 全仓币币:cross
- 全仓交割/永续/期权:cross
- 逐仓交割/永续/期权:isolated
clOrdId
clOrdId是用户自定义的唯一ID用来识别订单。如果在请求参数中传入了,那它一定会在返回参数内,并且可以用于查询订单,撤销订单,修改订单等接口。 clOrdId不能与当前所有的挂单的clOrdId重复
posSide
持仓方向,买卖模式下此参数非必填,如果填写仅可以选择net;在开平仓模式下必填,且仅可选择 long 或 short。
开平仓模式下,side和posSide需要进行组合
开多:买入开多(side 填写 buy; posSide 填写 long )
开空:卖出开空(side 填写 sell; posSide 填写 short )
平多:卖出平多(side 填写 sell;posSide 填写 long )
平空:买入平空(side 填写 buy; posSide 填写 short )
组合保证金模式:交割和永续仅支持买卖模式
ordType
订单类型,创建新订单时必须指定,您指定的订单类型将影响需要哪些订单参数和撮合系统如何执行您的订单,以下是有效的ordType:
普通委托:
limit:限价单,要求指定sz 和 px
market:市价单,币币和币币杠杆,是市价委托吃单;交割合约和永续合约,是自动以最高买/最低卖价格委托,遵循限价机制;期权合约不支持市价委托;由于市价委托无法确定成交价格,为确保有足够的资产买入设定数量的交易币种,会多冻结5%的计价币资产
高级委托:
post_only:限价委托,在下单那一刻只做maker,如果该笔订单的任何部分会吃掉当前挂单深度,则该订单将被全部撤销。
fok:限价委托,全部成交或立即取消,如果无法全部成交该笔订单,则该订单将被全部撤销。
ioc:限价委托,立即成交并取消剩余,立即按照委托价格撮合成交,并取消该订单剩余未完成数量,不会在深度列表上展示委托数量。
optimal_limit_ioc:市价委托,立即成交并取消剩余,仅适用于交割合约和永续合约。
sz
交易数量,表示要购买或者出售的数量。
当币币/币币杠杆以限价买入和卖出时,指交易货币数量。
当币币杠杆以市价买入时,指计价货币的数量。
当币币杠杆以市价卖出时,指交易货币的数量。
对于币币市价单,单位由 tgtCcy 决定
当交割、永续、期权买入和卖出时,指合约张数。
reduceOnly
只减仓,下单时,此参数设置为 true 时,表示此笔订单具有减仓属性,只会减少持仓数量,不会增加新的持仓仓位
对于同一杠杆产品,所有反方向挂单的币数加上当前只减仓下单数量,不能超过仓位资产;负债还完后,如果还有剩余的委托数量,不会反向开仓,而是会进行币币交易。
对于同一交割/永续产品,当前只减仓下单张数,加上价格时间优先于当前只减仓下单的只减仓挂单张数总和,不能超过持仓数量
仅适用于`现货和合约模式`和`跨币种保证金模式`
仅适用于`币币杠杆`,以及买卖模式下的`交割/永续`
注意:交割和永续合约在开平仓模式下,所有的平仓单都有只减仓逻辑,不受该字段传值的影响。
tgtCcy
市价单委托数量`sz`的单位:仅适用于币币市价下单交易。
交易货币:base_ccy
计价货币:quote_ccy
您在使用交易货币买入或者计价货币卖出时,请知晓:
1.如果您输入的数量大于当前可买或者可卖的数量,系统将按照您的最大可买或者可卖数量帮您完成交易,如果您希望按照指定数量成交,那您可以尝试使用限价单,等待市场价格波动到锁定的余额可以买入或卖出您指定的数量。
2.如果您输入的数量不大于当前可买或者可卖的数量,那当市场价格波动过大时,锁定的余额可能没办法买入您输入的交易货币数量或卖出您输入的计价货币数量,为保证您的交易体验,我们基于【能买多少买多少】或者【能卖多少卖多少】的原则,更改下单的数量帮您完成交易。此外,我们将尽量多锁定一点余额来规避更改下单数量的情况。
2.1 交易币买入例子:
以市价下单 买入 10个LTC为例,用户可买为11个,此时 10 < 11,挂单成功。当LTC-USDT的市价为200,用户被锁定余额为3,000 USDT,200*10 < 3,000,最终成交10个LTC; 若市场波动过大,LTC-USDT的市价为400,此时400*10 > 3,000,当用户被锁定的余额不够买入下单指定的交易货币数量时,系統使用用户被锁定的最大余额3,000 USDT下单买入,最终成交 3,000/400 = 7.5个 LTC。
2.2 计价币卖出例子:
以市价下单 卖出 1,000USDT为例,用户可卖为1,200USDT,1,000 < 1,200,挂单成功。LTC-USDT的市价为200,用户被锁定的余额为6个LTC,最终成交5个LTC; 若市场波动过大,LTC-USDT的市价为100,100*6 < 1,000,当用户被锁定的余额不够卖出下单指定的计价货币数量时,系統使用用户被锁定的最大余额6个LTC下单,最终成交 6 * 100 = 600 USDT。
px
期权下单时,委托价格需为 tickSz 的整数倍。
当不为整数倍时,取值规则以tickSz取 0.0005 为例:
当委托价格对0.0005的余数大于0.00025或者委托价格小于0.0005时,向上取;
当委托价格对0.0005的余数小于等于0.00025,且委托价格大于0.0005时,向下取。
对于下单附带止盈止损:
1. 只有当该订单完全成交时,才会生成止盈止损策略订单,否则不会生成止盈止损策略订单。
2. tgtCcy 为 base_ccy 时的市价买单和 tgtCcy 为 quote_ccy 时的市价卖单,均不支持附带止盈止损
3. tpOrdKind 为 limit,且只有一笔单边止盈时,attachAlgoClOrdId 可以作为 clOrdId 在获取订单信息接口查询。
4. 对于“分批止盈”,包含限价止盈和触发止盈:
* 分批止盈的每笔止盈止损订单仅支持单向止盈止损,slTriggerPx&slOrdPx 与 tpTriggerPx&tpOrdPx 只能填写一组,否则 报错 51076
* 同一笔订单上附带分批止盈的止盈触发价类型 (tpTriggerPxType) 必须保持一致,否则报错 51080
* 同一笔订单上附带分批止盈的止盈触发价 (tpTriggerPx) 不能相等,否则报错 51081
* 在附带分批止盈时,止盈订单的数量不能为空,否则报错 51089
* 同一笔订单上分批止盈的止盈数量之和,需要等于订单的委托数量,否则报错 51083
* 同一笔订单上分批止盈的止盈委托不能超过 10 笔,否则报错 51079
* 币币/杠杆不支持开启'开仓价止损',否则报错 51077
* 同一笔订单上附带分批止盈的止损委托单不能超过 1 笔,否则报错 51084
* 附带止盈止损开启'开仓价止损'时 (amendPxOnTriggerType 设置为 1),该笔订单上的止盈委托单必须大于等于 2 笔,否则报错 51085
* 同一笔订单上附带分批止盈的止盈类型必须保持一致,否则报错 51091
* 同一笔订单上附带分批止盈的止盈委托价不能相等,否则报错 51092
* 同一笔订单上附带分批止盈,其中限价止盈的止盈委托价 (tpOrdPx) 不能为 -1 (市价),否则报错 51093
* 币币、杠杆和期权交易不支持限价止盈,否则报错 51094
强制自成交保护
交易系统会以母账户维度实施强制自成交保护,同一母账户下所有账户,包括母账户本身和所有子账户,都无法进行自成交。订单的默认STP模式为`Cancel Maker`,用户亦可以通过下单接口的stpMode参数指定订单的STP模式。
强制自成交保护不会导致延迟。
有三种STP模式。STP模式始终基于taker订单中的配置。
1.Cancel Maker:这是默认的STP模式,系统撤Maker订单以防止自成交。然后,taker订单会基于深度继续和下一个订单成交。
2.Cancel Taker:撤Taker订单以防止自成交。如果用户的Maker订单不是深度里第一个订单,Taker订单会被部分成交,然后撤单。FOK订单会确保完全成交和自成交保护。
3.Cancel Both:撤Taker和Maker订单以防止自成交。如果用户的Maker订单不是深度里第一个订单,Taker订单会被部分成交,然后Taker订单的剩余数量和第一个自我Maker订单被取消。此模式不支持FOK订单。
10. 4倍杠杆做多,减仓
再减仓3张
time.sleep(60)
# 4倍杠杆做多,减仓
# Long with 4x leverage, reduce position
result = tradeAPI.place_order(
instId='BTC-USDT-SWAP',
tdMode='isolated',
clOrdId='mylong02',
side='sell',
posSide="long",
ordType='market',
sz="3"
)
print('4倍杠杆做多,减仓:')
print(result)
print()
11.市价全平
把剩下的全部平掉:
time.sleep(60)
# 市价全平
# The market price is completely flat
result = tradeAPI.close_positions(
instId="BTC-USDT-SWAP",
mgnMode="isolated",
posSide="long"
)
print('4倍杠杆做多,市价全平:')
print(result)
print()
12. 3倍杠杆做空
再来尝试一次空单,
注意:需要sell + short,而不是buy+short
time.sleep(60)
# 3倍杠杆做空(前面设置过)
# 3x leverage short selling (previously set)
result = tradeAPI.place_order(
instId='BTC-USDT-SWAP',
tdMode='isolated', # 逐仓模式 #Warehouse by warehouse mode
side='sell',
posSide="short",
ordType='market',
sz="8"
)
print('3倍杠杆做空:')
print(result)
print()
13. 3倍杠杆做空减仓
time.sleep(60)
# 3倍杠杆做空减仓
# 3x leverage short selling and reducing positions
result = tradeAPI.place_order(
instId='BTC-USDT-SWAP',
tdMode='isolated',
side='buy',
posSide="short",
ordType='market',
sz="8"
)
print('3倍杠杆做空,减仓:')
print(result)
print('finish')
下一篇,我们讲一讲现货的python交易方法,现货简单多了。