Exemple #1
0
# 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

# ===== 第四个模块: 根据仓位计算资金曲线
Exemple #2
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
Exemple #5
0
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']