Indicadores: MACD_Flat_Trend
//--- Расчёт индикатора for(int i=limit; i>=0 && !IsStopped(); i--) { BufferNL[i]=BufferDN[i]=BufferUP[i]=EMPTY_VALUE; if(BufferMACD[i]>0 && BufferSignal[i]<BufferMACD[i]) { BufferUP[i]=0.5; BufferNL[i]=BufferDN[i]=EMPTY_VALUE; Alert("Buy ", _Symbol); } else { if(BufferMACD[i]<0 && BufferSignal[i]>BufferMACD[i]) { BufferDN[i]=0.5; BufferNL[i]=BufferUP[i]=EMPTY_VALUE; Alert("Sell ", _Symbol); } else { BufferNL[i]=0.5; BufferDN[i]=BufferUP[i]=EMPTY_VALUE; } } }
//--- Расчёт индикатора int lastAlert = 0; // 0 es plano, 1 es compra, 2 es venta for(int i=limit; i>=0 && !IsStopped(); i--) { BufferNL[i]=BufferDN[i]=BufferUP[i]=EMPTY_VALUE; if(BufferMACD[i]>0 && BufferSignal[i]<BufferMACD[i]) { BufferUP[i]=0.5; BufferNL[i]=BufferDN[i]=EMPTY_VALUE; if(lastAlert != 1) { Alert("Buy ", _Symbol); lastAlert = 1; } } else { if(BufferMACD[i]<0 && BufferSignal[i]>BufferMACD[i]) { BufferDN[i]=0.5; BufferNL[i]=BufferUP[i]=EMPTY_VALUE; if(lastAlert != 2) { Alert("Sell ", _Symbol); lastAlert = 2; } } else { BufferNL[i]=0.5; BufferDN[i]=BufferUP[i]=EMPTY_VALUE; lastAlert = 0; } } }
He añadido una variable para limitar la alerta a una alerta por cruce.
Si sigue recibiendo alertas intrabarra, el código siguiente limita adicionalmente las alertas por la hora de apertura de la barra. Los valores históricos del buffer no se pueden usar porque tienen valores vacíos. Sólo ten en cuenta que no he compilado ni probado este código pero estoy seguro de que lo harás y volverás a publicar.😉
// poner estas 2 líneas arriba en el ámbito de las variables globales datetime lastOpenTime; ulong uLastOpenTime; ////////////////////////////////////////////////// // pon estas 2 líneas en la función OnInit() lastOpenTime = 0; uLastOpenTime = ulong(lastOpenTime); ////////////////////////////////////////////////// //--- Расчёт индикатора int lastAlert = 0; // 0 es plano, 1 es compra, 2 es venta for(int i=limit; i>=0 && !IsStopped(); i--) { BufferNL[i]=BufferDN[i]=BufferUP[i]=EMPTY_VALUE; if(BufferMACD[i]>0 && BufferSignal[i]<BufferMACD[i]) { BufferUP[i]=0.5; BufferNL[i]=BufferDN[i]=EMPTY_VALUE; if(lastAlert != 1 && uLastOpenTime < ulong(iTime(_Symbol, PERIOD_CURRENT, 1)) { Alert("Buy ", _Symbol); lastAlert = 1; uLastOpenTime = ulong(iTime(_Symbol, PERIOD_CURRENT, 1); } } else { if(BufferMACD[i]<0 && BufferSignal[i]>BufferMACD[i]) { BufferDN[i]=0.5; BufferNL[i]=BufferUP[i]=EMPTY_VALUE; if(lastAlert != 2 && uLastOpenTime < ulong(iTime(_Symbol, PERIOD_CURRENT, 1)) { Alert("Sell ", _Symbol); lastAlert = 2; lastOpenTime = ulong(iTime(_Symbol, PERIOD_CURRENT, 1); } } else { BufferNL[i]=0.5; BufferDN[i]=BufferUP[i]=EMPTY_VALUE; lastAlert = 0; } } }
MACD_Flat_Trend:
Indicador MACD Flat Trend
Autor: Scriptor