BTCV光复资讯 > 数字货币 > CoinEx研究所:如何建立简单的风力控制系统_btcv-光

CoinEx研究所:如何建立简单的风力控制系统_btcv-光

来源:btcv-光复资讯  |   作者:btcv-光复资讯  |   时间:2020-07-08 07:10  |   点击量:

作者:科妮克斯全球大使X

设计一个简单的交易风控系统

章鱼交易是一个专注于数字现金交易的团队。在我们两年的业务中,我们逐渐完善了交易系统,经历了几轮市场波动。成熟的风险控制系统是所有交易团队的标准。在这里我们分享一些我们的经历,这可能会给一些新朋友一些启发。

交易类型

在设计风险控制系统之前,首先要了解的是,你做什么样的交易,你最大的风险在哪里?例如,如果你做套利,你基本上不会持有风险敞口,所以当市场剧烈波动时,你只需要在你计算的头寸正确的前提下取消订单,等待风暴过去。相反,如果你在做持仓策略,你要做的是让你的战略订单在剧烈波动时不惜一切代价执行。如果你错过了这个机会,你将会失去或者赚得更少。

不同交易类型的风险控制策略肯定是不同的。本文之后,系统设计是基于套利策略,并对如何构建一个可以被套利策略使用的风险控制系统进行了简要的描述。

打开

套利策略的核心是将你的风险敞口保持在0,也就是说,所有交易都是对冲的。因此,正确计算你的位置是关键的一步。一般来说,我们可以使用api从交易所获得实时头寸,但在某些特殊情况下,交易所给你的头寸可能是错误的或延迟的。这将产生一个问题。在错误计算头寸的情况下,该计划被错误地套期保值,并且随着价格的变化,释放的风险积累了更多的损失(当然,有时它可以是利润,但是对于风力控制系统,我们只考虑糟糕的情况)

因此,在计算头寸时,应考虑以下两种情况:

接口异常

这里有许多例外,如exchange维护和升级,或者api调用被频繁阻止。它的表现是你不能通过界面获得最新的位置(平衡)。在这种情况下,我们应该停止下订单并取消现有的未决订单,停止交易一段时间,并在异常释放后继续交易。

另一个需要注意的情况是是否采用“异常”头寸:例如,交易所突然告诉你,你的头寸已经变为0,这在没有交易时通常是不可能的。在这种情况下,扔掉错误的信息,发出警报并手动检查问题。

持仓延迟

位置的改变是由顺序引起的。当交易所的清算失败时,就会发生订单已经售出,但头寸没有改变的情况。订单的交易信息将由交易所推送。在这里,我们只需要重新计算本地应该持有多少头寸。如果与交易所返回的数据有很大差距,我们应该停止检查。

此外,该策略应该具有在发现时及时弥补暴露的逻辑。通常的做法是定期补上一些,然后慢慢补上,以避免在头寸计算出问题后补上账单而造成的损失。根据经验,通常每15-30秒就能完成一个订单。

待定订单跟踪

无论策略类型如何,您都必须跟踪自己的订单,直到交易所告诉您订单已关闭/取消。这里有一些常见的异常情况,看看在什么情况下你的策略会被“抓住”。

市场失灵,你所看到的市场比实际市场延迟了5秒以上,针对这个市场下的订单将不会被出售。这些未售出的订单会累积形成单边风险敞口吗?

订单被拒绝。例如,交易所升级了下单的准确性参数,这导致您对某个交易对的所有下单请求都被拒绝。在这种情况下,这种货币的套期保值会不会执行得不正确?

订单是随着时间推移而发出的,由于超时,您发出的所有待定订单都没有收到回复,但事实上,所有订单都已成功发出,但您没有收到订单标识。一段时间后,你意外地发现一些订单被关闭了,或者你的位置意外地改变了。

Ws push被延迟,您使用ws push订阅订单的更新状态,但是ws push被断开/延迟,因此您不能更新订单的状态,并且您不能知道某些订单是否已售出。你应该如何宽容?

一般来说,我们的策略是控制策略的总订单量。例如,我们定义了一个下单渠道。在每个频道上,我们只允许一个订单存在。如果先前的订单没有被正确清除,新订单将不会继续发出。这样,我们的策略持有的总风险是我们可以在每个渠道下订单的总量,这可以防止在异常情况下重复订单的最坏情况。

此外,一般来说,下订单的金额越高,风险就越大。因此,当系统中存在订单跟踪问题时,减少下订单量或限制在大订单渠道下订单的策略将有助于控制风险。

容错

