Chào,
Tôi có một chỉ báo chéo trung bình di chuyển tạo ra một cảnh báo mỗi khi các đường trung bình di chuyển cắt nhau.

Rằng tôi sẽ thích chỉ báo để tạo ra một cảnh báo chỉ khi một chữ thập vừa xảy ra (tức là trên thanh hiện tại). Tuy nhiên, với chỉ số này, mỗi khi tôi mở MT4 hoặc chuyển đổi giữa các khung thời gian, tôi nhận được cảnh báo mặc dù dấu thập đã xảy ra 2-3 thanh trước.

Đây là một bản sao của mã dưới. Cảm ơn nhiều.


#property indior_chart_window
#property indior_buffers 2
#property indior_color1 DarkGoldenrod
#property indior_color2 FireBrick
double CrossUp [];
double CrossDown [];
extern int FasterEMA = 1;
extern int SlowerEMA = 50;
extern bool SoundON = true;
double alertTag;
kiểm soát kép = 2147483647;

// ----------------------------------------------- -------------------
//| Chức năng khởi tạo chỉ báo tùy chỉnh |
// ----------------------------------------------- -------------------
int init ()

//- chỉ báo
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);

// ----------------------------------------------- -------------------
//| Chức năng khử chỉ số tùy chỉnh |
// ----------------------------------------------- -------------------
int deinit ()

//-
//-
return (0);

// ----------------------------------------------- -------------------
//| Chức năng lặp chỉ số tùy chỉnh |
// ----------------------------------------------- -------------------
int start ()
int giới hạn, i, truy cập;
double fasterEMAnow, slowEMAnow, fasterEMAprevious, slowEMAprevious, fasterEMAfter after, slowEMAfter;
Double Range, AvgRange;
int count_bars = IndiorCounted ();
//- kiểm tra lỗi có thể
if (count_barslt; 0) return (-1);
//- thanh được đếm cuối cùng sẽ được tính lại
if (count_barsgt; 0) counting_bars--;
limit = Bars-counted_bars;

cho (i = 0; i lt; = giới hạn; i )

counter = i;
Phạm vi = 0;
AvgRange = 0;
cho (counter = i; counterlt; = i 9; counter )

AvgRange = AvgRange MathAbs (High [counter] -Low [counter]);

Phạm vi = AvgRange10;

fasterEMAnow = iMA (NULL, 0, FasterEMA, 0, MODE_EMA, PRICE_CLOSE, i);
fasterEMAprevious = iMA (NULL, 0, FasterEMA, 0, MODE_EMA, PRICE_CLOSE, i 1);
nhanh hơnEMAafter = iMA (NULL, 0, FasterEMA, 0, MODE_EMA, PRICE_CLOSE, i-1);
chậm hơnEMAnow = iMA (NULL, 0, SlowerEMA, 0, MODE_EMA, PRICE_CLOSE, i);
chậm hơnEMAprevious = iMA (NULL, 0, SlowerEMA, 0, MODE_EMA, PRICE_CLOSE, i 1);
chậm hơnEMAafter = iMA (NULL, 0, SlowerEMA, 0, MODE_EMA, PRICE_CLOSE, i-1);

if ((fasterEMAnow gt; slowEMAnow) (nhanh hơnEMAprevious lt; slowEMAprevious) (nhanh hơnEMAafter gt; laterEMAfter))
CrossUp [i] = Thấp [i] - Phạm vi * 0,5;

else if ((nhanh hơnEMAnow lt; slowEMAnow) (nhanh hơnEMAprevious gt; slowEMAprevious) (nhanh hơnEMAafter lt; slowEMAafter))
CrossDown [i] = Cao [i] Dải * 0,5;

if (SoundON == true i == 1 CrossUp [i] gt; CrossDown [i] alertTag! = Thời gian [0])
Cảnh báo (MACD 0 cross DOWN on, Symbol (),, Period ());
alertTag = Thời gian [0];
SendNotifiion (MACD 0 cross DOWN trên _Symbol);

if (SoundON == chính xác I == 1 CrossUp [I] lt; CrossDown [I] alertTag! = Time [0])
Cảnh báo (MACD 0 cross UP, Symbol (),, Period ());
alertTag = Thời gian [0];
SendNotifiion (MACD 0 cross UP trên _Symbol);




return (0);