关于计算cum_profit的问题
来源:4-6 双均线策略:计算信号收益率

xfcy_晓风残月
2021-04-21
Hi DeltaF:
关于本节有一个问题向您请教,视频中的计算cum_profit()
是基于卖出信号(signal == -1)计算出来的,但是profit_pct()
又是基于买入卖出信号(signal == 1 | signal == -1
)计算的,我的理解如下,请老师判断:
profit_pct() # 计算浮动盈亏比
在这里可以理解成:- 设:买入信号产生时以当天收盘价买入为buy
- 设:卖出信号产生时以当天收盘价卖出为sell
- 根据公式得出pct:
pct=sell−buybuypct = \frac{sell - buy}{buy}pct=buysell−buy
cum_profit() # 计算累积收益率
在这里可以理解成:- 设:买入信号产生时以当天收盘价买入为buy
- 设:卖出信号产生时以当天收盘价卖出为sell
- 设:基础单位为1
- 根据公式可以得出cum:
cum=∏(1+sell−buybuy)−1cum = \prod(1 + \frac{sell - buy}{buy}) -1cum=∏(1+buysell−buy)−1
- 根据视频中的讲解,cum 就被抽象成了:
- 设:卖出信号为sell
- 设:上一卖出信号为exsell
- 根据公式得出视频中的cum:
cum=∏(1+sell−exsellexsell−1)cum = \prod(1 + \frac{sell - exsell}{exsell} - 1)cum=∏(1+exsellsell−exsell−1)
以下是视频的结果:
以下是我的计算结果:
写回答
1回答
-
xfcy_晓风残月
提问者
2021-04-22
# 发现3个BUG:
1. signal整理时,应该将周期内的第一个-1(卖出)信号删除,添加以下代码:
# 删除首行是-1的行,因为在这个周期内假设是不持仓的 first_signal = data.iloc[0]["signal"] if first_signal == -1: data.drop(data.iloc[0].name, inplace=True)
2. 根据close计算的累积收益率和根据浮动盈亏比计算的累积收益率是不同的,代码如下:
# --------------根据close算出来的浮动盈亏再计算的累积收益率------------------ # def cum_prof(data: pd.DataFrame): """ 计算累积收益率(以单位1为基数上涨) 公式: (1 + 当天收益率)的累积 - 1 :param data: :return: """ # data["gross_profit"] = (data["profit_pct"] + 1).cumprod() data["cum_profit"] = pd.DataFrame(1 + data["close"].pct_change()).cumprod() - 1 return data # --------------根据已计算出来的浮动盈亏计算的累积收益率------------------ # def cum_prof_by_pct(data: pd.DataFrame): """ data中必须含有profit_pct向量 :param data: :return: """ data["cum_profit_pct"] = pd.DataFrame(1 + data["profit_pct"]).cumprod() - 1 return data
第3个bug正在验证中,之后上代码,请DeltaF老师指导。
00
相似问题
MACD的计算
回答 1
和老师计算的结果完全不同
回答 3