import pandas as pd
pd.set_option('expand_frame_repr',False) #当列多时不换行
#=========读入数据
df = pd.read_csv('filename',encoding='gbk')
df.columns = [i.encode('utf-8') for i in df.columns]
df = df[['交易日期','股票代码','开盘价','收盘价','最高价','最低价','涨跌幅','成交量']]
df.sort_values(by=[' 交易日期'], inplace=True)
df.reset_index(inplace=True, drop=True)
#===========计算复权价、
df['复权因子'] = (df['涨跌幅']+1).cumprod()
initial_price = df.iloc[0]['收盘价']/(1+df.iloc[0]['涨跌幅'])
df['收盘价—后复权'] = initial_price * df['复权因子']
df['开盘价—后复权'] = df['开盘价']/df['收盘价'] * df['收盘价-后复权']
df['最高价—后复权'] = df['最高价']/df['收盘价'] * df['收盘价-后复权']
df['最低价—后复权'] = df['最低价']/df['收盘价'] * df['收盘价-后复权']
df[['开盘价','最高价','最低价','收盘价']] = df[['收盘价—后复权','开盘价—后复权','最高价—后复权','最低价—后复权']]
df = df[['交易日期','股票代码','开盘价','收盘价','最高价','最低价','涨跌幅','成交量']]
#===========计算均线策略
#均线策略
#当短期均线上穿长期均线时,第二天以开盘价全仓买入,并在之后一直持有
#当短期均线下穿长期均线时,第二天开盘卖出,并空仓,直到下一次买入
#=======计算均线
ma_short = 5 #ma==moving_average
ma_long = 50 #长期均线
df['ma_short'] = df['收盘价'].rolling(ma_short,min_periods=1).mean()
df['ma_long'] = df['收盘价'].rolling(ma_long,min_periods=1).mean()
#将缺失的均线补齐
# df['ma_short'].fillna(value=df['收盘价'].expanding().mean(),inplace=True)
# df['ma_long'].fillna(value=df['收盘价'].expanding().mean(),inplace=True)
print(df)
exit()
#补全数据还可以使用rolling函数中的min_periods参数
#==============找出买出信号
condition1 = (df['ma_short'] >= df['ma_long'])
condition2 = (df['ma_short'].shift(1) < df['ma_long'].shift(1))
#将买入信号当天的signal设置为1
df.lor[condition1 & condition2,'signal'] = 0
print(df[['ma_short','ma_long','signal']])
exit()
#将无关变量剔除
df.drop(['ma_short','ma_long'], axis=1, inplace=True)
1027-股票择时--框架
猜你喜欢
转载自blog.csdn.net/yuge1023/article/details/102764804
今日推荐
周排行