文章來源: 量化小課堂
#!/usr/bin/env python
#coding:utf-8
import pandas as pd
index_data = pd.read_csv('./all_trading_data/stock data/sh000001.csv', parse_dates=['date'])
index_data = index_data[['date', 'high', 'low', 'close', 'change']]
index_data.sort_values('date', inplace=True)
N1 = 20
N@ = 10
index_data['最近N1個(gè)交易日的最高點(diǎn)'] = pd.rolling_max(index_data['high'], N1)
index_data['最近N1個(gè)交易日的最高點(diǎn)'].fillna(value=pd.expanding_max(index_data['high']), inplace=True)
index_data['最近N2個(gè)交易日的最低點(diǎn)'] = pd.rolling_min(index_data['low'], N1)
index_data['最近N2個(gè)交易日的最低點(diǎn)'].fillna(value=pd.expanding_min(index_data['low']), inplace=True)
buy_index = index_data[index_data['close'] > index_data['最近N1個(gè)交易日的最高點(diǎn)'].shift(1)].index
index_data.loc[buy_index, '收盤發(fā)出的信號(hào)'] = 1
sell_index = index_data[index_data['close'] < index_data['最近N2個(gè)交易日的最低點(diǎn)'].shift(1)].index
index_data.loc[sell_index, '收盤發(fā)出的信號(hào)'] = 0
index_data['當(dāng)天的倉位'] = index_data['收盤發(fā)出的信號(hào)'].shift(1)
index_data['當(dāng)天的倉位'].fillna(method='ffill', inplace=True)
index_data['資金指數(shù)'] = (index_data['change'] * index_data['當(dāng)天的倉位'] + 1.0).cumprod()
initial_idx = index_data.iloc[0]['close'] / (1 + index_data.iloc[0]['change'])
index_data['資金指數(shù)'] *= initial_idx
index_data[['date', 'high', 'low', 'close', 'change', '最近N1個(gè)交易日的最高點(diǎn)',
'最近N2個(gè)交易日的最低點(diǎn)', '當(dāng)天的倉位', '資金指數(shù)']].to_csv('turtle.csv', index=False, encoding='gbk')
index_data['海龜法則每日漲跌幅'] = index_data['change'] * index_data['當(dāng)天的倉位']
year_rtn = index_data.set_index('date')[['change', '海龜法則每日漲跌幅']] \
.resample('A', how=lambda x:(x+1.0).prod() - 1.0) *100
print year_rtn