okex合约算法

2023-10-21 17:40
文章标签 算法 合约 okex

本文主要是介绍okex合约算法,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

全仓保证金率=账户权益 /(仓位大小+挂单冻结保证金杠杆)
账户权益=客户存入金额+已实现盈亏+未实现盈亏。
可用保证金=账户权益-持仓张数
面值/(最新标记价格*杠杆)-挂单冻结保证金
收益率 = 收益 / 开仓时所需保证金。

收益公式
多单:合约收益=(合约面值/开仓均价-合约面值/平仓均价)*张数。
空单:合约收益=(合约面值/平仓价格-合约面值/开仓均价)*张数。

未实现盈亏
多单:合约收益=(合约面值/结算基准价-合约面值/标记价格)*张数。
空单:合约收益=(合约面值/标记价格-合约面值/计算基准价)*张数。

多仓收益= (合约面值/开仓价-合约面值/平仓价)*张数,然后用这个公式,开仓价直接改成结算价格

资金费用=仓位价值*资金费率

资金费率=Clamp(MA(((合约买一价+合约卖一价)/2-现货指数价格)/现货指数价格 - Interest), a, b)
Clamp 代表超过a取a 超过b取b
MA 这个代表上一分钟的移动平均值
Interest 代表0

已实现盈亏:上一次结算(每天香港时间16:00)至当前,用户已平仓仓位产生的盈亏,在合约结算后该合约所产生的已实现盈亏才可以提出至交易账户。

未实现盈亏:上一次结算(每天香港时间16:00)至当前,用户当前所持仓位产生的盈亏,也称浮动盈亏

平仓已实现盈亏是已经扣除过手续费 收益没有扣除手续费

合约交易最低的开仓限制:一张合约,不足一张无法下单。
币本位合约可开张数=可用保证金最新成交价格杠杆倍数/合约面值
USDT合约开仓张数=可用保证金杠杆倍数/(面值最新成交价格)
平台是有仓位档位限制,不同的合约开仓时选择的杠杆倍数不同,可开仓张数限制不同,可参照仓位档位说明。
页面显示的最大可开数量是使用最新行情价格计算的,和用户本身的委托价格有区别,所以使用页面中的张数开仓会提示风险率过高或者下单失败。

亏损大于保证金就是穿仓
标记价格达到预估强平价就会爆仓

全仓预估强平价=【(维持保证金率+对应等级合约吃单手续费率)*总开仓张数+(开多张数-开空张数)】/(总亏损/面值+开多张数/开多均价-开空张数/开空均价)

逐仓多预估强平价=(1+维持保证金率)/(1/开仓均价+固定保证金/面值/张数)
逐仓空预估强平价=(1-维持保证金率)/(1/开仓均价-固定保证金/面值/张数)

当用户触发强平后,系统强平引擎以破产价格接管平仓,产生的平仓盈余会注入风险准备金。
当用户触发强平后,如果产生穿仓损失则优先从风险准备金中抵扣,如果无法完全抵扣,则由当日所有净盈利用户参与分摊。

全仓做多破产价=多仓持仓均价-(余额+已实现盈亏)/多仓张数/面值
全仓做空破产价=空仓持仓均价+(余额+已实现盈亏)/空仓张数/面值

逐仓做多破产价=多仓持仓均价-固定保证金/多仓张数/面值
逐仓做空破产价=空仓持仓均价+固定保证金/空仓张数/面值

当用户触发强平后,系统强平引擎以破产价格接管平仓,产生的平仓盈余会注入风险准备金。
当用户触发强平后,如果产生穿仓损失则优先从风险准备金中抵扣,如果无法完全抵扣,则由当日所有净盈利用户参与分摊。

标记价格

标记价格

=现货指数价格+基差移动平均值

基差移动平均值

基差移动平均值
=移动平均值(合约中间价 - 现货指数价格)
=移动平均值((合约卖一价 + 合约买一价)/2 - 现货指数价格)

未实现盈亏计算

多仓:未实现盈亏=面值张数/开仓均价-面值张数/最新标记价格
空仓:未实现盈亏=面值张数/最新标记价格-面值张数/开仓均价

永续合约于每日香港时间16:00结算,结算价为当时的最新标记价格

平均价格

平均价格 = 合约面值 * ( 原持仓数 + 新开仓数 ) / ( 合约面值 * 原持仓数 / 原持仓均价 + 合约面值 * 新开仓数 / 新开仓成交均价 )

