因为有网友想要这篇文章【杠杆型 ETF 适不适合长期持有?回测 TQQQ】中提到的 TQQQ mock 的原始码,就直接贴在这里了
先算出 QQQ 和 TQQQ 两者的年化报酬率差距,当时的数据是 2.8437
年化报酬率:57.09% / 20.12% = 2.8437
完整程式码如下:
import ffn
import matplotlib.pyplot as plt
import pandas as pd
%matplotlib inline
prices = ffn.get('qqq', start='1999-01-01')
prices['qqq_shift'] = prices['qqq'].shift(1)
prices['qqq_diff'] = prices['qqq'].diff(1)
prices['qqq_diff_tqqq'] = (2.8374 * (prices['qqq_diff'] / prices['qqq_shift'])) + 1
prices['tqqq_mock'] = 0
nRow = 0
while(nRow < prices.shape[0]):
if (nRow == 0):
# 初始化资料
tqqq_mock = 1
else:
tqqq_mock = prices['qqq_diff_tqqq'][nRow] * tqqq_mock
prices.iloc[nRow, prices.columns.get_loc('tqqq_mock')] = tqqq_mock
nRow = nRow + 1
print(prices)
这里就把 tqqq mock 的资料算出来了,再来就可用 ffn 绘图和计算资料
# 价格走势图
prices[["qqq", "tqqq_mock"]].rebase().plot()
plt.grid()
# 最大亏损
prices[["qqq", "tqqq_mock"]].to_drawdown_series().plot()
plt.grid()
plt.show()
# 计算
stats=prices[["qqq", "tqqq_mock"]].calc_stats()
stats.display()
程式很简单,没几行 code ,UPRO 和 TMF 也可以以此类推,不过其实我是 JAVA 工程师,对 Python 不太熟,如果有什么比较好的写法,也可以留言告诉我