开启掘金生长之旅!这是我参与「掘金日新计划 2 月更文挑战」的第 21 天,点击检查活动详情

前言

上节文章咱们讲了macd买卖点,macd买卖点是咱们最常用的买卖点,而均线买卖点也是咱们股市的常用指标,接下来几节课咱们会多讲几种买卖点,然后把几种买卖点进行组合,得出一种最优的买卖点,好说干就干

均线战略

你在股市是否有这样的疑惑? 究竟什么时候该补仓,究竟什么时候该减仓?为什么每次止损经常抛出地板价?不止损又跌跌不休。

而今日咱们学的均线战略,就是专门处理这类问题的

什么是均线战略

双均线战略,通过建立m天移动平均线,n天移动平均线,则两条均线必有交点。若m>n,n天平均线“上穿越”m天均线则为买入点,反之为卖出点。该战略根据不同天数均线的交叉点,捉住股票的强势和弱势时刻,进行买卖

下面是一个双均线战略的比如

开发自己的量化交易系统,5年一个亿(六)------5日10日均线买入卖出

双均线函数

def ma_strategy(data, short_window=5, long_window=20):
    """
    双均线战略
    :param data: dataframe, 出资标的行情数据(有必要包括收盘价)
    :param short_window: 短期n日移动平均线,默许5
    :param long_window: 长时间n日移动平均线,默许20
    :return:
    """
    print("==========当时周期参数对:", short_window, long_window)
    data = pd.DataFrame(data)
    # 核算技术指标:ma短期、ma长时间
    data['short_ma'] = data['close'].rolling(window=short_window).mean()
    data['long_ma'] = data['close'].rolling(window=long_window).mean()
    # 生成信号:金叉买入、死叉卖出
    data['buy_signal'] = np.where(data['short_ma'] > data['long_ma'], 1, 0)
    data['sell_signal'] = np.where(data['short_ma'] < data['long_ma'], -1, 0)
    # 过滤信号:st.compose_signal
    data = bs.compose_signal(data)
    return data;

整合信号函数修正

def compose_signal(data):
    # 整合信号
    # buy_signal 为买入信号,设置为1,假如当时买入信号为1并且前一个买入信号也为1,那么设置当时买入信号为零
    data.loc[(data['buy_signal'] == 1) & (data['buy_signal'].shift(1) == 1), 'buy_signal'] = 0
    # sell_signal 为卖出信号,设置为-1,假如当时卖出信号为-1并且前一个卖出信号也为-1,那么设置当时卖出信号为零
    data.loc[(data['sell_signal'] == -1) & (data['sell_signal'].shift(1) == -1), 'sell_signal'] = 0
    # signal
    data_copy = data.copy();
    data_copy.loc[:, 'signal'] = data_copy['buy_signal'] + data_copy['sell_signal']
    # 假如第一条数据的sell_signal为-1的话,那么修正sell_signal为0
    data_signal = data_copy[data_copy['signal'] != 0];
    if data_signal.iloc[0]['signal'] == -1:
        data_copy.loc[data_signal.index[0], 'sell_signal'] = 0;
    return data_copy

主要是加了假如第一条数据的sell_signal为-1的话,那么修正sell_signal为0,防止呈现咱们还没买入呢,就卖出

封装核算收益率函数

def calculate_profit(data, code):
    """
    核算收益率
    :param data: dataframe, 出资标的行情数据(有必要包括收盘价)
    :param code: 股票代码
    :return:
    """
    # 核算收益率
    data = bs.calculate_profit_pct(data);
    # 核算累计收益率
    data = bs.calculate_cum_prof(data);
    data['cum_profit'] = data['cum_profit'] * 100;
    print(data);
    bs.show_chart(data, code);

均线战略收益率

也就是5日上穿10日均线买入,5日下穿10日均线卖出

def short_strategy(code, start_time, end_time=None):
    """
    短线买卖战略
    :param data: dataframe, 出资标的行情数据(有必要包括收盘价)
    :param short_window: 短期n日移动平均线,默许5
    :param long_window: 长时间n日移动平均线,默许20
    :return:
    """
    data = st.get_csv_price(code, start_time, end_time);
    data = ma_strategy(data, 5, 10);
    calculate_profit(data, code);
    # bs.show_buy_sell_chart(data, code);

此时看一下咱们的收益率

开发自己的量化交易系统,5年一个亿(六)------5日10日均线买入卖出
一共买入卖出4次,收益率为38.77% 仍是很可观的

开发自己的量化交易系统,5年一个亿(六)------5日10日均线买入卖出
对比一下确实是在这一天形成了死叉

均线战略买卖点是否契合预期

接下来检查一下买卖点,买卖点仍是咱们上一节课已经封装了,这节课就直接拿来用

开发自己的量化交易系统,5年一个亿(六)------5日10日均线买入卖出

good,仍是比较契合预期的

总结

  • 现在测验000001均线战略比macd战略收益高,所以仍是要多测验一些股票,看一下是否买卖战略可靠
  • 能否把macd战略和均线战略进行融合?
  • 怎么落地买卖点,真正用于实战?

上面这些问题,都会在后面的文章进行更新,⛽️