美文网首页量化学习笔记我爱编程
量化学习笔记#股票的移动平均线的研究(1)单股单组均线

量化学习笔记#股票的移动平均线的研究(1)单股单组均线

作者: 刀客特鹿 | 来源:发表于2018-02-10 21:09 被阅读21次

    本文是通过之前学习《Python量化入门》课程系列后,进行的学习研究,将思路和结果供大家分享一起讨论。

    关键词:Python, 量化研究,移动平均线。

    实验目的:对单个股票,使用单组参数,进行交易策略回测模拟。

    原始数据:股票 600000 浦发银行的个股日线数据

    单组参数:短期均线 ma_short = 14

    长期均线 ma_long = 50

    交易策略:最小交易周期:日

    买入信号:当短期均线上穿长期均线时候 ma_short >= ma_long

    卖出信号:当长期均线下穿长期均线时候 ma_short < ma_long

    信号的判别价格:每日收盘价(历史除权价格)

    交易计算价格:信号发生后的第二日开盘价(历史未除权价格)

    交易手续费:按0.0005计算

    印花税:按0.001计算,仅在卖出时发生

    交易初始资金 1000000

    最小交易数量:100股

    测试的时间范围:20050101-20170512

    Benchmark: 上证指数

    实验步骤:

    第一步: 写出移动平均线的计算方法:

    # 简单均线策略

    def simple_ma(df, ma_short=5, ma_long=20, price='close'):

        """

        :param df: 输入对的个股数据

        :param ma_short: 短期均线

        :param ma_long: 长期均线

        :return: 有'signal',’hold'列的df

        """

        df = df.copy()

        # ===计算短期均线和长期均线

        df['ma_short'] = df[price].rolling(ma_short, min_periods=1).mean()

        df['ma_long'] = df[price].rolling(ma_long, min_periods=1).mean()

        return df

    第二步:数据准备

    1. 导入指定的单个股票数据,本案例使用的 600000 浦发银行 这个数据

    code = 'sh600000'stock_data = get_stock_data_xbx(code)

    基础数据格式如下:

    2. 数据处理,形成我们能够计算的数据

    1) 选择2005年以后的数据

    stock_data = stock_data[stock_data['date'].dt.year >= 2005]

    2) 计算除权价

    stock_data = cal_adjust_price(stock_data, return_type=1)

    3)计算涨跌停信号,用除权价的数据

    stock_data = limit_up_down(stock_data, open='open_adjust_back', close='close_adjust_back')

    第三步:参数设置和策略模拟

    1)设置均线的参数

    ma_long = 50ma_short = 14

    2)设置交易信号

    当短期均线上穿长期均线时,设置信号为1

    df.loc[(df['ma_short'] >= df['ma_long']) & (df['ma_short'].shift(1) < df['ma_long'].shift(1)), 'signal'] = 1

    # 当短期均线下穿长期均线时,设置信号为0

    df.loc[(df['ma_short'] < df['ma_long']) & (df['ma_short'].shift(1) >= df['ma_long'].shift(1)), 'signal'] = 0

    3)计算仓位

    df = position(df)

    4)去掉涨 跌停不能交易的信号

    df.loc[(df['limit_up_open'] == 1) | (df['limit_down_open'] == 1), 'pos'] = Nonedf['pos'].fillna(method='ffill', inplace=True)

    5)计算策略收益率

    df = equity_curve_complete(df)

    # 计算自然收益率

    df = nat_equity(df, type=1)

    6)添加指数信息作为benchmark

    index_data = import_index_data_xbx()df = merge_with_index_data(df, index_data)

    第四步:根据交易结果,进行指标评价,并保存

    1)将必要信息保存,如股票代码,开始日期,结束日期,长期均线参数,短期均线参数

    result = [code, df['date'].iloc[0], df['date'].iloc[-1], ma_long, ma_short]

    2)补充收益率信息

    result.extend(pf_analysis.get_all_ratio(df, printout=printout, index=True, nat=True))

    3)得到所有的收益评测结果

    result_df = pd.DataFrame(data=[result],

                            columns=['code', 'start_date', 'end_date', 'ma_long', 'ma_short', 'total_return',

                                      'annual_return', 'nat_total_return', 'nat_annual_return', 'volatility',

                                      'max_drawdown', 'final_ratio', 'average_up_change', 'info_ratio', 'sharp_ratio',

                                      'alpha', 'beta'])

    return result_df

    第五步:绘制收益曲线

    pf_analysis.plot_cumulative_return(df=stock_data, complete=True)

    实验总结:

    本次实验采用双均线策略,长期均线50日,短期均线14日。

    对于个股600000浦发银行,在测试的时间范围内(20050101-20170512)。

    策略收益 > 个股自身收益 > 上证指数收益。

    以上交易策略的大量原始代码和框架,师从于《Python量化入门》课程系列,想获得所有的源代码,并建立自己的交易策略,建议购买课程后深入学习。

    课程评价

    优点:这套课程特别适合对Python,pandas都没掌握的同学,和“入门”二字很贴切。虽然价要收取一定的费用,但是对于零基础的同学还是墙裂推荐。课程会提供所有的源代码和股票数据,通过一个系列的学习,可以基本掌握股票的回测框架。

    缺点:只能用微信访问学习,PC端的话要通过微信客户端访问。

    系列总课时约12多个小时,会获得课程讲解的所有源代码。如要深入熟练掌握,课外练习可能需要100小时+。

    课程传送门:

    相关文章

      网友评论

        本文标题:量化学习笔记#股票的移动平均线的研究(1)单股单组均线

        本文链接:https://www.haomeiwen.com/subject/xbyhtftx.html