| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 区块链 -> Avellaneda & Stoikov’s market-making strategy 工程化处理 -> 正文阅读 |
|
[区块链]Avellaneda & Stoikov’s market-making strategy 工程化处理 |
作者:recommend-item-box type_download clearfix |
前2篇文章详细介绍了AS存货模型的做市策略,这次对于这些公式里面一些希腊字母的取值是如何计算的,如何做工程化并应用到生产环境中做一些说明。 ? 这个里面有一些重要参数: 很直观,可以直接取值的有: s = current market mid price (中间价,也就是【最佳卖价+最佳买价】/2) 当然T-t也是可以直接定义的,但是对于连续合约,7*24小时交易的数字货币市场,如何来定义这个T,在计算中如何处理。 需要计算的值有: (sigma)σ = market volatility (市场波动率,可以用std标准差来表示) (gamma) γ = inventory risk aversion parameter 这个翻译过来就是 规避库存风险的参数,当他取值很大的时候,我们按照公式一计算的预定价格就和中间价差距就远。 ? 称为最优价差 ,也就是bid_spread 和 asd_spread是相等的。 所以我们AS做决策的价格就是: bid_price=预定价格-最优价差/2 = ask_price=预订价格+最优价差/2= 本文的模型是在以下假设下建立的:未定义订单金额 波动性是恒定的 订单统计特征不变 做市商打算在有限的T时间范围内使用总库存q实现利润最大化 由于这些假设可能不适合加密市场,我们建议进行以下更改: 一、由于Hummingbot使交易员能够指定订单金额,因此我们引入了一个额外的参数order_amount_shape_factor(η艾塔),该参数根据库存状况调整订单金额,如2018年最佳高频做市论文所述。 二、为了解释加密中存在的快速变化的波动率,我们提出了一个波动率差异阈值,如果超过该阈值,将触发策略参数vol_To_sprespread_multiplier的重新计算。 三、按第2点重新计算。 四、由于运行bot可能有无限的时间范围,我们的解决方案是有一个有限的closing_time(T),但要循环剩余的时间分数T,并在每次t=T时重新计算参数。举个例子,T设定 1H,当运行bot 1小时后,我们再次设定剩余分钟还有60分钟,这样bot 就可以在运行中去平衡我们的仓位,以及计算出以上几个希腊字母参数。 使用原始的AS方程,我们面临多个超参数。我们可以为这些参数选择任何值,因此需要一些约束。由于买卖价差到中间价是我们机器人最重要的价值之一,这应该是建立我们标准的合理选择。此外,正如论文所述,gamma( γ)就像库存风险的风险规避参数。我们需要一个旋钮参数来控制该因子,同时满足用户设置的spread参数。 如何计算gamma( γ) 我们将假设用户在配置策略时设置了min_spread和max_spread参数。为了计算最大可能风险因子(gamma? ?γ),作者使用初始价差最优买入/卖出中间价(? ),其不应小于最小价差,也不应大于最大价差(与中间价相关)。 注:由于保留价和中间价之间的差值(deltaΔ)和最优价差是(T-t)的函数,为了降低q的绝对值(接近目标库存水平),可以肯定地说,最优出价和要求中间价的价差将随着时间的推移而减少。因此,以下计算将以t=0的时刻为中心,其中价差是最宽的(也就是启动机器人不久,我们报价和midprice偏离最大,以便于买到股票,临近T时刻,我们要抛弃货,这样动态控制仓位)。 下图显示了库存过剩时的价格水平和价差分布,因此预定价格低于中间价格,价差会相应调整: q>0 (inventory needed to be decreased),也就是需要减仓开始: 要符合最大和最小价差: 现在我们将计算t=0时这些价差的表达式。首先,ask价差: Replacing equations for r(s,t) and optimal spread... 因此,得出的表达式为: 同样,在这种情况下,对于bid_spread,限制将是用户设置的最大价差: 这就引出了一个表达式: 将两个不等式相加,得出以下结果: q<0 (inventory needed to be increased)同样,对于相反的情况,如果q<0,则得出的最终表达式为: 所以这两种情况都可以用q来处理,然后伽马γ的下列不等式成立: 由于风险系数(gamma γ)为非负值,通过计算此最大阈值,我们现在有了所有可能的 gamma-γ值的范围。前面提到的旋钮将是一个从0到1的系数,它将定义γ在这个范围内的位置。该系数称为inventory_risk_aversion(IRA)。 最终方程式 gamma? γ: Calculation of? ??将选择order_book_depth_factor(\kappa κ),以便算法从t=0时的最大可能价差开始。这个决定似乎是任意的,但其背后的论点是通过更大范围的价差来实现策略盈利能力的最大化。因此,从计算开始,我们将首先确定t=0时的最大波动可能。 The order furthest from the mid price will be the one where terms are added, so we calculate: 现在,从t=0时的最大最优价差来看,kappa? κ可以用本文的公式推断为该spread的函数: : Calculation of \eta? ?η还记得order_amount_shape_factor(?η)是订单金额的修饰符,借用自2018年Fushimi论文(见参考文献) 基本上,从策略提案中提交的两份订单来看,不利于达到目标库存的订单将根据机器人距离目标q的距离呈指数级减少。这与hummingbot 纯做市策略中的库存倾斜方法类似。 利用前面定义的inventory_risk_aversion(IRA)参数,指数衰减函数中的衰减量将由IRA控制: ?What happens? ? We have seen what happens to reservation price and optimal spread when: ,But what happens :: If you read previous Avellaneda strategy post, you will know that if \gamma \to 0γ→0 (which is equivalent to \gamma \to 0γ→0), then?knob?is set to no inventory risk aversion. That means that user simply sets spreads symmetrical to mid-price, but can you imagine what will be the final spread values? Lets do the math... IRA \to 0 \implies \gamma \to 0 : So we know about reservation price that: ? ? Lastly, we calculate \kappa: This means, that if \gamma \to 0γ→0 spread around r = mid_price will be fixed 因此,在gamma为0的情况下,这与常规的纯做市策略相同,对称价差=中间价附近的最大价差。这样,纯做市策略就成为Avellaneda做市策略的特例。 终于搞完毕,撒花,下次搞代码!! ? ? |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/25 21:39:52- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |