一、原理
多均线排列策略是一种基于移动平均线的技术分析方法,通过观察不同周期的移动平均线排列顺序,判断股票价格的趋势和买卖信号。
在多均线排列策略中,通常会选择不同周期的移动平均线,例如5日、10日、20日、60日、120日和240日等。这些均线从上到下依次排列,形成多头排列形态,表明市场处于上升趋势。当短期均线向上突破中长期均线时,被认为是买入信号;而当短期均线向下突破中长期均线时,被认为是卖出信号。
二、代码
def multi_ema_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_20 = talib.EMA(np.array(close_list), timeperiod=20)
ema_25 = talib.EMA(np.array(close_list), timeperiod=30)
ema_30 = talib.EMA(np.array(close_list), timeperiod=40)
# 斜率
ema_20_slope = talib.LINEARREG_SLOPE(ema_20, timeperiod=2)
ema_25_slope = talib.LINEARREG_SLOPE(ema_25, timeperiod=2)
ema_30_slope = talib.LINEARREG_SLOPE(ema_30, timeperiod=2)
# 重新组装数据
rs_list,last_date = [], None
for i in range(1, len(stock_list)):
stock = stock_list[i]
ema_20_slope_item = self.pe(ema_20_slope[i])
ema_25_slope_item = self.pe(ema_25_slope[i])
ema_30_slope_item = self.pe(ema_30_slope[i])
color = 'green'
if ema_20_slope_item > 0 and ema_25_slope_item > 0 and ema_30_slope_item > 0: # 三个大于0
color = 'red'
element = [stock.dt, stock.open, stock.close, stock.high, stock.low, stock.vol,
self.pe(ema_20[i]), self.pe(ema_25[i]), self.pe(ema_30[i]),
fluct_list[i], color]
rs_list.append(element)
last_date = stock.dt
# 增加尾部占位,用于页面展示
for i in range(1, 5):
last_date = DateUtil.getAfterAmDate(last_date, '%Y-%m-%d', i)
element = [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 ema json in ' + json_file)