今天我们分享关于屯币指数的原理和代码复现两个话题,屯币指数ahr999我简单搜了搜,是某位大神不知道那里来的逻辑点子,创建定义了这么一个震荡指标算法。该指标算法通过这两天的学习和复现,实际上就是一个类似咱们做期货或股票当中的震荡算法。只不过他的逻辑出发点,是用来进行大概率低位屯币买入的操作定量分析。
逻辑原理
我先说一下Ahr999该指数的本质:价格对200日几何平均值,价格对时间价值(起始2019年1月3日)的数学逻辑。实际上200日的几何平均就是一个rolling mean,只不过这里的rolling mean是一个几何平均不是简单的算术平均而已罢了,实际上两者差距不大。
我们用比较系统的公式来表述,如下图所示:
当价格对200日几何平均值比值>1,说明价格高于200日平均价格。
当价格对200日几何平均值比值<1,说明价格低于200日平均价格。
顾名思义,在这里是将200日的算术平均当成了一个定投成本分水岭。因为200日的均线移动缓慢,只有长期大幅度的价格低于200均线,才会出现公式第一项的减小。
当价格对拟合价格比值>1,说明价格高于拟合价格。
当价格对拟合价格比值<1,说明价格低于拟合价格。
顾名思义,比特币价格与比特币拟合价格的比值,隐含着比特币预期价格的偏离度。在这里拟合价格是一个仅仅考虑了币龄的拟合值,并根据作者特定的公式算法(具体我也没看懂为什么这么设计)推算未来短时间的拟合价格。
以上理论与逻辑,我们通过脑补可知:
1)两个乘数都低于1时,意味着当前价格既低于200日定投成本,也低于拟合价格预期,在此时进行投资可以更好地摊平成本,提高收益率预期或是缩短回本周期,而符合该条件的时间约占观测总时间的18%,该段时间属于投资者的择机策略中可以增大投资额的时间段。
2)两个乘数均较大时,意味着当前价格远高于200日定投成本,也远高于拟合价格预期。短期定投用户已经获得了较高收益率,短期范围内的资金筹码也大都获利,此时投资者可以根据指标具体数据减少投资额。
3)当两个乘数均在1附近波动时,意味着当前价格走势符合预期,属于适合采用定投策略的区间。
那么问题来了,我们要做的就是利用该算法进行空间和时间的性价比预期,当然包括收益率的预期,等待时间的预期等综合性价比预期——最少的时间获得最快的收益。
数据分析与验证
在进行数据分析和验证过程中我们先来看一下规则。如下图所示:
上图是从2020年6月2日到2022年8月10日。我们可以看到在
2020/6-2020/11
2021/6-2021/7
2022/1-2022/8
以上三个时间段是从我们今天数据里面仅存的3段“抄底”区间。
在此段区间内,低于0.45时间占比大约为7%,当指数位于0.45和1.2时间占比约为45%。
在这里由于后续研究不断迭代深入,以及数据整理等原因,我不在此一一赘述。直接说一些逻辑性结论:
(1)、我们可以通过这个时间在过去2年或者N年的占比来判断择时,例如:当这个时间占比达到多少的时候,意味着长期(1-3年)会有10倍的潜在收益。
(2)、结合美联储加息周期事件来共振判断,例如:美联储加息周期伴随着整体熊市的周期过程,那么当美联储加息尾声的时候,从流动性角度来看,就是大饼见底时候。并结合ahr999的定量数据辅助判断,加大屯币投资力度。
(3)、指数分布特征,定量判断安全区,既可以识别屯币入场安全区,也可识别风险出货区。如下图所示:
上图是某个期货品种的基差图,我们根据此方法论,将ahr999数据移植到此,如下图所示:
当两个分项分别处于1-1.5以下的时候,可以结合上述几点结论进行开始定投。而当两个分项分别处于3-3.5以上的时候,可以考虑减仓和买入看跌期权进行保护,当然买入看跌期权是有时间价值流逝的,这块我们不做过多讨论。
源码解析
我们通过ccxt获取币安日线数据,但是这个数据获取是属于大列表,每一天的数据又是一个小列表,时间属于unix的时间格式,因此我们第一步需要将时间格式转换为“年月日”的格式。
在这个过程中,我们将日期和收盘价一一保存在一个scdict的字典中。其中,我们截取第200天数据,用于后面循环计算。
因为我们截取的是历史数据中index为200位置的数据,然后一天一天的减,也就是说我们把data.head(200)的数据循环取出来,并且一个一个地对unix时间格式做了处理,然后将对应时间和收盘价放到一个pcls list中。
上面循环就算的目的是什么呢?其实是为了一个一个处理unix时间格式,然后将200日的收盘价进行几何平均,计算200日的平均线,也就是上文中说谈到的200日定投成本线。
其次,我们计算ahr999指数的第二个分项分母——币龄拟合价格。全文中唯一一个无法解释的就是这行代码,我也不知道为啥作者写一个5.84和17.01。
最后,ahr999就是就上文中的计算公式复现。至此,一个循环就计算完了,随后将上一个循环的第200天加上一天后,在进行上面的循环往复,形成一个rolling。
随着avguts逐步一天一天的往上加,一直加到等于今天(now)的循环。也就是说随后的每一天都去rolling过去200天数据。
我们在每一次新的rolling200天数据后,重新计算一遍ahr999指数,随后将每一个新的200天保存到alltimedict字典中。输出的数据内容大致如下:
最后我们将该数据转换格式后进行文件输出,与大饼日线数据进行merge合并。,如下图所示:
总结:
1、代码核心就是一直在循环rolling就算,尽管看起来很复杂,实际上先计算一个预热数据,然后进行一个while的循环,里面套入一个200天的for循环,核心计算就自由3行代码。
2、Ahr999指数可以不仅可以作为屯币和逃顶,也可以作为一个右侧的长周期的入场点信号择时。
3、加入事件驱动型策略思想,提高定投准确时机。
你要的干货都在这里→关注V“松鼠宽客”
松鼠宽客:Pro08丨累计概率密度突破策略https://blog.csdn.net/m0_56236921/article/details/126637398?spm=1001.2014.3001.5502
松鼠宽客:KD01策略丨SuperTrend+空头波段https://blog.csdn.net/m0_56236921/article/details/126504676?spm=1001.2014.3001.5502
松鼠宽客:加降息与BTC流动性事件策略研究https://blog.csdn.net/m0_56236921/article/details/126136104?spm=1001.2014.3001.5502