新开仓成交均价 = 合约面值 * 新开仓数 / ( 合约面值 * 成交价格1的合约数 / 成交价格1 + 合约面值 * 成交价格2的合约数 / 成交价格2 + … )

新开仓数 = 成交价格1的合约数 + 成交价格2的合约数 + …

保证金

全仓模式

开仓保证金=面值*张数/最新标记价格/杠杆,用户的开仓保证金将随价格变化而变动。

逐仓模式

开仓保证金=面值*张数/开仓均价/杠杆,开仓保证金固定不变。

保证金和杠杆的关系

所需保证金=仓位价值/所选杠杆倍数

初始保证金率

初始保证金率 = 1/杠杆倍数

维持保证金率

用户维持当前仓位所需的最低保证金率,当保证金率小于等于用户当前所需维持保证金率+平仓手续费率,即触发爆仓。

逐仓:保证金率
=(固定保证金+未实现盈亏)/仓位价值,
仓位价值=面值张数/最新标记价格
全仓:保证金率
=(余额+已实现盈亏+未实现盈亏)/(仓位价值+挂单冻结保证金
杠杆倍数)
仓位价值 =面值*张数/最新标记价格

保证金率

逐仓

保证金率
=(固定保证金+未实现盈亏)/仓位价值
=(固定保证金+未实现盈亏)/(面值*张数/最新标记价格)

全仓

保证金率
=(余额+已实现盈亏+未实现盈亏)/(仓位价值+挂单冻结保证金杠杆倍数)
=(余额+已实现盈亏+未实现盈亏)/(面值
张数/最新标记价格+挂单冻结保证金*杠杆倍数)

持仓杠杆倍数调整

逐仓

开仓所需保证金=面值张数/(开仓均价杠杆);

全仓

开仓所需保证金=面值张数/(最新标记价格杠杆);

盈亏计算

合约已实现盈亏

买单方向:
合约已实现盈亏 = (合约面值 / 结算基准价 – 合约面值 / 平均平仓价格) * 平仓数量
例如某用户以结算基准价500 USD/BTC 买入开多2张BTC合约,然后以价格 1000 USD/BTC卖出平多1张合约,则合约已实现盈亏 = (100 / 500 - 100 / 1000) * 1 = 0.1 BTC。

卖单方向:
合约已实现盈亏 = (合约面值 / 平均平仓价格 - 合约面值 /结算基准价) * 平仓数量
例如某用户以结算基准价500 USD/BTC 卖出开空10张BTC合约,然后以价格 1000 USD/BTC买入平空8张合约,则合约已实现盈亏 = (100 / 1000 - 100 / 500) * 8 = - 0.8 BTC。

合约未实现盈亏:

买入:
合约未实现盈亏 = (合约价值 / 结算基准价 – 合约价值 / 最新标记价格) * 持仓量例如某用户以结算基准价500 USD/BTC 买入开多6张BTC合约,现在最新成交价为600 USD/BTC,则合约未实现盈亏 = (100 / 500 - 100 / 600 ) * 6 = 0.2 BTC。

卖出:
合约未实现盈亏 = ( 合约价值 / 最新标记价格 - 合约价值 / 结算基准价) * 持仓量

在这里插入图片描述
在这里插入图片描述

逐仓保证金模式

逐仓模式下,每个用户都会有一个单独的“合约账户”和逐仓“子账户”。“合约账户”由账户余额组成,“子账户”由“子账户余额”、“已实现盈亏”、“冻结”,“未实现盈亏”组成。

只有合约“账户余额”和“资金账户、交易账户、其他账户”随时可以互转。而“子账户”下的子“账户余额”与“已实现盈亏”将不能转入“资金账户、交易账户、其他账户”。“子账户余额”,只有逐仓仓位下持仓全部平仓转入合约“账户余额”后,才能转入“资金账户、交易账户、其他账户”;“已实现盈亏”,也只有逐仓仓位结算转入合约“账户余额”后,才能转入“资金账户、交易账户、其他账户”。

账户余额:合约账户中的担保物数量,可用于转入逐仓子账户,追加保证金。

子账户余额:子账户中的担保物数量,与“已实现盈亏”一起为“固定保证金”提供担保。

子账户可用:可用于开新仓的可用保证金数量。

已实现盈亏:逐仓仓位结算前,用户已平仓仓位产生的盈亏。可以为逐仓持仓所需的“固定保证金”与挂新开仓单所需的“冻结”提供担保。

