一、原理
均线和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)