嗨,
我有一个移动平均线交叉指标,每当移动均线交叉时就会发出警报。
我希望指标只有在发生交叉时(即在当前栏上)才会产生警报。但是,通过这个指标,每次我打开MT4或在两个时间段之间切换时,即使交叉发生在2-3个小时前,我也会收到警报。
以下是下面的代码的副本。非常感谢。
#property indior_chart_window
#property indior_buffers 2
#property indior_color1 DarkGoldenrod
#property indior_color2 FireBrick
double CrossUp [];
双CrossDown [];
extern int FasterEMA = 1;
extern int SlowerEMA = 50;
extern bool SoundON = true;
双重alertTag;
双控制= 2147483647;
// ----------------------------------------------- -------------------
//|自定义指标初始化函数|
// ----------------------------------------------- -------------------
int init()
{
//----指标
SetIndexStyle(0,DRAW_ARROW,EMPTY,1);
SetIndexArrow(0,233);
SetIndexBuffer(0,CrossUp);
SetIndexStyle(1,DRAW_ARROW,EMPTY,1);
SetIndexArrow(1,234);
SetIndexBuffer(1,CrossDown);
//----
返回(0);
}
// ----------------------------------------------- -------------------
//|自定义指标取消初始化函数|
// ----------------------------------------------- -------------------
int deinit()
{
//----
//----
返回(0);
}
// ----------------------------------------------- -------------------
//|自定义指标迭代函数|
// ----------------------------------------------- -------------------
int start(){
int limit,i,counter;
快一倍,慢一点,快一点,以前,慢一点,快一点,慢一点;
双Range,AvgRange;
int counted_bars = IndiorCounted();
//----检查可能的错误
if(counts_barslt; 0)return(-1);
//----最后计算的酒吧将被重新计算
if(counts_barsgt; 0)counting_bars--;
极限=棒材 - counted_bars;
for(i = 0; i lt; = limit; i ){
计数器= I;
范围= 0;
AvgRange = 0;
for(counter = i; counterlt; = i 9; counter )
{
AvgRange = AvgRange MathAbs(高[计数器] - 低[计数器]);
}
范围= AvgRange10;
更快EMAnow= iMA(NULL,0,FasterEMA,0,MODE_EMA,PRICE_CLOSE,i);
更快EMAEMApre= iMA(NULL,0,FasterEMA,0,MODE_EMA,PRICE_CLOSE,i 1);
fasterEMAafter = iMA(NULL,0,FasterEMA,0,MODE_EMA,PRICE_CLOSE,i-1);
更低的当前= iMA(NULL,0,SlowerEMA,0,MODE_EMA,PRICE_CLOSE,i);
slowEMAprevious = iMA(NULL,0,SlowerEMA,0,MODE_EMA,PRICE_CLOSE,i 1);
slowEMAafter = iMA(NULL,0,SlowerEMA,0,MODE_EMA,PRICE_CLOSE,i-1);
if((fasterEMAnow gt; slowerEMAnow)(fasterEMAprevious lt; slowerEMAprevious)(fasterEMAafter gt; slowerEMAafter)){
CrossUp [i] =低[i] - 范围* 0.5;
}
else if((fasterEMAnow lt; slowlyEMAnow)(fasterEMAprevious gt; slowerEMAprevious)(fasterEMAafter lt; slowerEMAafter)){
CrossDown [i] =高[i] 范围* 0.5;
}
if(SoundON == true i == 1 CrossUp [i] gt; CrossDown [i] alertTag!= Time [0]){
警报(MACD 0 cross down,Symbol(),Period());
alertTag = Time [0];
SendNotifiion(MACD 0 cross DOWN _Symbol);
}
if(SoundON == true i == 1 CrossUp [i] lt; CrossDown [i] alertTag!= Time [0]){
警报(MACD 0交叉向上,Symbol(),Period());
alertTag = Time [0];
SendNotifiion(MACD 0 cross up _Symbol);
}
}
返回(0);
}