-
指示器仅在当前栏上发出信号
嗨,
我有一个移动平均线交叉指标,每当移动均线交叉时就会发出警报。
我希望指标只有在发生交叉时(即在当前栏上)才会产生警报。但是,通过这个指标,每次我打开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);
}
-
#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);/---- return(0); }/ ---------------------------------------------- -------------------- /|自定义指标取消初始化函数|/ ----------------------------------------------- ------------------- int deinit(){//----/---- return(0); }/ ---------------------------------------------- -------------------- /|自定义指标迭代函数|/ ----------------------------------------------- ------------------- int start(){int limit,i,counter;快一倍,慢一点,快一点,以前,慢一点,快一点,慢一点;双Range,AvgRange; int counted_bars = IndiorCounted();/----检查可能的错误if(counts_barslt; 0)return(-1);/----最后一个计数的小节将被重新计数if(counts_barsgt; 0)counts_bars--;极限=棒材 - counted_bars; for(i = 0; i lt; = limit; i ){counter = i;范围= 0; AvgRange = 0; for(counter = i; counterlt; = i 9; counter ){AvgRange = AvgRange MathAbs(High [counter] - Low [counter]); } Range = 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] = Low [i] - Range * 0.5; } else if((fasterEMAnow lt; slowerEMAnow)(fasterEMAprevious gt; slowerEMAprevious)(fasterEMAafter lt; slowerEMAafter)){CrossDown [i] = High [i] Range * 0.5;如果(SoundON == true i == 1 CrossUp [0] gt; CrossDown [0] alertTag!= Time [0]){Alert(MACD 0 cross DOWN on,Symbol(),Period()); alertTag = Time [0]; SendNotifiion(MACD 0 cross DOWN _Symbol);如果(SoundON == true i == 1 CrossUp [0] lt; CrossDown [0] alertTag!= Time [0]){Alert(MACD 0 cross up on,Symbol(),Period()); alertTag = Time [0]; SendNotifiion(MACD 0 cross up _Symbol); }} return(0); }
-
-
-
Quote:
Originally Posted by ;
它是MACD交叉相关的
对于指标你可以设置任何2移动平均线。 12和26十字代表MACD上的0线交叉。