zoukankan      html  css  js  c++  java
  • 数字货币资金费策略

    更多精彩内容,欢迎关注公众号:数量技术宅,也可添加技术宅个人微信号:sljsz01,与我交流。

    什么是资金费

    永续合约是数字货币市场特有的一类期货,它是永远不会到期交割的期货。而资金费是跟随永续合约产生的特有的名词。 因为永续合约没有到期或交割,所以需要通过“资金费用机制”来让合约价格锚定现货价格。

    永续合约每8小时为一期,每期结束时进行结算,永续合约每天结算3期(次)。即00:00-8:00为一期,结算时间为8:00;8:00-16:00为一期,结算时间为16:00;16:00-次日00:00为一期,结算时间为00:00。以上时间均为GMT+8时间。

    结算时,用户应当收取还是支付资金费用,由本期的资金费率以及该用户的持仓情况决定。当资金费率为正值时,多仓将支付资金费用,空仓将收取资金费用;当资金费率为负值时,多仓将收取资金费用,空仓将支付资金费用。

    介绍完资金费的概念,我们再来看资金费的计算方式。

    首先,资金费率有一个重要的特征:延时性。 即当期的资金费率,由上一期的数据进行计算而得,在本期开始时已经确定,期内不会改变,并应用于本期结束时的资金费用结算。 而与此同时,交易所一般还会计算一个下一期的预测资金费率,这个预测资金费率一般每分钟更新, 本期最后一次计算的预测资金费率,就是下一期的资金费率。

    比如, 8:00-16:00这一期的资金费率,是通过上一期00:00-8:00的数据计算而得,在8:00的时候已经确定,在16:00进行结算时使用。同时,8:00-16:00这段时间内,每分钟会计算一个预测资金费率,预测的是16:00-次日00:00这一期的资金费率,并将最后一次计算的预测资金费率,作为16:00-次日00:00这一期的资金费率。

    其次,资金费的计算,与两个变量相关,一是综合利率,二是溢价。我们可以这样来理解,以正资金费率为例,综合利率决定资金费率的底,溢价决定资金费率的顶。当资金费率为正,且永续合约相对于现货的溢价很小时,资金费率等于综合利率,目前大部分平台的值都是0.01%;而当永续合约相对于现货的溢价超过一定比率时,资金费率是由溢价率作为输入的公式计算出来的,我们不需要去完整的理解这个公式,只需要有大致的概念,资金费与溢价率高度相关,溢价越大,资金费率相应的也越高。

    之所以不需要去理解这个公式,是因为资金费率、下一期预测资金费率,我们都可以在交易所的K线界面看到,同时API中也有相关计算好的字段,能够很容易的读取到相应数值。

    永续合约有两类,一类是币本位合约,以交易的币种作为保证金、盈亏计价,另一类是U本位合约,以USDT作为保证金和盈亏计价。不论是U本位,还是币本位,只要是永续合约,都有资金费率存在。我们也可以通过交易所的合约信息,查询到两类永续合约分别的实时资金费率、预测资金费率。

    资金费策略原理

    资金费率有一个显著的特征:其正负分布是极度有偏的,我们以最近大热的狗狗币(doge/usdt)为例,可以看到的是,资金费>0的次数远远多于资金费<0的次数,也就是说,在大部分行情下,永续合约的空头都在赚取永续合约多头的资金费。

    看到这里,严谨的朋友可能会问,那么是否是因为你举了狗狗币这个最近多头大热的例子,所造成的幸存者偏差?其实多头、空头在更长时间赚取资金费率的几率应该是大致相等的呢?

    我们以币安交易所U本位永续合约BTCUSDT为例,绘制出过去3年BTC U本位永续合约所有时间的资金费,可以看到,仍然和近期的狗狗币那样,大部分时间资金费率都是正值,只有在深度熊市(例如2020年3月),资金费率才会短暂的打到负值。

    于是,我们可以总结一下数字货币永续市场的规律:资金费率常年为正,牛市时期幅度极大,只有在深度熊市,才频繁出现负值。换句话说:在永续合约市场,由于资金费率的存在,空头的长期优势是大于多头的。那么,我们如何既在永续市场做空头赚取资金费,又不承担标的资产的方向性波动?许多老交易员第一时间就能想到:我们在现货市场开多,在永续市场上开空,就能完美做到上述两点。

    而我们的这个资金费策略,在获取资金费收益的同时,还期望能赚取市场一部分的价差波动。还是以近期的狗狗币为例,下图的溢价指数k线,可以理解为是永续合约与现货之间的价差。尽管这个价差在大部分时间为正(永续>现货),但在分钟甚至Tick级别上,价差会出现短时间的负值(永续<现货)。我们在价差达到较大正值时建仓(买现货同时卖空永续),而在价差达到较小负值时平仓,就能够赚取到市场中的价差波动。

    因此,我们的资金费策略原理,是将收取资金费与赚取价差波动结合起来,当某个币种资金费率高,同时现货合约价差高,我们进场开仓(买现货同时卖空永续),如果现货合约价差不收敛到0以下,我们就在场内持续吃资金费的利润,如果现货合约价差到0以下,我们平仓(卖现货同时买平仓永续)以获取价差收益;同时在平仓之后,继续寻找下一次高资金费率、高价差的进场机会,并如此循环往复。

    全自动交易

    如果说交割合约的期现套利,由于价差较大、交易周期较长,我们还可以通过手工交易来完成;永续合约的资金费策略,由于其价差小、机会转瞬即逝、对交易成本极其敏感、需要不断切换高资金费、高价差品种等特性,我们只有通过程序全自动执行这一系列低延时+高精度操作。

    由于永续合约分成币本位永续合约、USDT本位永续合约两类,我们也根据这两类不同的永续合约,设计了两套不同的交易执行程序,而每一套程序,又包括了开仓逻辑和平仓逻辑。

    一、币本位永续

    开仓逻辑

    1. 遍历所有币本位永续合约当期资金费率和下期预测资金费率,找到资金费率大于我们设定要求的币种(代表此时做多现货、做空合约,我们能够收取到较高的资金费率)

    2. 实时跟踪该币种的期现价差比率(即币本位永续合约价格减去现货价格的百分比)

    3. 当实时期现价差比率大于设定值,立即买入现货

    4. 现货成交后,将该币种划转至币本位永续账户作为保证金

    5. 在币本位永续合约账户做空等市值的空单

    6. 完成开仓逻辑,更新配置文件中的现货、合约持仓记录、可用资金

    平仓逻辑

    1. 遍历所有币本位永续合约持仓币种当期资金费、下期预测资金费率,找到资金费率小于我们要求的币种(代表此时我们已经只能收取极低的资金费率,或是要支付资金费率)

    2. 实时跟踪该币种的期现价差比率(即币本位永续合约价格减去现货价格的百分比)

    3. 当实时期现价差比率小于设定值,立即平仓永续合约空头

    4. 永续合约释放保证金,将该币种释放的保证金划转至现货账户

    5. 现货卖出平仓,完成一轮平仓逻辑,和这一轮开、平的资金流转

    6. 更新配置文件中的现货、合约持仓记录、可用资金

    二、USDT本位永续

    开仓逻辑

    1. 遍历所有USDT本位全仓永续合约当期资金费率和下期预测资金费率,找到资金费率大于我们设定要求的币种(代表此时做多现货、做空合约,我们能够收取到较高的资金费率)

    2. 实时跟踪该币种的期现价差比率(即USDT本位永续合约价格减去现货价格的百分比)

    3. 当实时期现价差比率大于设定值,立即同时等市值开多现货、开空USDT本位永续合约

    4. 完成开仓逻辑,更新配置文件中的现货、合约持仓记录、可用资金

    平仓逻辑

    1. 遍历所有USDT本位永续合约持仓币种当期资金费、下期预测资金费率,找到资金费率小于我们要求的币种(代表此时我们已经只能收取极低的资金费率,或是要支付资金费率)

    2. 实时跟踪该币种的期现价差比率(即USDT本位永续合约价格减去现货价格的百分比)

    3. 当实时期现价差比率小于设定值,立即同时对现货、USDT本位永续合约进行平仓

    4. 完成平仓逻辑,更新配置文件中的现货、合约持仓记录、可用资金

    三、附加功能

    以上描述的逻辑,是基础的开、平仓的实现逻辑,与此同时,无论是币本位永续,还是USDT本位永续,我们都为程序设计了以下的附加功能:

    1. 考虑到资金容量的问题,程序支持分批交易和拆单,减小对特别是小市值币种的市场冲击

    2. 期现价差比率,我们在跟踪过程中采用的是保守的算法,比如准备开仓时,我们的期现比率价差,用的是现货的卖5价与期货的买5价之间的比率价差;而在准备平仓时,我们反过来,用的是现货的买5价和期货的卖5价之间的比率价差

    3. 策略的关键参数包括资金费率的进出场阈值、期现价差的进出场阈值、分批交易的金额,都设计成外接的配置文件,可以灵活调整

    4. 对于报单未成交问题,专门处理了报单、撤单、追单逻辑,确保套利头寸双边成交。

    5. 整个资金费率策略,包含了资金费率轮动的大逻辑。在一轮一轮的开、平仓过程中,我们不断地在高资金费的币种建仓,吃资金费,等到该币种资金费率降低,再平仓切换下一个高资金费币种,继续吃高资金费,由此逻辑不断进行轮动,从而增强收益。

    如何执行自动交易

    编写+调试完成策略,下一步我们就将部署执行自动交易了。部署自动交易,分为四步。

    第一步,策略源码打包上传云服务器

    我们之所以选择云服务器交易,是因为第一,数字货币市场是7*24小时交易的,我们的个人电脑很难做到常年稳定的不关机,第二,许多数字货币的API使用国内IP是无法访问的,所以我们的最优选择,是租用一台物理地址位于海外(地址靠近想要交易的交易所)的服务器。出于稳定性考虑,我们服务器选择Linux系统。

    上传我们可以通过Xsehll的sz/rz命令。上传完成后,我们可以在服务器中查看到对应的策略工程项目文件。

    第二步,配置参数

    参数分为基础参数和策略参数,基础参数位于common模块,需要配置包括最基本的交易所access_key,secret_key,最大开仓金额total_amount,以及每次开仓数量every_lot,此处every_lot是按照合约的张数设定,在交易现货时,会自动按照合约张数对应的面值,计算现货交易量。

    策略参数部分,位于coin_swap模块。该模块的参数包括3个开仓参数,funding_rate_limit:开仓最小的当期资金费率阈值,funding_rate_next_limit:开仓最小的下期预测资金费率阈值,price_thresh_open:合约、现货的最小开仓价差(大于价差才开仓)。以及3个平仓参数:funding_rate_exit_limit:当期资金费率最大不超过的值,funding_rate_next_exit_limit:下一期预测资金费率最大不超过的值,price_thresh_close:合约、现货的平仓价差(小于价差才平仓)。

    至于配置文件最后的spot和swap部分,在初始不需要设定,由程序后续在执行开平仓操作时自动写入,比如我们此时截图状态,持有了eos、eth的现货和永续合约。

    第三步,开启screen镜像

    由于我们选用的是Linux系统,如果直接在控制台运行程序,当我们关掉Xsehll或其他服务器登陆软件后,程序会自动停止。为保证程序一直在后台运行,我们需要引入Screen工具,现在Linux系统安装Screen,随后用如下命令:

    先用screen -S,创建窗口,窗口里面,和控制台一样的命令运行自动交易py脚本,程序启动后,用ctrl+a,再按d,detach这个screen,哪怕我们关掉Xsehll,仍然能够保证程序在后台7*24运行。

    第四步,运行策略,走你!

    在策略运行前,最后一步的准备工作,是在账户中放入足够的usdt。对于币本位永续,我们只需要在币币账户存入相应数额的usdt,程序会在交易过程中,自动完成划转功能;而对于U本位永续,我们需要在币币账户、U本位永续全仓账户存入足额的usdt(建议初始币币和U本资金1:1配置)。

    然后我们就可以开启策略了,开启之后需要做什么?似乎什么也不需要做,静静等待策略自动交易就好。过去一个月,似乎实盘成绩还不错。

    想要获取本次分享的完整代码,或是任何关于数据分析、量化投资的问题,欢迎添加技术宅微信:sljsz01,与我交流

     

     


    往期干货分享推荐阅读

    分享一个年化15%以上的无风险套利机会

    网格交易系统开发

    通过深度学习股价截面数据分析和预测股票价格

    Omega System Trading and Development Club内部分享策略Easylanguage源码

    一个真实数据集的完整机器学习解决方案(下)

    一个真实数据集的完整机器学习解决方案(上)

    如何使用交易开拓者(TB)开发数字货币策略

    股指期货高频数据机器学习预测

    如何使用TradingView(TV)回测数字货币交易策略

    如何投资股票型基金?什么时间买?买什么?

    【数量技术宅|量化投资策略系列分享】基于指数移动平均的股指期货交易策略

    AMA指标原作者Perry Kaufman 100+套交易策略源码分享

    【 数量技术宅 | 期权系列分享】期权策略的“独孤九剑”

    【数量技术宅|金融数据系列分享】套利策略的价差序列计算,恐怕没有你想的那么简单

    【数量技术宅|量化投资策略系列分享】成熟交易者期货持仓跟随策略

    如何获取免费的数字货币历史数据

    【数量技术宅|量化投资策略系列分享】多周期共振交易策略

    【数量技术宅|金融数据分析系列分享】为什么中证500(IC)是最适合长期做多的指数

    商品现货数据不好拿?商品季节性难跟踪?一键解决没烦恼的Python爬虫分享

    【数量技术宅|金融数据分析系列分享】如何正确抄底商品期货、大宗商品

    【数量技术宅|量化投资策略系列分享】股指期货IF分钟波动率统计策略

    【数量技术宅 | Python爬虫系列分享】实时监控股市重大公告的Python爬虫

     

  • 相关阅读:
    8种Nosql数据库系统对比
    How to get the value of a form element : check box and radio button
    Jquery 操作Html 控件 CheckBox、Radio、Select 控件
    Reading CheckBoxes and Radio Buttons
    java中的匿名内部类总结
    如何理解java泛型类
    java 多态
    linux下使用 du查看某个文件或目录占用磁盘空间的大小
    内网ip范围
    Nginx配置优化参考
  • 原文地址:https://www.cnblogs.com/sljsz/p/14791476.html
Copyright © 2011-2022 走看看