失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > python量化分析—对海龟交易法则的验证

python量化分析—对海龟交易法则的验证

时间:2024-02-09 16:41:38

相关推荐

python量化分析—对海龟交易法则的验证

掌握知识点:

1.data.cumsum()和data.cumprod()函数是累积和和累积积,data.prod()函数是计算连乘积;

2.pd.set_option(‘display.max_row’,500) 的用法

3.pd.rolling_max()和pd.expanding_max()函数用法

4.dataframe.fillna()函数用法,method=ffill为默认向后填充

5.data.loc[sell,’收盘发出的信号’]=0函数用法

6.resample()方法处理时间序列数据

7.shift()函数用法,shift(1)是往时间序列前一项;

8.为DataFrame表格添加行,统计下各列的方差(或者均值等),并汇总为一行

9 备注:掌握loc,iloc,ix的区别和应用

10.pd.set_option(‘display.max_row’,500) #设置最多可以显示500行

11.pd.set_option(‘display.max_columns’,100) #设置最多可以显示100列

第一步:导入数据,并按照交易日期排序,把交易时间转换为可以时间序列处理的datetime类型,之后选择交易日期在0315之后的数据

import pandas as pd

data=pd.read_csv(‘sh600027.csv’,encoding=’gbk’)

data=data[[‘股票代码’,’股票名称’,’交易日期’,’涨跌幅’,’最高价’,’最低价’,’收盘价’]]

data.交易日期=pd.to_datetime(data.交易日期)

data=data.sort(‘交易日期’)

第二步,对数据进行整理,计算每天的仓位,用仓位*(涨跌幅+1).cumprod()就能计算累计涨幅了;

1.用pd.rolling_max()和pd.expanding_max()函数用海龟法则对数据进行加工处理

2.海龟法则:当收盘价大于等于过去N1天收盘价最高价时买入;当收盘价小于过去N2天收盘价时卖出;

N1=20N2=10data['最近N1个交易日最高价']=pd.rolling_max(data.最高价,N1)data['最近N1个交易日最高价'].fillna(value=pd.expanding_max(data['最高价']),inplace=True)data['最近N2个交易日最低价']=pd.rolling_min(data.最低价,N2)data['最近N2个交易日最低价'].fillna(value=pd.expanding_min(data['最低价']),inplace=True)buy=data[data.收盘价>=data.最近N1个交易日最高价.shift(1)].indexdata.loc[buy,'收盘发出的信号']=1sell=data[data.收盘价<data.最近N2个交易日最低价.shift(1)].indexdata.loc[sell,'收盘发出的信号']=0data['当天的仓位']=data.收盘发出的信号.shift(1)

用fillna()方法填充NaN,method=ffill为默认,向后填充

data['当天的仓位'].fillna(method='ffill',inplace=True)

选择交易日大于0315的数据

data=data[data.交易日期>=pd.to_datetime('0315')]

用cumprod()累积函数计算资金指数

data['资金指数']=((data.涨跌幅 +1)* data.当天的仓位).cumprod()initial_idx=data.iloc[0]['收盘价']/(1+data.iloc[0]['涨跌幅'])data['资金指数'] *=initial_idx

计算海龟法则每日涨跌幅

data['海龟法则每日涨跌幅']=data.涨跌幅 * data.当天的仓位

用resample()方法计算海龟法则每年涨跌幅

year_rtn=data.set_index('交易日期')[['涨跌幅','海龟法则每日涨跌幅']].resample('A',how=lambda x: (x+1.0).prod() -1.0) year_rtn

看一下一直持股累积涨跌幅和海龟法则的累积涨跌幅,进行对比;

sum_cumprod_1=(year_rtn.涨跌幅+1).cumprod()sum_cumprod_2=(year_rtn.海龟法则每日涨跌幅+1).cumprod()year_rtn['累积涨跌幅']=sum_cumprod_1year_rtn['海龟法则累积涨跌幅']=sum_cumprod_2year_rtn

备注:cumsum()和cumprod()函数是累积和和累积积,prod()函数是计算连乘积;

d = arange(0, 10),cumsum(d)=array([ 0, 1, 3, 6, 10, 15, 21, 28, 36, 45])

cumprod(d+1)=array([ 1,2,6,24,120,720,5040, 40320, 362880, 3628800])

d=np.arange(1,5) ,d=d.prod()=24

我们发现海龟法则之所以累积能够战胜一直持股的策略,在于能够及时止损,跌的少才能保住青山在。

最简单的道理,如果跌去50%,要涨100%才能张回原来值,所以海龟法则的止损策略非常重要,也是该法则的核心。

为DataFrame表格添加行,统计下各列的方差(或者均值等),并汇总为一行

std_row=year_rtn[['涨跌幅','海龟法则每日涨跌幅','累积涨跌幅','海龟法则累积涨跌幅']].std()std_row=pd.DataFrame(data=std_row).Tyear_rtn=year_rtn.append(std_row)year_rtn

如果觉得《python量化分析—对海龟交易法则的验证》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。