Tushare ID:491356
对于写一个策略,策略成功与否在于以下三点:
1.策略的数据是否正确
2.策略是否可行
3.代码能否运行成功
我尤其看重数据来源,以保证数据的准确性,数据是整个策略的基石,我使用过许多平台的股票数据,但我个人觉得Tushare平台的股票数据是相当nice,数据非常精确,为我的策略提供了精确的数据,使策略能够完美实现。我自己使用Tushare的股票数据写了一个关于RSI的策略。
import tushare as ts
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
ts.set_token('')
pro = ts.pro_api()
def get_data(ts_code,start_date,end_date): #获取股票数据
df = pro.daily(ts_code=ts_code,start_date=start_date,end_date=end_date)
df['trade_date'] = pd.to_datetime(df['trade_date'])
df.set_index('trade_date',inplace=True)
df = df.sort_index()
return df
def rsi(price,period): #编写rsi函数
change = price - price.shift(1)
change = change.dropna()
indexprc = change.index
upPrc = pd.Series(0,index=indexprc)
upPrc[change>0] = change[change > 0]
downPrc = pd.Series(0, index=indexprc)
downPrc[change < 0] = -change[change < 0]
SMUP = []
SMDOWN = []
for i in range(period, len(upPrc) + 1):
SMUP.append(np.mean(upPrc.values[(i - period): i], dtype=np.float32)*period/float((upPrc.values[(i - period): i]>0).sum()))
SMDOWN.append(np.mean(downPrc.values[(i - period): i], dtype=np.float32)*period/float((downPrc.values[(i - period): i]>0).sum()))
rsi = [100 * SMUP[i] / (SMUP[i] + SMDOWN[i]) for i in range(0, len(SMUP))]
indexRsi = indexprc[(period - 1):]
rsi = pd.DataFrame(rsi,columns=['rsi'],index=indexRsi)
print(rsi)
rsi.plot()
plt.grid(True)
plt.show()
def main(): #执行
ts_code='002761.SZ'
start_date='20220301'
end_date='20220430'
period = 14
get_data(ts_code,start_date,end_date)
df = get_data(ts_code,start_date,end_date)
rsi(df.close,period)
main()
运行结果:
但网上流传的计算公式是不准确的,导致出现了一定的误差,但通过手工计算,结果是正确的,足以说明Tushare平台的数据准确性。在此,我非常感谢Tushare这个平台,为我提供了非常准确的股票数据,有需要准确股票数据的人,你将可以通过Tushare 平台获得。