# import program.Functions as Functions pd.set_option('expand_frame_repr', False) # 当列太多时不换行 # ===== 第一个模块: 数据准备 # === 读入数据 code = 'sz300001' df = Functions.import_stock_data(code) # 判断股票上市是否满一定时间,如果不满足,则不运行策略 if df.shape[0] < 250: print '股票上市未满一年,不运行策略' exit() # === 计算复权价 fuquan_type = '后复权' df[[i + '_' + fuquan_type for i in '开盘价', '最高价', '最低价', '收盘价' ]] = Functions.cal_fuquan_price(df, fuquan_type) # ===== 第二个模块:产生交易信号 # === 根据均线策略产生交易信号 df = Signals.signal_ma(df, ma_short=5, ma_long=50) # ===== 第三个模块: 根据交易信号计算每天的仓位 # ===计算仓位 df = Timing_Functions.position(df) # == 截取上市一年之后的交易日 df = df.iloc[250 - 1:] # 为什么是250-1? # 将第一天的仓位设置为 0 df.iloc[0, -1] = 0 # ===== 第四个模块: 根据仓位计算资金曲线
# 得到所有股票的列表 code_list = Functions.get_stock_code_list_in_one_dir(config.input_data_path + '/stock_data') # 遍历所有股票 output = pd.DataFrame() for code in code_list: print code # 导入数据 df = Functions.import_stock_data(code) # 计算后复权价,计算指标要用复权价 df[[i + '_后复权' for i in ['开盘价', '最高价', '最低价', '收盘价'] ]] = Functions.cal_fuquan_price(df) # 计算N天后涨跌幅 for i in [1, 3, 5, 10]: df[str(i) + '天后涨跌幅'] = df['收盘价_后复权'].shift(-i) / df['收盘价_后复权'] - 1 # 取2017年1季度之前的数据 df = df[df['交易日期'] < pd.to_datetime('20170401')] if df.empty: continue # 计算技术指标。不同指标此处需要参数可能不同,需要修改。 df[pattern_name] = getattr(talib, pattern_name)(df['开盘价_后复权'].values, df['最高价_后复权'].values, df['最低价_后复权'].values, df['收盘价_后复权'].values)
# 通过pattern_name设定要跑的指标,在此处设定指标名称 pattern_name = 'CDL3OUTSIDE' # 得到所有股票的列表 code_list = Functions.get_stock_code_list_in_one_dir(config.input_data_path + '/stock_data') # 遍历所有股票 output = pd.DataFrame() for code in code_list: print code # 导入数据 df = Functions.import_stock_data(code) # 计算后复权价,计算指标要用复权价 df[[i + '_后复权' for i in ['开盘价', '最高价', '最低价', '收盘价']]] = Functions.cal_fuquan_price(df) # 计算N天后涨跌幅 for i in [1, 3, 5, 10]: df[str(i) + '天后涨跌幅'] = df['收盘价_后复权'].shift(-i) / df['收盘价_后复权'] - 1 # 取2017年1季度之前的数据 df = df[df['交易日期'] < pd.to_datetime('20170401')] if df.empty: continue # 计算技术指标。不同指标此处需要参数可能不同,需要修改。 df[pattern_name] = getattr(talib, pattern_name)(df['开盘价_后复权'].values, df['最高价_后复权'].values, df['最低价_后复权'].values, df['收盘价_后复权'].values) # 去除N天后涨跌幅为空的情况
""" from program import Functions import pandas as pd import talib pd.set_option('expand_frame_repr', False) # 当列太多时不换行 # 通过pattern_name设定要跑的指标,在此处设定指标名称 pattern_name = 'CDL2CROWS' # 导入一只股票的数据,在此处设定股票代码 code = 'sz000001' df = Functions.import_stock_data(code) # 计算后复权价,计算指标要用复权价 df[[i + '_后复权' for i in ['开盘价', '最高价', '最低价', '收盘价']]] = Functions.cal_fuquan_price(df) # 计算N天后涨跌幅 for i in [1, 3, 5, 10]: df[str(i) + '天后涨跌幅'] = df['收盘价_后复权'].shift(-i) / df['收盘价_后复权'] - 1 # 计算技术指标。不同指标此处需要参数可能不同,需要修改。 df[pattern_name] = getattr(talib, pattern_name)(df['开盘价_后复权'].values, df['最高价_后复权'].values, df['最低价_后复权'].values, df['收盘价_后复权'].values) # 找出符合pattern的日期 pattern_df = df[df[pattern_name] != 0] print pattern_df
pd.set_option('expand_frame_repr', False) # 当列太多时不换行 # 得到所有股票的列表 code_list = Functions.get_stock_code_list_in_one_dir(config.input_data_path + '/stock_data') # 遍历所有股票 output = pd.DataFrame() for code in code_list: print code # 导入数据 data = Functions.import_stock_data(code) # 计算后复权价 data[['开盘价', '最高价', '最低价', '收盘价']] = Functions.cal_fuquan_price(data) # 计算N天后涨跌幅 for i in [1, 3, 5, 10]: data[str(i) + '天后涨跌幅'] = data['收盘价'].shift(-i) / data['收盘价'] - 1 data = data[data['交易日期'] < pd.to_datetime('20170401')] if data.empty: continue # 计算KDJ指标 low_list = data['最低价'].rolling(9, min_periods=1).min() high_list = data['最高价'].rolling(9, min_periods=1).max() rsv = (data['收盘价'] - low_list) / (high_list - low_list) * 100 data['K'] = rsv.ewm(com=2).mean() data['D'] = data['K'].ewm(com=2).mean() data['J'] = 3 * data['K'] - 2 * data['D']