『Python学习』海龟法则学习

1、本文代码来自:【量化小讲堂 - Python、Pandas系列】数据告诉你:惊人的海龟交易法则

2、

import pandas as pd

# 导入上证指数的原始数据
index_data = pd.read_csv(r"C:\Users\LCG22\Desktop\work\learn\Python\PythonLearn\DataSet\all_trading_data\index data\sh000001.csv", parse_dates=['date'])

# 保留这几个需要的字段
index_data = index_data[["date", "high", "low", "close", "change"]]

# 对数据按照 [date] 交易日期从小到大排序
index_data.sort("date", inplace=True)

N1 = 20
N2 = 10

# 通过 rolling_max 方法计算最近 N1 个交易日的最高价
index_data['最近N1个交易日的最高点'] = pd.rolling_max(index_data['high'], N1)
#对于上市不足 N1 天的数据, 取上市至今的最高价
index_data['最近N1个交易日的最高点'].fillna(value=pd.expanding_max(index_data['high']), inplace=True)

# 通过相似的计算方法计算最近 N2 个交易日的最低价
index_data['最近N2个交易日的最低点'] = pd.rolling_min(index_data['low'], N1)
index_data['最近N2个交易日的最低点'].fillna(value=pd.expanding_min(index_data['low']), inplace=True)

# 当当天的 [close] > 昨天的 [最近N1个交易日的最高点] 时, 将 [收盘发出的信号] 设定为 1
buy_index = index_data[index_data['close'] > index_data['最近N1个交易日的最高点'].shift(1)].index
index_data.loc[buy_index, '收盘发出的信号'] = 1
# 当当天的 [close] < 昨天的 [最近N2个交易日的最低点] 时, 将 [收盘发出的信号] 设定为0
sell_index = index_data[index_data['close'] < index_data['最近N2个交易日的最低点'].shift(1)].index
index_data.loc[sell_index, '收盘发出的信号'] = 0

# 计算每天的仓位, 当天持有上证指数时, 仓位为 1 , 当天不持有上证指数时, 仓位为 0
print '!!'*10
index_data['当天的仓位'] = index_data['收盘发出的信号'].shift(1)
print '@@'*10
index_data['当天的仓位'].fillna(method='ffill', inplace=True)

# 取 1992 年之后的数据, 排出较早的数据
index_data = index_data[index_data['date'] >= pd.to_datetime('19930101')]

# 当仓位为 1 时, 买入上证指数, 当仓位为 0 时, 空仓。 计算从 19920101 至今的资金指数
index_data['资金指数'] = (index_data['change'] * index_data['当天的仓位'] + 1.0).cumprod()
initial_idx = index_data.iloc[0]['close'] / (1 + index_data.iloc[0]['change'])
index_data['资金指数'] *= initial_idx

# 输出数据到指定文件
index_data[['date', 'high', 'low', 'close', 'change', '最近N1个交易日的最高点', '最近N2个交易日的最低点', '当天的仓位', '资金指数']].to_csv(r'C:\Users\LCG22\Desktop\work\learn\Python\PythonLearn\DataSet\testResult\turtle.csv', index=False, encoding='gbk')

index_data['海龟法则每日涨跌幅'] = index_data['change'] * index_data['当天的仓位']
year_rtn = index_data.set_index('date')[['change', '海龟法则每日涨跌幅']].\
    resample('A', how=lambda x: (x+1.0).prod() - 1.0) * 100
print year_rtn
print '运行结束'



你可能感兴趣的:(Python学习)