如果你的策略在一些不稳定的交易所上运行,当交易所失败或维持时,策略是否能优雅地容错成为风险控制系统的首要任务。我们已经回撤了几次,所有这些都与交易失败有关。可以说,我们花了很多钱购买的经验和教训是不可夸大的。

在容错方面,建议使用“白名单”的方法来处理,即任何未知的错误都会默认触发熔丝,然后上线一段时间,将一些已知的和不严重的异常分类到白名单中,允许它们偶尔发生但不触发熔丝,从而提高系统运行效率。

以下是一些常见的例外(或错误):

订单被拒绝

订单超时

长期未收到订单/账号推送

我已经很久没有受到市场的推动了

知识产权班

错误的头寸(例如,您发起了子母公司账号的转账,并在一方扣款,但在另一方没有添加)

处理上述异常的核心原则是重试、融合和报警。例如,订单被拒绝是因为余额不足,这种情况偶尔会发生,而且相对正常,因此可以免除。但是,如果它在一分钟内出现几次,它应该报警并熔断,并手动检查是否有任何变化。有时,当有人很难值班时,如凌晨4: 00或5: 00,保险丝机制被用来避免持续的大损失。

熔化

熔丝机构的设计只是一个计数器加一个延迟装置,也就是说,当第一次出现错误时,系统熔断1秒,当第n次出现错误时,系统熔断n*n秒,如果恢复正常,计数器清零。

一般来说,只有在下订单时才需要进行融合,其他需要融合的组件,如websocket连接报价或订单推送。

熔断机制的作用是避免因反复重试而造成的大量损失,或者在出现异常时触发交换机的知识产权保护。

稍微高级的熔丝策略包括慢启动机制,例如,在熔丝结束时只允许少量订单,并且在成功率超过阈值后允许较大数量的订单。

原木

日志是风控系统故障后恢复的重要部分。该日志可以帮助您检查在风险事件发生时,您的系统如何通过异常事件绕过风力控制。

如果你认为交易所和你的策略是呼叫链的上游和下游两个系统,日志系统基本上需要记录以下部分:市场推动、订单指令和订单推动。报价推送和订单推送是交易所提供的信息,因此需要记录原始信息和客户收到推送时的时间戳,便于定位。订单指令是政策发出的信号,也需要记录时间戳。通过比较以上三个日志,我们可以恢复订单的完整决策和生命周期。

将每个事件的日志和相关订单信息打印在一行上,可以让我们轻松地从日志中提取有效信息。使用内部订单标识作为连接,订单生命周期中的所有日志都可以通过该标识找到,这与互联网企业广泛使用的日志系统设计没有太大区别。

日志系统的关键部分是存储和检索。建议使用ELK或TICK来管理日志。一个简单的风力控制系统只需要记录七天。如果超过七天没有人检查一个问题,这应该不是一个大问题。

故障恢复

最后,最重要的是恢复失败。当异常发生时,通常伴随着损失。通过日志系统,我们需要在故障发生时恢复系统接收到的信号,并检查其中是否有不合理的逻辑。例如,交易所市场出现一些延迟,策略未能及时融合,导致订单滑动点增加并造成损失。然后我们应该在问题发生时检查市场,看看是否有任何线索来确定市场已经被延迟。例如,我已经下了一个订单,我希望它会带走订单簿中的一部分流动性,但是被推动的市场没有这部分信息,所以我知道这个订单没有及时进入匹配引擎,所以它应该在这个通道中被吹走。

有时,交易所提供的信息可能无法让你准确区分异常情况。此时,您需要整理日志并与交易所的技术支持人员进行沟通,以便他们能够了解客户的异常情况。也许下次他们可以添加一些辅助信息来帮助你定位这些问题。例如,市场延迟的问题,现在交易所基本上带来了一个匹配的时间戳。如果策略发现市场的时间戳大大落后,它可以被及时抛出以避免风险。

摘要

以上是一个简单的交易风险控制系统。我们的系统就是基于上述情况,根据反复出现的故障和风险事件,加上各种补丁。当然,除了交易执行风险,系统外还有其他风险,如市场密码、无效资产转移等。这些风险需要建立在交易系统的外围,交易系统被指示停止交易、取消订单并通过控制信号规避风险。此外,如果条件允许,编写一个应用程序,在你的手机上订阅风险控制事件,并控制交易开关,可以进一步让你沉浸在数字现金的交易世界中。欢迎来到深坑。

btcv
CoinEx研究所:如何建立简单的风力控制系统_btcv-光
网站分类
友情链接
    热门文章
    标签云
    btcv