冻结:为逐仓仓位下未成交的开仓委托单所需要的保证金。委托单成交后,所需的保证金才增加至“固定保证金”。由合约“账户余额”与“已实现盈亏”提供担保。

固定保证金:为逐仓仓位的保证金,可以在持仓处手动增加,否则平仓或开新仓前固定不变。

在这里插入图片描述
在这里插入图片描述

资金费用

资金费用每8小时收取一次,收取时间在每天的08:00、16:00和24:00(HKT)。只有在该时刻持有仓位时,用户才需要支付或收取资金费用。如果在费用收取之前平仓,则不需要支付资金费用。

1.理论资金费用

资金费用=持仓仓位价值*当期资金费率,当资金费率为正数时,多头支付空头;当资金费率为负数时,空头支付多头。
资金费率=Clamp(MA(((合约买一价+合约卖一价)/2-现货指数价格)/现货指数价格 - Interest), a, b)
*Interest当前为0
*所有币种永续合约:a=-0.3%,b=0.3%
【以上数据及指标内容可能会根据市场行情而进行实时调整,调整将不会进行另行通知。】
资金费率每分钟计算一次,在资金费用收取时刻将取07:59、15:59和23:59(HKT)计算出的资金费率进行资金费用收取。
2.实际资金费用
全仓模式下:资金费用收取时,将直接从用户的已实现盈亏上扣除,至多扣除至用户保证金率等于维持保证金率+平仓手续费率,多余部分不再收取。
逐仓模式下:资金费用收取时,将优先从用户的已实现盈亏上扣除,如果已实现盈亏不足,多余部分从用户持仓仓位的固定保证金上扣除,至多扣除至用户保证金率等于维持保证金率+平仓手续费率,多余部分不再收取。
用户所能收取的实际资金费用也取决于系统从对手方账户上扣除的总额。

结算

永续合约在每天16:00(香港时间)会进行一次结算,结算的流程如下:

盈亏结算

a. 未实现盈亏结转到已实现盈亏

系统将当日的未实现盈亏转到已实现盈亏,未实现盈亏清零,且仓位上的“已结算收益”也相应增加本次结转的金额。当合约结算完成后,仓位的未实现盈亏将按照新的结算基准价进行计算。结转当日的“未实现盈亏”计算公式如下:结转的未实现盈亏=(合约面值张数/结算基准价)-(合约面值张数/上次结算基准价)

结算基准价:当您的仓位未经过每天16:00(香港时间)结算时,结算基准价=开仓均价。如果您的仓位经过了结算,则结算基准价为4点结算时刻的最新标记价格

b. 已实现盈亏结转到余额

将当日最后剩余的已实现盈亏结转到用户的现金余额资产。逐仓模式下,将已实现盈亏结转到持仓仓位的固定保证金;全仓模式下,将已实现盈亏结转到永续合约账户的现金余额。

资金费用收取

-系统计算所有用户的资金费用,由多方和空方互相支付,资金费用的变动将体现在用户的现金余额上。

-资金费用规则详见资金费用部分。

如果交割和结算时间前后出现操纵市场或者市场异常,导致指数大幅波动,或者出现分摊比例异常,我们将有可能根据具体情况选择提前或延时交割和结算,具体规则会发公告说明。

分摊

统计系统账户穿仓损失,如果存在穿仓损失,进行风险准备金抵扣。当风险准备金无法全额抵扣时,由当日所有净盈利用户一起分摊。

分摊比例=(穿仓损失-风险准备金)/所有盈利用户净盈利之和,用户所需分摊金额=净盈利*分摊比例,分摊金额将从用户已实现盈亏上扣除。

挂单与吃单

挂单指的是你指定的价格下单时不会立即与深度列表里的其他订单成交,而是进入深度列表等待对方主动来跟你的订单成交,这样的行为叫挂单。比如现在卖一价是1000 USD,你以999 USD的价格下了一个买单,这时候不满足成交条件,那么你的订单会进入深度列表里的买单列表等待别人出999 USD的卖价跟你成交,这个时候你的单子被成交即支付挂单手续费。反之你要支付吃单手续费。

爆仓

爆仓手续费按照用户当前所处等级的taker费率收取。

这篇关于okex合约算法的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/255903

相关文章

springboot+dubbo实现时间轮算法

