예제 #1
0
stock_data = Functions.merge_with_index_data(stock_data, index_data)
stock_data = stock_data[[
    'date', 'code', 'open', 'high', 'low', 'close', 'change'
]]

concat = pd.DataFrame()

for i in range(14, 19):
    df = TA_strategy.adx(stock_data, i)
    df = df[df['date'] >= pd.to_datetime('2005-01-01')]  # 采用2005年起的数据
    df.reset_index(inplace=True,
                   drop=True)  # 在计算ADX之后,最早的一部分数据没有对应的值,需要重新排index

    # 当pdi上穿mdi,买入,信号为1;当pdi下穿mdi,卖空,信号为0
    # 计算ADX指标并得到信号和仓位
    df = Functions.cross_both(df, 'pdi', 'mdi')
    df = equity_cal.position(df)
    df = equity_cal.equity_curve_complete(df)
    # df = df[['date', 'code', 'open', 'high', 'low', 'close', 'change', 'volume', 'equity']]
    df['ADX_' + str(i)] = df['equity']
    df.set_index(keys='date', inplace=True)
    concat = pd.concat([concat, df['ADX_' + str(i)]], axis=1, join='outer')

stock_data = stock_data[stock_data['date'] >= pd.to_datetime('2005-01-01')]
stock_data['benchmark'] = (stock_data['change'] + 1).cumprod() * 1000000.00
stock_data.set_index(keys='date', inplace=True)
concat = pd.concat([concat, stock_data['benchmark']], axis=1, join='inner')

fig = plt.figure(figsize=(16, 5))
for i in range(14, 19):
    plt.plot(concat['ADX_' + str(i)], label='ADX_' + str(i))
예제 #2
0
        'code', 'start', 'param', 'stock_rtn', 'stock_md', 'strategy_rtn',
        'strategy_md', 'excessive_rtn'
    ])
    i = 0

    for p in range(16, 18, 2):
        for q in range(20, 21):

            df = TA_strategy.emv(stock_data, n=p, m=q)
            df = df[df['date'] >= pd.to_datetime('2005-01-01')]  # 采用2005年起的数据
            df.reset_index(inplace=True,
                           drop=True)  # 在计算emv之后,最早的一部分数据没有对应的值,需要重新排index

            # EMV大于MAEMV时,买入,信号为1;当EMV小于MAEMV时,卖出,信号为 0
            # 计算EMV指标并得到信号和仓位
            df = Functions.cross_both(df, 'emv', 'maemv')
            df = equity_cal.position(df)
            df = equity_cal.equity_curve_complete(df)
            df = df[[
                'date', 'code', 'open', 'high', 'low', 'close', 'change',
                'volume', 'equity'
            ]]
            df['capital_rtn'] = df['equity'].pct_change(1)
            df.ix[0, 'capital_rtn'] = 0
            df['capital'] = (df['capital_rtn'] + 1).cumprod()

            df_stock = stock_data.copy()
            # 股票的年化收益
            rng_stock = pd.period_range(df_stock['date'].iloc[0],
                                        df_stock['date'].iloc[-1],
                                        freq='D')