利用tushare的pro版本,结合唐奇安通道和MACD来编写一个发出买入和卖出信号的策略并导出到excel
时间: 2024-05-29 19:10:40 浏览: 6
import tushare as ts
import pandas as pd
import numpy as np
# 获取数据
pro = ts.pro_api(token='your_token')
df = pro.daily(ts_code='000001.SZ', start_date='20210101', end_date='20210630')
# 计算指标
df['ma20'] = df['close'].rolling(window=20).mean()
df['ma60'] = df['close'].rolling(window=60).mean()
df['high20'] = df['high'].rolling(window=20).max()
df['low20'] = df['low'].rolling(window=20).min()
df['upper'] = df['high20'] - df['ma20'] * 2
df['lower'] = df['low20'] + df['ma20'] * 2
df['dif'] = df['close'].ewm(span=12).mean() - df['close'].ewm(span=26).mean()
df['dea'] = df['dif'].ewm(span=9).mean()
df['hist'] = 2 * (df['dif'] - df['dea'])
# 生成信号
df['signal'] = 0
df['position'] = np.nan
for i in range(1, len(df)):
if df.loc[i, 'close'] > df.loc[i, 'upper'] and df.loc[i-1, 'close'] <= df.loc[i-1, 'upper']:
df.loc[i, 'signal'] = 1
elif df.loc[i, 'close'] < df.loc[i, 'lower'] and df.loc[i-1, 'close'] >= df.loc[i-1, 'lower']:
df.loc[i, 'signal'] = -1
# 计算持仓
for i in range(1, len(df)):
if df.loc[i, 'signal'] == 1:
df.loc[i, 'position'] = 1
elif df.loc[i, 'signal'] == -1:
df.loc[i, 'position'] = 0
else:
df.loc[i, 'position'] = df.loc[i-1, 'position']
# 计算收益率
df['returns'] = df['pct_chg'] * df['position']
# 导出到excel
df.to_excel('strategy.xlsx')
相关推荐
![doc](https://img-home.csdnimg.cn/images/20210720083327.png)
![doc](https://img-home.csdnimg.cn/images/20210720083327.png)
![md](https://img-home.csdnimg.cn/images/20210720083646.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![doc](https://img-home.csdnimg.cn/images/20210720083327.png)