第四章 规则策略--指标组合策略

一、原理

均线和MACD组合策略是一种经典的技术分析方法,通过结合移动平均线和MACD指标来判断股票价格的走势和买卖信号。

在均线和MACD组合策略中,首先需要设置多条不同周期的移动平均线,以反映不同时间段的股票价格平均成本。常用的移动平均线包括5日、10日、20日、60日、120日和240日等。这些均线从上到下依次排列,形成多头排列形态,表明市场处于上升趋势。

同时,还需要计算MACD指标,该指标包括三条线:DIF线、DEA线和MACD柱状图。其中,DIF线是12日EMA(指数移动平均)和26日EMA的差值,DEA线是9日EMA(指数移动平均)和13日EMA的差值,而MACD柱状图则是DIF线和DEA线的差值。

当股价在均线附近震荡时,MACD指标会逐渐收敛。当股价向上突破均线时,MACD指标会向上突破0轴,并出现红柱。相反,当股价向下突破均线时,MACD指标会向下突破0轴,并出现绿柱。

在均线和MACD组合策略中,可以根据不同的情况来判断买卖信号。例如,当股价在均线附近震荡时,可以等待MACD指标收敛后再进行买卖操作。当股价向上突破均线时,可以买入;而当股价向下突破均线时,可以卖出。

此外,还可以结合其他技术分析方法来判断买卖信号的准确性和趋势的持续性。例如,当股价与MACD指标出现顶背离或底背离时,可以进一步确认买卖信号的有效性。

二、代码

def multi_index_strategy(self, stock_dict, period='day', output_dir='.'):
    for code, stock_list in stock_dict.items():
        close_list = []  # 收盘价
        for stock in stock_list:
            close_list.append(stock.close)
        # 计算涨幅
        fluct_list = self.fluctuate(close_list)
        ema_line = talib.EMA(np.array(close_list), timeperiod=30)
        dif, dea, macd = talib.MACD(np.array(close_list), fastperiod=12, slowperiod=26, signalperiod=9)
        # ema斜率
        ema_slope = talib.LINEARREG_SLOPE(ema_line, timeperiod=2)
        # macd柱斜率
        macd_slope = talib.LINEARREG_SLOPE(macd, timeperiod=2)
        # 组装数据
        rs_list, last_date = [], None
        for i in range(len(stock_list)):
            stock = stock_list[i]
            ema_slope_item = self.pe(ema_slope[i])
            macd_slope_item = self.pe(macd_slope[i])
            color = 'blue'
            if ema_slope_item > 0 and macd_slope_item > 0:
                color = 'red'
            elif ema_slope_item < 0 and macd_slope_item < 0:
                color = 'green'
            element = [stock.dt, stock.open, stock.close, stock.high, stock.low, stock.vol, fluct_list[i], color,
                       self.pe(ema_line[i]), self.pe(macd[i]), self.pe(ema_slope[i]),  self.pe(dif[i]), 
                       self.pe(dea[i]), self.pe(macd_slope[i])]
            rs_list.append(element)
            last_date = stock.dt
        # 增加尾部占位,用于页面展示
        for i in range(1, 5):
            extend_last_date = DateUtil.getAfterAmDate(last_date, '%Y-%m-%d', i)
            element = [extend_last_date, '-', '-', '-', '-', '-', '-', '-', '-', '-', '-', '-', '-']
            rs_list.append(element)
        # 转化为json格式输出
        ar = AjaxResult()
        json_rs = ar.succResult('data', rs_list)
        json_file = output_dir + code + '_' + period + '.json'
        self.write_file(json_rs, json_file)
        self._logger.info('multi index json in ' + json_file)

三、结果展示

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值