在上一堂课上,老师教大家如何利用Python实现双均线策略,这个策略非常简单实用,可以帮助我们判断交易的最佳时机。本节课的内容是让大家熟悉量化交易中常用的术语和它们的含义,以及学习Python中的计算技巧。
一、回测收益率
计算买入以来的收益率时,我们可以使用以下公式:收益率=(卖出时股价 – 买入时股价) / 买入时股价。其中,卖出时股价为PT,买入时股价为P0。
- pro=ts.pro_api()
- df=pro.daily(ts_code='000001.SZ', start_date='20200101', end_date='20231217')
- df['trade_date']=pd.to_datetime(df['trade_date']) #将交易日期转换为datetime格式
- df.set_index('trade_date',inplace=True)
- df.sort_index(ascending=True,inplace=True) #排序,按时间先后顺序排列,最新数据在最后面
您想要使用tushare库导入数据,选择平安银行2020年至2023年的数据,并基于此来计算亏损情况。由此,2020年初购买平安银行股票,到目前为止亏损了44.74%,股价从当时的16块多跌至今天的9块多,几乎亏损了一半。
- df['return']=df['open']/df['open'].iloc[0] #开盘价买入股票
- returns=df['return'].iloc[-1] – 1 #计算最后一天的收益率
- returns
二、回测年化收益
假设Rp表示年化收益,R表示总收益,即上面提到的回测收益率,m表示一年的交易天数(一年有250个交易日),n表示选择了多少天数据。则Rp可以用以下公式表示:Rp=(1+R)^(m/n) – 1
annual=(1+returns)**(250/len(df)) – 1 #在Python中,用 ** 表示幂运算
2020-2023年,平安银行的年化收益率为 -14.3%。对于那些在2020年购买了平安银行股票的投资者来说,情况确实不容乐观。
三、最大回撤
最大回撤率是指在特定时期内,投资产品净值从最高点下降到最低点的幅度的最大值。它用于衡量投资的潜在风险和可能的损失程度。最大回撤越小越好,因为这表明投资产品在特定时期内的波动性较低,风险较小。
Pj代表股票上涨前的最低价格,Pi代表股票最大跌幅前的最高价格。
最大回撤是指在一段时间内,投资组合净值从峰值下跌的最大幅度,通常用以下公式表示:Max_drawdown=Max[(Pi – Pj)/Pi],其中Pi代表峰值时投资组合的净值,Pj代表净值下跌到最低点时的数值。
可以使用以下Python代码来计算最大回撤率:
“`python
def max_drawdown(prices):
max_price=prices[0]
max_dd=0
for price in prices:
if price > max_price:
max_price=price
dd=(max_price – price) / max_price
if dd > max_dd:
max_dd=dd
return max_dd
“`
这个函数中,我们传入一段时间内的股票价格列表,然后遍历列表中的价格,计算每个价格与最大价格之间的回撤率,最后返回最大回撤率。
- ((df['open'].cummax() – df['open'])/df['open'].cummax()).max()
在2020年1月到2023年12月15日期间,平安银行股价出现过最大回撤,最大回撤率为63.06%。这意味着股价从最高点下跌了63.06%达到最低点。
我们还可以计算最大回撤天数,即从股票或资产的最高点下跌到最低点所花费的时间。
- #计算回撤天数
- i=np.argmax((df['open'].cummax() – df['open'])) #最大回撤结束的时间,最低点
- j=np.argmax(df['open'][:i]) #最大回撤开始的时间,最高点
- drawdown_days=i – j
- print(drawdown_days)
根据数据分析,平安银行股价经历了932天的最大回撤周期,最大回撤结束时间定为2023年12月15日,即上周五。由此可推断,股价下跌的趋势可能尚未结束,可能会迎来新低。因此,对平安银行的投资需要慎重考虑。
这里有个小tips~1296334825 备注:汇汇圈!
如若转载,请注明出处:https://www.fx002.com/12932.html