2000字范文,分享全网优秀范文,学习好帮手!
2000字范文 > macd底背离的python_java尝试编写macd 试验顶背离底背离

macd底背离的python_java尝试编写macd 试验顶背离底背离

时间:2020-07-15 22:18:34

相关推荐

macd底背离的python_java尝试编写macd 试验顶背离底背离

MACD是查拉尔·阿佩尔(Geral Appel)于1979年提出的,由一快及一慢指数移动平均(EMA)之间的差计算出来。“快”指短时期的EMA,而“慢”则指长时期的EMA,最常用的是12及26日EMA;

一般MACD的值是12日的平均值与26日平均值的差;SIGNAL是MACD9日平均值;HISTOGRAM是MACD与SIGNAL的差。

公式如下:

MACD:EMA(C,12)-EMA(C,26);

Signal:EMA(MACD,9);

Histogram:MACD-Signal;

顶背离和底背离的概念:

MACD指标的背离就是指MACD指标的图形的走势正好和K线图的走势方向正好相反。MACD指标的背离有顶背离和底背离两种。

(1)顶背离

当股价K线图上的股票走势一峰比一峰高,股价一直在向上涨,而MACD指标图形上的由红柱构成的图形的走势是一峰比一峰低,即当股价的高点比前一次的高点高、而MACD指标的高点比指标的前一次高点低,这叫顶背离现象。顶背离现象一般是股价在高位即将反转转势的信号,表明股价短期内即将下跌,是卖出股票的信号。

(2)底背离

底背离一般出现在股价的低位区。当股价K线图上的股票走势,股价还在下跌,而MACD指标图形上的由绿柱构成的图形的走势是一底比一底高,即当股价的低点比前一次低点底,而指标的低点却比前一次的低点高,这叫底背离现象。底背离现象一般是预示股价在低位可能反转向上的信号,表明股价短期内可能反弹向上,是短期买入股票的信号。

在这里,我们忽略MACD指标的具体计算过程,直接谈一谈本次实验,小编给出策略思想并贴出两种策略分别的回溯效果。

实验采取的两种策略:

1.快线向上突破慢线时,表明股市处于一种强势之中,股价将再次上涨,我们选择买进股票,反之,当慢线向上突破快线时,表明股市处于可能跌入弱市的状态,我们选择卖出股票;

2.底背离买进,顶背离卖出。

第一种策略

代码如下:

class MyStrategy extends Strategy {

private double prevDelta = 0;

String stock1 = "sha-601318";

MACDFactor fMacd = new MACDFactor(12, 26, 9);

public void init(BackTestContext context) {

universe.add(stock1);

}

public void prepare(BackTestContext context) {

}

public void handleData(BackTestContext context, BarData data) throws Exception {

double macdOut = fMacd.get(stock1, MACDFactor.RET_MACD);

double macdSignal = fMacd.get(stock1, MACDFactor.RET_MACD_SIGNAL);

double delta = macdOut - macdSignal;

record("macd", macdOut);

record("macd_signal", macdSignal);

record("macd_hist",delta);

if (prevDelta > 0 && delta < 0) {

log.info("Sell at "+""+context.now+delta);

orderTargetPercent(stock1, 0, "Sell all.");

} else if (prevDelta < 0 && delta > 0) {

log.info("Buy at "+context.now+delta);

orderPercent(stock1, 80, "Buy in.");

}

prevDelta = delta;

}

}

回溯效果:

第二种策略

代码如下:

class MyStrategy extends Strategy {

private double prevDelta = 0;

private double prevClose = 0;

private double countA = 0;

private double countB = 0;

String stock1 = "sha-601318";

MACDFactor fMacd = new MACDFactor(12, 26, 9);

public void init(BackTestContext context) {

universe.add(stock1);

}

public void prepare(BackTestContext context) {

}

public void handleData(BackTestContext context, BarData data) throws Exception {

log.info("time: "+context.now);

double delta = fMacd.get(stock1, MACDFactor.RET_MACD_HIST);

record("macd_hist", delta);

if (delta < prevDelta && data.get(stock1).close > prevClose) {

countB = 0;

if(countA%5 == 0 && countA != 0 ){

log.info("Sell at "+context.now+" "+delta);

orderTargetPercent(stock1, 0, "Sell all.");

}

else{

countA += 1;

}

}else if (delta > prevDelta && data.get(stock1).close < prevClose){

countA = 0;

if(countB%5 == 0 && countB != 0 ){

log.info("Buy at "+context.now+" "+delta);

orderPercent(stock1, 80, "Buy in.");

}else{

countB += 1;

}

}

prevDelta = delta;

prevClose = data.get(stock1).close;

}

}

回溯效果:

相比之下MACD底背离、顶背离,这个逻辑还是蛮狠的。回撤也挺小。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。