一、原理
利用两条移动平均线的交叉点来判断买卖时机。这一策略基于不同周期的移动平均线对价格变动的反应速度不同。通常,短期移动平均线对价格变动反应较快,称为快线;长期移动平均线对价格变动反应较慢,称为慢线。
当快线由下向上穿过慢线,形成金叉,被视为买入信号,因为这意味着短期价格上涨速度超过长期平均水平,可能预示着一轮上涨趋势的开始。相反,当快线由上向下穿过慢线,形成死叉,被视为卖出信号,因为这可能预示着一轮下跌趋势的开始。
以上信息仅供参考,投资需谨慎,实际交易中的操作需要根据具体的市场情况和个人的交易经验来判断。
二、缺点
-
滞后性:由于移动平均线是基于历史数据计算的,因此该策略具有一定的滞后性,可能错过市场的最佳入场或离场时机。
-
在价格波动剧烈或趋势不明的市场中,该策略的效果不好;市场处于单边方向时,效果显著。
三、代码
def double_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)
# 计算涨幅
fluc_list = self.fluctuate(close_list)
# 指标
fast_line = talib.EMA(np.array(close_list), timeperiod=20)
slow_line = talib.EMA(np.array(close_list), timeperiod=30)
# 重整格式
rs_list, last_date = [], None
for i in range(1, len(stock_list)):
stock = stock_list[i]
before_fast_item = self.pe(fast_line[i-1])
before_slow_item = self.pe(slow_line[i-1])
fast_item = self.pe(fast_line[i])
slow_item = self.pe(slow_line[i])
color = 'grey'
if before_fast_item < before_slow_item and fast_item > slow_item:
color = 'red'
elif before_fast_item > before_slow_item and fast_item < slow_item:
color = 'green'
element = [stock.dt, stock.open, stock.close, stock.high, stock.low, stock.vol,fluc_list[i],
fast_item, slow_item, 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('double ema json file ' + json_file)