Cześć wszystkim, mam # 8217; mam kłopot z dźwiękowym alarmem dla Indywidualnego Squeeze. Znalazłem alert dla BBS wycisnąć indior, alarm działa # 8230, po prostu nie tak, jak wolałbym to. Rzeczywisty sygnał pojawia się, gdy kropka zmienia kolor na zielony przy końcu paska, a poprzednia kropka była czerwona. Teraz alarm rozbrzmiewa na każdej czerwonej kropce i zwykle wiele razy, ponieważ obecna kropka może zmieniać się z czerwonego na zielony w kółko. Więc nawet jeśli uda mi się go zaalarmować, zbliżając się do końca, wciąż będzie alarmował przy każdej czerwonej kropce, kiedy sygnał dla mnie jest właściwie zieloną kropką poprzedzającą czerwoną kropkę. W jakiś sposób potrzebuję go, aby ostrzec, gdy kropka zamyka się na zielono, a poprzednia kropka była czerwona. czy to możliwe? Jeśli ktoś wie, w jaki sposób można to zrealizować, bardzo doceniam każdą pomoc. Z góry dziękuję.
Wstawiono kod # 91; w lewo # 93;/ -------------------------------------- ---------------------------- /| bbsqueeze.mq4 |/| Copyright © 2005, Nick Bilak, beluck # 91; AT # 93; gmail.com |/| ulepszony przez CJ Rivasa, carlos # 91; AT # 93; vealo.com |/ ----------------------------------------------- ------------------- #property copyright Copyright © 2005, Nick Bilak #property indior_separate_window #property indior_buffers 6 #property indior_color1 Niebieski #property indior_color2 Czerwony #property indior_color3 DarkBlue #property indior_color4 Maroon #property indior_color5 Czerwony #property indior_color6 Lime/---- parametry wejściowe extern int bolPrd = 20; extern double bolDev = 2,0; extern int keltPrd = 20; extern double keltFactor = 1,5; extern int momPrd = 12; extern bool AlertSqueezeStart = false; extern bool AlertSqueezeEnd = false;/---- bufory podwójne upB # 91; # 93 ;; double upB2 # 91; # 93 ;; double loB # 91; # 93 ;; double loB2 # 91; # 93 ;; podwójne upK # 91; # 93 ;; double loK # 91; # 93 ;; int i, j, slippage = 3; podwójny punkt przerwania = 0,0; podwójne ema = 0,0; int peakf = 0; int pik = 0; int dolinaf = 0; int doliny = 0, granica = 0; podwójne ccis # 91; 61 # 93;, ccif # 91; 61 # 93 ;; podwójna delta = 0; podwójne ugol = 0;/ ----------------------------------------------- ------------------- /| Niestandardowa funkcja inicjalizacji/ ----------------------------------------------- ------------------- int init () {//---- indiors SetIndexStyle (0, DRAW_HISTOGRAM, EMPTY, 3); SetIndexBuffer (0, upB); SetIndexEmptyValue (0, EMPTY_VALUE); SetIndexStyle (1, DRAW_HISTOGRAM, EMPTY, 3); SetIndexBuffer (1, loB); SetIndexEmptyValue (1, EMPTY_VALUE); SetIndexStyle (4, DRAW_ARROW, EMPTY, 2); SetIndexBuffer (4, upK); SetIndexEmptyValue (4, EMPTY_VALUE); SetIndexArrow (4,159); SetIndexStyle (5, DRAW_ARROW, EMPTY, 2); SetIndexBuffer (5, loK); SetIndexEmptyValue (5, EMPTY_VALUE); SetIndexArrow (5 159); SetIndexStyle (2, DRAW_HISTOGRAM, EMPTY, 3); SetIndexEmptyValue (2, EMPTY_VALUE); SetIndexBuffer (2, upB2); SetIndexStyle (3, DRAW_HISTOGRAM, EMPTY, 3);SetIndexEmptyValue (3, EMPTY_VALUE); SetIndexBuffer (3, loB2);/---- return (0); }/ ---------------------------------------------- -------------------- /| Funkcja deinicjalizacji Custor indior |/ ----------------------------------------------- ------------------- int deinit () {//----/---- return (0); }/ ---------------------------------------------- -------------------- /| Niestandardowa funkcja iteracji |/ ----------------------------------------------- ------------------- int start () {int counted_bars = IndiorCounted (); int shift, limit; double diff, d, dPrev, std, bbs; if (counted_barslt; 0) return (-1); if (counted_barsgt; 0) counted_bars--; limit = Bars-31; jeśli (counted_barsgt; = 31) limit = Bars-counted_bars-1; for (shift = limit; shiftgt; = 0; shift--) {//d = iMomentum (NULL, 0, momPrd, PRICE_CLOSE, shift); d = LinearRegressionValue (bolPrd, shift); dPrev = LinearRegressionValue (bolPrd, shift 1); if (dgt; 0) {if ((dPrevgt; 0) (dPrev gt; d)) {upB2 # 91; shift # 93; = d; upB # 91; shift # 93; = 0; } else {upB # 91; shift # 93; = d; upB2 # 91; shift # 93; = 0; }/upB # 91; shift # 93; = 0; loB # 91; shift # 93; = 0; loB2 # 91; shift # 93; = 0; } else {if ((dPrevlt; 0) (dPrev lt)) {loB2 # 91; shift # 93; = d; loB # 91; shift # 93; = 0; } else {loB # 91; shift # 93; = d; loB2 # 91; shift # 93; = 0; } upB # 91; shift # 93; = 0; upB2 # 91; shift # 93; = 0;/loB # 91; shift # 93; = d; } diff = iATR (NULL, 0, keltPrd, shift) * keltFactor; std = iStdDev (NULL, 0, bolPrd, MODE_SMA, 0, PRICE_CLOSE, shift); bbs = bolDev * stddiff; if (bbslt; 1) {upK # 91; shift # 93; = 0; loK # 91; shift # 93; = EMPTY_VALUE; } else {loK # 91; shift # 93; = 0; upK # 91; shift # 93; = EMPTY_VALUE; } double diffprev, stdprev, bbsprev; diffprev = iATR (NULL, 0, keltPrd, 1) * keltFactor; stdprev = iStdDev (NULL, 0, bolPrd, MODE_SMA, 0, PRICE_CLOSE, 1); bbsprev = bolDev * stdprevdiffprev; } {if (bbsprevgt; = 1 bbslt; 1 AlertSqueezeStart == true) jeśli (NewBar ()) Alert (Symbol (),, Okres (), BB Squeeze Started); } {if (bbsprevlt; 1 bbsgt; = 1 AlertSqueezeEnd == true) jeśli (NewBar ()) Alert (Symbol (),, Okres (), BB Squeeze Ended); } return (0); }/ ---------------------------------------------- -------------------- double LinearRegressionValue (int Len, int shift) {double SumBars = 0; double SumSqrBars = 0; podwójne SumY = 0; podwójna suma1 = 0; podwójna Sum2 = 0; podwójny nachylenie = 0; SumBars = Len * (Len-1) * 0,5; SumSqrBars = (Len - 1) * Len * (2 * Len - 1)6; dla (int x = 0; xlt; = Len-1; x ) {double HH = Low # 91; x shift # 93 ;; podwójne LL = High # 91; x shift # 93 ;; dla (int y = x; ylt; = (x Len) -1, y ) {HH = MathMax (HH,High # 91; y shift # 93;); LL = MathMin (LL, Low # 91; y shift # 93;); } Sum1 = x * (Zamknij # 91; x shift # 93; - ((HH LL)2 iMA (NULL, 0, Len, 0, MODE_EMA, PRICE_CLOSE, x shift))2); SumY = (Zamknij # 91; x shift # 93; - ((HH LL)2 iMA (NULL, 0, Len, 0, MODE_EMA, PRICE_CLOSE, x shift))2); } Sum2 = SumBars * SumY; podwójne Num1 = Len * Sum1 - Sum2; podwójne Num2 = SumBars * SumBars-Len * SumSqrBars; if (Num2! = 0.0) {Slope = Num1Num2; } else {Slope = 0; } double Intercept = (SumY - Slope * SumBars)Len; double LinearRegValue = Intercept Slope * (Len - 1); return (LinearRegValue); } bool NewBar () {statyczny datetime dt = 0; if (dt! = Czas # 91; 0 # 93;) {dt = Czas # 91; 0 # 93 ;; Sen (100);/poczekaj na powrót znaku (true); } return (false); } return (0); # 91;left # 93;