Python教程 第8节: 如何计算历史杠杆ETF价格?

很多朋友问我,我回测中的历史杠杆ETF的数据是怎么来的,今天我就告诉大家如何根据股票历史价格计算出相应的杠杆ETF价格。

杠杆ETF运行机制

首先我们得明白杠杆ETF的运行机制,杠杆ETF每天结算,每天的涨跌幅等于没有杠杆的涨幅或者跌幅乘以杠杆比例,然后还要扣除ETF管理费用。

计算变化率函数

我们先写一个函数计算原始股票价格每天的变化率。

def _compute_change_ratio(previous_value: float,
                          current_value: float
                          ):
    change_ratio = current_value / previous_value
    return change_ratio

杠杆ETF价格变化函数

接下来,我们需要编写一个函数来计算杠杆ETF的价格变化。考虑到管理费用,我们还需引入一个修正值。

计算开盘价的杠杆ETF价格

我们先写一个初始版本,只计算带杠杆的开盘价,给3个初始变量:

  • 杠杆比例leverage=2
  • 每日价格修正值先设为1(daily_correction_rate=1),也就是不修正
  • 杠杆ETF第一天的股价设为1(init_value=1),这个值等于多少无所谓。,并展示其效果。

计算全部价格并封装函数

接下来,我们将补充收盘价、最高价和最低价的计算,并将代码封装成一个函数。

PS:这里我加入了函数变量的type信息(DataFrame,int,float),这在Python中不是必须的,但是加入变量内容信息更容易维护代码。

改进并调试

我们可以根据实际情况调整管理费用等参数,使得计算结果更加准确。

我们可以使用QLD官方给出的的年化0.95%的管理费作为参考,按照一年252个交易日计算,每个交易日的损失率就是(1-0.0095)**(1/252),修正比率也就是1-0.0095**(1/252),最后的代码变成这样。我们也可以把这里的函数全部放到别的py文件中,比如我们在前几节中建的utils.py。

最终得到的结果可以与QLD的实际价格进行对比,进行微调以使计算结果更加准确。同时,也可以根据需求自行计算不同杠杆倍数的ETF价格,根据我的经验,杠杆倍数越高,修正值越小,损耗也越严重,这也是为什么杠杆ETF长期持有风险大的原因。

保存导出数据

当然,你也可以选择把计算出来的数据保存下来,这也很简单

5 1 vote
Article Rating

Leave a Reply

4 Comments
Inline Feedbacks
View all comments
Jax Luo
1 year ago

两个星号评论发不出来,变成加粗了 **

Jax Luo
1 year ago

每个交易日的损失率就是(1-0.0095)^(1/252),这句话没太理解,每个交易日损失率应该是0.0095^(1/252)吧?

error: Content is protected !!
Scroll to Top
error: Content is protected !!
Scroll to Top