你看,我就说吧。

比特币定投计划(一)计划介绍


简介

这是一个针对比特币的、在熊市利用定投均摊成本、并在牛市赚钱的计划。

为什么选择比特币,而不是山寨币,或者黄金、股票等等?原因其实很简单,比特币的历史走势表现出了非常明显的大体跟时间有关的牛熊周期(这可能跟四年减半一次有关),这个计划正是利用这个规律来赚钱的。规律未来有没有可能失效?谁都不清楚,至少在规律还有效的时候,本计划会一直坚持下去。

为什么是定投,而不是在熊市最低点的时候全仓抄底?因为最低点的形成受偶然因素的影响很大,往往是某些黑天鹅事件引发价格的突然暴跌,这是技术分析无法预测的,也不存在某个指标可以精准地告诉你熊市中的哪一天或者哪个价格是最低点。要么你想梭哈的那个价位最终到不了,那样的话你熊市一分钱都不会买;要么你全仓买在了半山腰,那样的话后面再跌你就没钱买了,体验会很差。

为什么比特币会有跟时间有关的牛熊周期?我认为下面这段论述有一定道理:

我认为所有商品价格都是供需关系决定的。首先我们看一下比特币的供求关系,明白价格变化后面的物理过程。

比特币每天挖矿是出1800个币,每个币按照现在的价格6,000美元计算,每天支持这个价格需要进入的新钱是10.8million,一年大约是40亿美元。就是假设比特币现有持有人不卖出一个币,那么每年流入的新钱需要40亿美元来支持现在的价格。因为矿工需要支付电费、付人工工资,这些钱都是用当地货币结算的。新钱从哪里来,是从了解比特币的人的越来越多,认同比特币的价值的人买入中来的。如果这些新人的增加量越来越少,那么每天输入的新鲜血液就无法支撑这个价格。价格下跌,会让更多的人远离比特币,新鲜血液越来越少。新鲜血液越少,价格下跌的更多。这是一个正反馈过程,导致价格总是暴跌暴涨。直到比特币价格跌到和流入现金平衡了,市场价格稳定住了,那么可以说供求关系基本平衡。

每四年一次的减半是对这个供求关系的重新破坏。下一次的减半应该发生在2020年的5月份左右。无论比特币当时稳定在什么价格上,无论是1000美元还是6000美元,减半之后都会导致供求关系的失衡。供应突然减少一倍,流入的现金没有变化,会让价格产生飙升,飙升的价格会带动新闻媒体的宣传,会让更多的人对比特币感到好奇。看到那么多一夜暴富的神话,就会有更多的新鲜血液进来。更多的需求进来会刺激价格的进一步飙升,又进入一个新的正反馈循环,直到下一次泡沫破裂。

——贝版《比特币牛市何时到来 (2018-08-14)》

声明

本计划仅作为个人投资理财的记录,不构成任何投资建议。计划执行过程中可能会产生较大的浮亏,计划完成后也可能没办法产生收益。本计划对本金多少没有要求,但是请盈亏自负。

方案

本计划每四年进行一次,会选择熊市中的一段时间进行定投。

必须要能估计出大概定投的天数,然后将定投资金均分并投进去。实际情况一般会和估计有所偏差,比如熊市过长,提前用光了所有的资金;或者定投时间过长,导致定投成本偏高;或者定投区间和实际的低位区间偏差大,导致定投成本偏高。我们希望熊市底部出现在定投的过程中,所以定投时间不能太短(要防止因为一些偏差导致熊市底部落在定投时间以外);同时我们也希望尽可能降低定投成本价,所以定投时间不能太长(时间越长距离熊市底部越远的位置成本就越高)。

对于两类人群,有两套不同的方案可供选择:

  • 固定总资金(每轮计划投入的总资金固定):把总投入资金除以计划要定投的天数得到每天要投的资金,然后在计划期间每天定投即可
  • 持续现金流(每个月都可以拿出一定资金参与计划):把资金分成三部分——计划开始前存下的资金、计划期间存下的资金、计划结束后存下的资金
    1. 计划开始前存下的资金:预留一个月的资金,其他部分和第一套方案相同
    2. 计划期间存下的资金:因为每个月只有某一天发工资,加上入金过程可能会耽误一些时间,所以前面预留的一个月资金可以在计划开始时先投入,当月的资金到下个月再投入。将一个月资金按照当月天数均分,计划期间每天投一份,当月剩余的部分留到下个月继续投
    3. 计划结束后存下的资金:这是和第一套方案最大的区别,因为计划结束后依然有资金可以投,而当时的价格可能还在低位,与其把这部分资金留到下一轮熊市再投,不如直接在这一轮投掉(下一轮定投的价格大概率是比这轮要高不少的)。每个月的资金按照当月天数均分,每天投一份,直到价格超过定投过程的最高点,结束定投

定投采用每日固定资金的方式,有两个优点:

…
阅读全文 ⟶

MIT 6.5840 构建 Raft 调试工具


工欲善其事,必先利其器。 ——《论语·卫灵公》

目标

本文参考这篇博客,对代码做了一些调整。

在实现 Labs 的过程中,为了弄清楚系统究竟在干什么,以及哪里出了问题,需要找到一种比较方便的方法。在分布式系统中,我们没法像单体应用程序那样可以用gdb或者pdb做调试,传统的print语句也帮不上什么忙,我们需要依赖对日志的分析。

用于调试的日志最重要的是要包含什么角色 在什么时间 做了什么类型 的事情,然后我们就可以设计工具来对日志的输出进行排版上的美化。简单来说,我们会让 Go 代码输出特定格式的日志,然后通过 Python 的 Rich 库解析日志,输出下图这样的结果。

美化格式后的日志图

图中包含三个维度的信息,纵轴自上而下代表时间的先后顺序(生产环境上使用需要保证各节点的时间进行同步,本例中都是单机运行无所谓),横轴代表不同的角色(节点),不同的颜色代表不同类型的事件。

Go 日志代码

为了方便 Python 脚本的处理,日志需要用指定的格式生成。我们定义一个单独的包来编写相关代码,方便其他包来调用。

…
阅读全文 ⟶

MIT 6.5840 Lab 3A: Raft - leader election (2025)


前言

今年 Raft lab 的测试新增了一个功能,可以在测试失败时输出下面这样的 HTML 文件,帮助你确认在什么情况下出现了什么问题。 以HTML格式输出针对raft代码的测试结果

当然,光靠这个并不能帮你 debug 代码中的问题,关于如何实现更好的 debug 工具,请看这篇文章。

题目

Implement Raft leader election and heartbeats (AppendEntries RPCs with no log entries). The goal for Part 3A is for a single leader to be elected, for the leader to remain the leader if there are no failures, and for a new leader to take over if the old leader fails or if packets to/from the old leader are lost. Run go test -run 3A to test your 3A code.

…
阅读全文 ⟶