《springboot+dubbo实现时间轮算法》时间轮是一种高效利用线程资源进行批量化调度的算法,本文主要介绍了springboot+dubbo实现时间轮算法,文中通过示例代码介绍的非常详细,对大家... 目录前言一、参数说明二、具体实现1、HashedwheelTimer2、createWheel3、n

SpringBoot实现MD5加盐算法的示例代码

《SpringBoot实现MD5加盐算法的示例代码》加盐算法是一种用于增强密码安全性的技术,本文主要介绍了SpringBoot实现MD5加盐算法的示例代码,文中通过示例代码介绍的非常详细,对大家的学习... 目录一、什么是加盐算法二、如何实现加盐算法2.1 加盐算法代码实现2.2 注册页面中进行密码加盐2.

Java时间轮调度算法的代码实现

《Java时间轮调度算法的代码实现》时间轮是一种高效的定时调度算法,主要用于管理延时任务或周期性任务,它通过一个环形数组(时间轮)和指针来实现,将大量定时任务分摊到固定的时间槽中,极大地降低了时间复杂... 目录1、简述2、时间轮的原理3. 时间轮的实现步骤3.1 定义时间槽3.2 定义时间轮3.3 使用时

如何通过Golang的container/list实现LRU缓存算法

《如何通过Golang的container/list实现LRU缓存算法》文章介绍了Go语言中container/list包实现的双向链表,并探讨了如何使用链表实现LRU缓存,LRU缓存通过维护一个双向... 目录力扣:146. LRU 缓存主要结构 List 和 Element常用方法1. 初始化链表2.

golang字符串匹配算法解读

《golang字符串匹配算法解读》文章介绍了字符串匹配算法的原理,特别是Knuth-Morris-Pratt(KMP)算法,该算法通过构建模式串的前缀表来减少匹配时的不必要的字符比较,从而提高效率,在... 目录简介KMP实现代码总结简介字符串匹配算法主要用于在一个较长的文本串中查找一个较短的字符串(称为

通俗易懂的Java常见限流算法具体实现

《通俗易懂的Java常见限流算法具体实现》:本文主要介绍Java常见限流算法具体实现的相关资料,包括漏桶算法、令牌桶算法、Nginx限流和Redis+Lua限流的实现原理和具体步骤,并比较了它们的... 目录一、漏桶算法1.漏桶算法的思想和原理2.具体实现二、令牌桶算法1.令牌桶算法流程:2.具体实现2.1

Python中的随机森林算法与实战

《Python中的随机森林算法与实战》本文详细介绍了随机森林算法,包括其原理、实现步骤、分类和回归案例,并讨论了其优点和缺点,通过面向对象编程实现了一个简单的随机森林模型,并应用于鸢尾花分类和波士顿房... 目录1、随机森林算法概述2、随机森林的原理3、实现步骤4、分类案例:使用随机森林预测鸢尾花品种4.1

不懂推荐算法也能设计推荐系统

本文以商业化应用推荐为例,告诉我们不懂推荐算法的产品,也能从产品侧出发, 设计出一款不错的推荐系统。 相信很多新手产品,看到算法二字,多是懵圈的。 什么排序算法、最短路径等都是相对传统的算法(注:传统是指科班出身的产品都会接触过)。但对于推荐算法,多数产品对着网上搜到的资源,都会无从下手。特别当某些推荐算法 和 “AI”扯上关系后,更是加大了理解的难度。 但,不了解推荐算法,就无法做推荐系

康拓展开(hash算法中会用到)

康拓展开是一个全排列到一个自然数的双射(也就是某个全排列与某个自然数一一对应) 公式: X=a[n]*(n-1)!+a[n-1]*(n-2)!+...+a[i]*(i-1)!+...+a[1]*0! 其中,a[i]为整数,并且0<=a[i]<i,1<=i<=n。(a[i]在不同应用中的含义不同); 典型应用: 计算当前排列在所有由小到大全排列中的顺序,也就是说求当前排列是第

csu 1446 Problem J Modified LCS (扩展欧几里得算法的简单应用)

这是一道扩展欧几里得算法的简单应用题,这题是在湖南多校训练赛中队友ac的一道题,在比赛之后请教了队友,然后自己把它a掉 这也是自己独自做扩展欧几里得算法的题目 题意:把题意转变下就变成了:求d1*x - d2*y = f2 - f1的解,很明显用exgcd来解 下面介绍一下exgcd的一些知识点:求ax + by = c的解 一、首先求ax + by = gcd(a,b)的解 这个